更新のSQL文では抽出条件が重要な役割を果たすので、その点に注目してください。
【1】PrefUpdate.java を新たに作成します。
*「\」はWindowsではエンマークのことです。
保存先 C:\java\sample100
ファイル名 PrefUpdate.java
import java.sql.*;
import java.io.*;
class PrefUpdate {
public static void main(String args[]) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("更新する PREF_CD を入力してください。");
String str = br.readLine();
int prefCd = Integer.parseInt(str);
System.out.println("新しい PREF_NAME を入力してください。");
String prefName = br.readLine() ;
//JDBCドライバのロード
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//各設定
String url = "jdbc:odbc:SampleDB030";
String user = "";
String pass = "";
//データベースに接続
Connection con = DriverManager.getConnection(url,user,pass);
//ステートメントオブジェクトを作成
Statement stmt = con.createStatement();
//SQL文作成
String mySql = "update T01Prefecture set PREF_NAME = '" + prefName + "' where PREF_CD = " + prefCd;
System.out.println();
System.out.println("SQL:" + mySql);
//SQL実行
int num = stmt.executeUpdate(mySql);
System.out.println(num + "件のレコードを更新しました。");
//オブジェクトを解放
stmt.close();
con.close();
} catch (NumberFormatException e) {
System.out.println("値を整数型に変換できませんでした。");
System.out.println("例外発生:" + e );
} catch (Exception e) {
System.out.println("例外発生:" + e );
}
}
}
【2】コマンドプロンプトを起動して、カレントディレクトリを sample100 に切り替えます。
【3】javac PrefUpdate.java と入力し、コンパイルします。
更新のプログラムを実行する前に、更新するレコードの PREF_CD を調べる必要があります。
【4】java PrefSelect と入力し、検索プログラムを実行します。
【5】今回は 101 サイパン のレコードを更新しますので、この番号を覚えておいてください。
【6】java PrefUpdate と入力し、更新プログラムを実行します。
【7】「更新する PREF_CD を入力してください。」と表示されたら 101 と入力してEnterキーを押します。
【8】「新しい PREF_NAME を入力してください。」と表示されたら ボストン と入力してEnterキーを押します。
*コマンドプロンプトでは日本語が入力できませんので、一度テキストエディタで入力し、コピーペーストしてください。
【9】更新結果が表示されました。
*コマンドライン引数を使い、SQL文がプログラムの中で動的に組み立てられています。
【10】コマンドプロンプトからレコードを確認してみます。java PrefSelect と入力し、検索プログラムを実行します。
【11】「101 ボストン」に更新されています。
【12】データベース SampleDB030.mdb のテーブル T01Prefecture を開いても確認することができます。
【解説】
プログラムは追加の時とほとんど一緒なので、今回は更新のSQL文についてだけ解説します。
(1)更新のSQL文を組み立てている部分です。変数が実際の値に置き換わります。
String mySql = "update T01Prefecture set PREF_NAME = '" + prefName + "' where PREF_CD = " + prefCd;
レコードを更新するときには where で抽出条件を指定することがとても重要です。抽出条件を忘れるとすべてのレコードが同じ値に更新されてしまいますので気をつけてください。
(2)SQL文の組み立て方
最終的に組み立てたいSQL文です。
update T01Prefecture set PREF_NAME = 'ボストン' where PREF_CD = 101
全体を「"」(ダブルクォーテーション)で囲みます。
"update T01Prefecture set PREF_NAME = 'ボストン' where PREF_CD = 101"
値をコントロールや変数に置き換えます。
"update T01Prefecture set PREF_NAME = 'prefName' where PREF_CD = prefCd"
コントロールや変数の前後に半角空白を入れ切り離します。
"update T01Prefecture set PREF_NAME = ' prefName ' where PREF_CD = prefCd "
コントロールや変数以外の文字列部分を「"」(ダブルクォーテーション)で囲みます。
"update T01Prefecture set PREF_NAME = '" prefName "' where PREF_CD = " prefCd
コントロールや変数と文字列を「+」で結合します。
"update T01Prefecture set PREF_NAME = '" + prefName + "' where PREF_CD = " + prefCd
変数mySqlに代入して1行のプログラムの終わりをあらわす「;」(セミコロン)を付けます。
String mySql = "update T01Prefecture set PREF_NAME = '" + prefName + "' where PREF_CD = " + prefCd;
これでプログラムの中でSQL文が動的に組み立てられるようになりました。
*SQLについてはAccess SQL初心者入門講座で詳しく解説しています。