Re:SALOON & VBA

JAVA使いへの道④

JAVA使いへの道③での予告通り
今回は(って連載記事めいてきたけど)、更新機能の実装をしました。

なので、画面イメージはありません。
画面の見た目は全然変更なしなので・・・
でも、背後では更新機能のためにいろいろ変えてはいますよ。

今回苦労したのは、日本語コード(文字化け)とnull値の扱い(画面とSQLで、NULLが違う)ですね。
ソースを見ると、そんなもん、って感じですが、
ここまで来るのに、えんやこら(異常終了→デバッグ→ネット検索)でどっこいしょ。

正規の学習方法なし
のネット学習なので、そこは辛いところです。(モザイク、拾い喰い、体系的でない)

で、以下↓

■/workspace/BOOKLOG/WebContent/BookUpdJSP.jsp
<%@ page import="java.sql.*, BOOKLOG.DbAccess"
  contentType="text/html; charset=UTF-8" %>
<%
// 内容: データベースにアクセスする
// DbAccess のインスタンスを生成する
DbAccess db = new DbAccess();
// データベースへのアクセス
db.open();
//読書履歴を取得
String id13 = request.getParameter("isbn");
String sql = "SELECT booklog.*,to_char(GetDate,'YYYY-MM-DD') GDATE,"
      + "to_char(IssueDate,'YYYY-MM-DD') IDATE,"
      + "to_char(ReadDate,'YYYY-MM-DD') RDATE FROM booklog"
      + " Where ISBN13 = '" + id13 + "'";
ResultSet rs = db.getResultSet(sql);
//取得された結果に対しての処理
String id10   = null;
String title  = null;
String author  = null;
String publi  = null;
String gdate  = null;
String stat   = null;
String genr   = null;
String idate  = null;
String rdate  = null;
String tosyokan = null;
String gaiyo  = null;
String kanso  = null;
String imgFile = null;
String selHTML1 = null;
String selHTML2 = null;
String imgHTML = null;
int nedan = 0;
int syoyu = 0;
if (rs.next()) {
id10   = rs.getString("ISBN10");   if (id10  == null){ id10 = ""; }
title  = rs.getString("BookName");
author  = rs.getString("Author");   if (author == null){ author = ""; }
publi  = rs.getString("Publisher");  if (publi == null){ publi = ""; }
gdate  = rs.getString("GDATE");    if (gdate == null){ gdate = ""; }
stat   = rs.getString("State");
genr   = rs.getString("Genre");    if (genr  == null){ genr = ""; }
idate  = rs.getString("IDATE");    if (idate == null){ idate = ""; }
rdate  = rs.getString("RDATE");    if (rdate == null){ rdate = ""; }
nedan  = rs.getInt("Purchase");
syoyu  = rs.getInt("Ownership");
tosyokan = rs.getString("Library");   if (kanso == null){ kanso = ""; }
gaiyo  = rs.getString("Overview");  if (gaiyo == null){ gaiyo = ""; }
kanso  = rs.getString("Impressions"); if (kanso == null){ kanso = ""; }
imgFile = rs.getString("CoverImg");
// SELBOXの設定
if (stat.equals("未読")) {
  selHTML1 = "<option value='未読' selected>未読</option>"
      + "<option value='読書中'>読書中</option>"
      + "<option value='読了'>読了</option>";
} else if (stat.equals("読書中")) {
  selHTML1 = "<option value='未読'>未読</option>"
      + "<option value='読書中' selected>読書中</option>"
      + "<option value='読了'>読了</option>";
} else {
  selHTML1 = "<option value='未読'>未読</option>"
      + "<option value='読書中'>読書中</option>"
      + "<option value='読了' selected>読了</option>";
}
if (syoyu == 1) {
  selHTML2 = "<option value='1' selected>購入</option>"
      + "<option value='0'>非購入</option>";
} else {
  selHTML2 = "<option value='1'>購入</option>"
      + "<option value='0' selected>非購入</option>";
}
// 画像の設定
if (imgFile == null){
  imgFile = "";
} else {
  imgHTML = "<img width='250' src='C:/Users/TestUser/Pictures/BOOKLOG/" + imgFile + "'>";
}
}
// データベースへのコネクションを閉じる
db.close();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>読 書 履 歴 更 新</title>
<style>
 body{
  background-color:#80ff80;
  background:linear-gradient(to right, #00008B, #8080FF);
  "メイリオ";
  font-size:11pt;
 }
 input {border:none; height:23px; }
 input.minText { width:100px; }
 input.mdlText { width:410px; }
 input.bigText { width:680px; }
 select {border:none; }
 textarea {border:none; }
</style>
<script type="text/javascript">
 <!--
  function check(){
   if (document.formU.action.value == "DEL") {
    var msg = "削除してもいいですか?";
   } else {
    var msg = "更新してもいいですか?";
   }
   if (window.confirm(msg)){          // 確認ダイアログを表示
    return true; // 「OK」時は送信を実行
   } else {     // 「キャンセル」時の処理
    window.alert('キャンセルされました');  // 警告ダイアログを表示
    return false; // 送信を中止
   }
  };
 // -->
</script>
</head>
<body link="red" vlink="red" alink="red">
<form name="formU" method="post" action="updateLog.jsp" onSubmit="return check()">
 <input type="button" value="一覧に戻る" onClick="location.href='./BookLogJSP.jsp'">
 <button type="submit" name="action" value="UPD">更新する</button>
 <button type="submit" name="action" value="DEL">削除する</button>
<table border="0" bgcolor="#00008B">
 <tr valign="top">
  <td>
  <table border="2" align="center" bordercolor="#00008B" cellspacing="2" cellpadding="2" align="left" style="margin:20px 0px;" bgcolor="#00008B">
   <tr bgcolor="#FFFFFF" bordercolor="#00008B">
   <td bgcolor="#E8FFE0" style="font-size:11pt"><b>ISBN-13</b><font size="1" color="#FF3366">※</font></td>
   <td align="center"><b><%= id13 %></b><input type="hidden" name="id13" VALUE="<%= id13 %>"></td>
   <td bgcolor="#E8FFE0"><a href="https://www.amazon.co.jp/dp/<%= id10 %>" target="_blank">ISBN-10</a></td>
   <td> <input name="id10" type="text" value="<%= id10 %>" onchange='check2(this);' class="minText"></td>
   <td bgcolor="#E8FFE0">状  況</td>
   <td> <select name="stat"><%= selHTML1 %></select></td>
   <td bgcolor="#DDFFEE">画  像</td>
   <td align="left"> <input name="imgFile" type="text" value="<%= imgFile %>"></td></tr>
   <tr bgcolor="#FFFFFF">
   <td bgcolor="#E8FFE0">書  名<font size="1" color="#FF3366">※</font></td>
   <td colspan="5"> <input name="title" type="text" value="<%= title %>" class="bigText"></td>
   <td rowspan="8" colspan="2" align="center"><%= imgHTML %></td></tr>
   <tr bgcolor="#FFFFFF">
   <td bgcolor="#E8FFE0">著  者</td>
   <td colspan="3"> <input name="author" type="text" value="<%= author %>" class="mdlText"></td>
   <td bgcolor="#E8FFE0">ジャンル</td>
   <td align="left"> <input name="genr" type="text" value="<%= genr %>"></td></tr>
   <tr bgcolor="#FFFFFF">
   <td bgcolor="#E8FFE0">出 版 社</td>
   <td colspan="5"> <input name="publi" type="text" value="<%= publi %>" class="bigText"></td></tr>
   <tr bgcolor="#FFFFFF">
   <td bgcolor="#EEFFDD">発 行 日</td>
   <td> <input name="idate" value="<%= idate %>" class="minText"></td>
   <td bgcolor="#E8FFE0">入 手 日</td>
   <td> <input name="gdate" value="<%= gdate %>" class="minText"></td>
   <td bgcolor="#EEFFDD">読 了 日</td>
   <td> <input name="rdate" value="<%= rdate %>" class="minText"></td></tr>
   <tr bgcolor="#FFFFFF">
   <td bgcolor="#DFDFFF">概  要</td>
   <td colspan="5"> <input name="gaiyo" type="text" value="<%= gaiyo %>" class="bigText"></td></tr>
   <tr bgcolor="#FFFFFF">
   <td bgcolor="#DFDFFF">感  想</td>
   <td colspan="5" align="center"><textarea name="kanso" cols="85" rows="12"><%= kanso %></textarea></td></tr>
   <tr bgcolor="#FFFFFF">
   <td bgcolor="#E8FFE0">図 書 館</td>
   <td align="left"> <input name="tosyokan" type="text" value="<%= tosyokan %>"></td>
   <td bgcolor="#E8FFE0">所  有</td>
   <td> <select name="syoyu"><%= selHTML2 %></select></td>
   <td bgcolor="#EEFFDD">購入金額</td>
   <td> \ <input name="nedan" value="<%= nedan %>" class="minText">-</td>
   </tr>
  </table>
  </td>
 </tr>
</table>
</form>
</body>
</html>

で、更新処理のエンジン部分が以下↓
JSP で作成しましたが、本来は、Java Servletで実装すべきなのかも・・・と思いつつ
(だって、初心者なので、同じように書きたい・・・!)

■C:\workspace\BOOKLOG\WebContentupdateLog.jsp
<%@ page import="java.sql.*, BOOKLOG.DbAccess"
  contentType="text/html; charset=UTF-8" %>
<%
// 内容: データを更新・削除する
// DbAccess のインスタンスを生成する
DbAccess db = new DbAccess();
// データベースへのアクセス
db.open();
// エンコードの指定
request.setCharacterEncoding("utf-8");
// 入力された引数を取得する
String id13   = request.getParameter("id13");
String id10   = request.getParameter("id10");
String title  = request.getParameter("title");
String author  = request.getParameter("author");
String publi  = request.getParameter("publi");
String gdate  = request.getParameter("gdate");
String stat   = request.getParameter("stat");
String genr   = request.getParameter("genr");
String idate  = request.getParameter("idate");
String rdate  = request.getParameter("rdate");
String tosyokan = request.getParameter("tosyokan");
String gaiyo  = request.getParameter("gaiyo");
String kanso  = request.getParameter("kanso");
String imgFile = request.getParameter("imgFile");
String syoyu  = request.getParameter("shoyu");
int nedan = 0;
if (! request.getParameter("nedan").isEmpty()) {
 nedan = Integer.parseInt(request.getParameter("nedan"));
}
// 読書履歴を更新
String sql = "";
if (request.getParameter("action").equals("DEL")) {
 sql = "DELETE Booklog Where ISBN13 = '" + id13 + "'";
} else {
 sql = "UPDATE booklog SET BookName = '" + title + "'";
 sql += ",ISBN10 = '"   + id10  + "'";
 sql += ",Author = '"   + author + "'";
 sql += ",Publisher = '"  + publi + "'";
 sql += ",Genre = '"    + genr  + "'";
 sql += ",Purchase = "   + nedan;
 sql += ",Library = '"   + tosyokan + "'";
 sql += ",Overview = '"  + gaiyo  + "'";
 sql += ",Impressions = '" + kanso  + "'";
 sql += ",State = '"    + stat   + "'";
 sql += ",CoverImg = '"  + imgFile + "'";
 sql += ",Ownership = "  + syoyu;
 if ((idate == "") || (idate == null)) {
  sql += ",IssueDate = NULL";
 } else {
  sql += ",IssueDate = to_date('" + idate + "','YYYY-MM-DD')";
 }
 if ((gdate == "") || (gdate == null)) {
  sql += ",GetDate = NULL";
 } else {
  sql += ",GetDate = to_date('"  + gdate + "','YYYY-MM-DD')";
 }
 if ((rdate == "") || (rdate == null)) {
  sql += ",ReadDate = NULL";
 } else {
  sql += ",ReadDate = to_date('" + rdate + "','YYYY-MM-DD')";
 }
 sql += " Where ISBN13 = '" + id13 + "'";
}
  db.execute(sql);
// データベースへのコネクションを閉じる
db.close();
// 一覧画面にリダイレクト
response.sendRedirect( "BookLogJSP.jsp" );
%>

★おまけ
DATA BASEは、ORACLE 12C ですが、
これが、プラガブル・データベースという厄介(? 本当は便利)なもの
OACLE のサービスは重いので、いつもは、停止しておいて
使う時だけ、サービス起動しています。
ついでに、プラガブル・データベースをオープン
で、↓以下のバッチファイルで、起動

■ORCLSTART.bat
@echo off
echo Oracleサービスを開始します
pause
net start OracleServiceORCL
net start OracleOraDB12Home1TNSListener
net start OracleOraDB12Home1MTSRecoveryService
net start OracleVssWriterORCL
echo Oracleサービスを開始しました
echo.
echo プラガブル・データベースを起動します
pause
set CONN=sys/oracle as sysdba
(
echo alter pluggable database PDBORCL open;
echo quit;
) | sqlplus %CONN%
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

※ブログ作成者から承認されるまでコメントは反映されません。

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最新の画像もっと見る

最近の「Java」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事