Java コマンドラインからの入力でレコードを追加する。

Javaのプログラムで、SQL文を動的に作成するもう一つの方法は、BufferedReader クラスの readLine() メソッドを使う方法です。readLine() メソッドを使うと、プログラムの実行中にコマンドラインからの「入力待ち」の状態にし、1行単位でテキストを読み込むことができます。早速試してみましょう。


【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 に切り替えます。

java-334.gif


【3】javac PrefInsert3.java と入力し、コンパイルします。

java-370.gif


【4】java PrefInsert3 と入力し、プログラムを実行します。

java-371.gif


【5】「PREF_CD を入力してください。」と表示されたら 101 と入力してEnterキーを押します。

java-372.gif


【6】「PREF_NAME を入力してください。」と表示されたら サイパン と入力してEnterキーを押します。

java-373.gif

*コマンドプロンプトでは日本語が入力できませんので、一度テキストエディタで入力し、コピーペーストしてください。


【7】結果が表示されました。

java-374.gif

*コマンドライン引数を使い、SQL文がプログラムの中で動的に組み立てられています。


【8】コマンドプロンプトから確認してみます。java PrefSelect と入力し、プログラムを実行します。

java-375.gif


【9】「101 サイパン」が追加されています。

java-376.gif


【10】データベース SampleDB030.mdb のテーブル T01Prefecture を開いても確認することができます。

java-377.gif


【解説】

(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() とリンクをたどります。

java-378.gif

java-379.gif

readLine()メソッドの説明からいろいろなことがわかります。
public String readLine()throws IOException

・public 他のクラスから利用できる。
・staticが無いのでインスタンスを生成してからメソッドを使う。
・String このメソッドはString型の値を返す。
・readLine() 実引数は無し。
・IOExceptionという例外が発生する可能性がある。

java.io.IOException は java.lang.Exception を継承しているので、Exceptionでも例外がキャッチできるため、今回は特にcatch文は書いていません。
java-380.gif


(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 をもとに作ります。


スポンサードリンク

スポンサードリンク






Java初心者入門講座TOPへ