今回は(って連載記事めいてきたけど)、更新機能の実装をしました。
なので、画面イメージはありません。
画面の見た目は全然変更なしなので・・・
でも、背後では更新機能のためにいろいろ変えてはいますよ。
今回苦労したのは、日本語コード(文字化け)と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%
最新の画像もっと見る
最近の「Java」カテゴリーもっと見る
最近の記事
カテゴリー
- VBScript(2)
- Weblog(314)
- お仕事ツール(0)
- Saloon(1122)
- Node.js他(Python)(16)
- HTA(32)
- 決め・分け論(72)
- 映画・ドラマ(37)
- EXCEL VBA(35)
- PL/SQL(10)
- Java(11)
- 詩(自作)(5)
- 詩(塚原将)(298)
- 短歌(200)
- 題詠100首鑑賞(96)
- 題詠100首(109)
- ALIAS SMITH and JONES エピソード(1)
- 題詠100首2010(11)
- 読書(74)
- プロスポーツ(プロ野球、格闘技)(27)
- 日常・育児とか(88)
- 仕事(IT関係)(61)
- とほほ(33)
- 夢(32)
- 勝手にバトン(7)
- 写真(36)
- スタートレック視聴日誌草稿(24)
- 旅行(25)
- 嫌いな言葉(6)
- 好きな言葉(4)
バックナンバー
人気記事