【1】PrefInsert3.java を新たに作成します。
*「\」はWindowsではエンマークのことです。
保存先 C:\java\sample100
ファイル名 PrefInsert3.java
import java.sql.*;
import java.io.*;
class PrefInsert3 {
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 = "insert into T01Prefecture values(" + prefCd + ", '" + prefName + "')";
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 PrefInsert3.java と入力し、コンパイルします。
【4】java PrefInsert3 と入力し、プログラムを実行します。
【5】「PREF_CD を入力してください。」と表示されたら 101 と入力してEnterキーを押します。
【6】「PREF_NAME を入力してください。」と表示されたら サイパン と入力してEnterキーを押します。
*コマンドプロンプトでは日本語が入力できませんので、一度テキストエディタで入力し、コピーペーストしてください。
【7】結果が表示されました。
*コマンドライン引数を使い、SQL文がプログラムの中で動的に組み立てられています。
【8】コマンドプロンプトから確認してみます。java PrefSelect と入力し、プログラムを実行します。
【9】「101 サイパン」が追加されています。
【10】データベース SampleDB030.mdb のテーブル T01Prefecture を開いても確認することができます。
【解説】
(1)java.ioパッケージに含まれるクラスをいくつか利用しますので、インポートします。
import java.io.*;
(2)コマンドプロンプトから1行単位でテキストを読み込むための準備です。BufferedReader クラスの readLine() メソッドを使うために、インスタンスを生成しています。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReaderのコンストラクタの部分は説明が複雑です。とりあえずこの1行を書けばメソッドが使えます。
・System.in 「標準」入力ストリームで、通常はキーボード入力
・InputStreamReader バイトストリームから文字ストリームへの橋渡しの役目
・BufferedReader バッファリングすることによって効率良く読み込む役目
BufferedReader の内部に InputStreamReader をラップし、InputStreamReader の内部に System.in をラップしています。
(3)JavaのAPI仕様で BufferedReader クラスを確認してみましょう。
java.io → BufferedReader → readLine() とリンクをたどります。
readLine()メソッドの説明からいろいろなことがわかります。
public String readLine()throws IOException
・public 他のクラスから利用できる。
・staticが無いのでインスタンスを生成してからメソッドを使う。
・String このメソッドはString型の値を返す。
・readLine() 実引数は無し。
・IOExceptionという例外が発生する可能性がある。
java.io.IOException は java.lang.Exception を継承しているので、Exceptionでも例外がキャッチできるため、今回は特にcatch文は書いていません。
(4)コマンドラインから入力した値をいったん文字列として取り込み、それを整数型に変更しています。readLine()メソッドのところで「入力待ち」の状態になります。
System.out.println("PREF_CD を入力してください。");
String str = br.readLine();
int prefCd = Integer.parseInt(str);
(5)PREF_NAMEは文字列なのでそのまま使います。
System.out.println("PREF_NAME を入力してください。");
String prefName = br.readLine() ;
後のプログラムは PrefInsert2.java と同じです。
更新、削除のプログラムは今回の PrefInsert3.java をもとに作ります。