- PR -

ResultSet rsでの値取得について

1
投稿者投稿内容
まな
常連さん
会議室デビュー日: 2005/10/26
投稿数: 45
投稿日時: 2006-04-26 12:05
お世話になります。main関数でreceive()を呼び、createStatement()でinsert文を実行、getInsert()でinsertする値を取得しています。
うまく値が取得できず、困っています。getInsert() 内でのSystem.out.printでは取得できます。

private void receive() throws IOException, Throwable {

/*省略・・受信ファイルから1行ずつデータを取り出す処理*/

getInsert();
psInsDB2_.executeUpdate();


}

//DB2insertメソッド
private void createStatement(){
sb = new StringBuffer();
sb.append("INSERT INTO DB2( ");
sb.append("name, ");
sb.append("tosi, ");
sb.append("kabu ) VALUES ( ");
sb.append("'" + name_ + "', ");
sb.append("'" + tosi_ + "', ");
sb.append("'" + kabu_ + " )");
psInsDB2_ = con_.prepareStatement(sb.toString());
}

//DB2にinsertするデータを取得
private static void getInsert() throws SQLException
{
ResultSet rs = null;

rs = psSelDB1_.executeQuery();・・・selectでDB1からname、tosi、kabuを取得

if(rs.next()){

name_ = rs.getString("name");
System.out.print(name)
tosi_ = rs.getString("tosi");
kabu_ = rs.getString("kabu");
}
}
よろしくお願いします。
せん
ぬし
会議室デビュー日: 2002/03/04
投稿数: 397
投稿日時: 2006-04-26 13:05
System.out.print で値を表示しているものと、
ResultSet で取得しているものを格納している変数が
異なるようにみえますが。

コード:
name_ = rs.getString("name");
System.out.print(name)

想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-04-26 13:06
向こうのスレッドにも書きましたけど psInsDB2_ にステートメントのオブジェクトを作成しただけで実行しているようには見えません。

提示されたソースからだとmain() -> receive() -> getInsert() -> psInsDB2_.executeUpdate() の順番で実行しているようでcreateStatement()が実行されてるようには見えません。

psInsDB2_ が null のままなら例外が発生していると思います。
zilloll
常連さん
会議室デビュー日: 2006/02/01
投稿数: 24
投稿日時: 2006-04-26 13:13
何が問題点なのかがよくわかりませんでした。
本来どういった動きをしてほしいのか。
実際にはどのような動作になっているか。

とりあえずソースを見て以下の点が気になりました。

1.SQL文の”kabu_”の値を設定する部分でシングルコーテーションが
閉じられてない

2.receiveメソッド内でgetInsertの後、executeUpdate()を実行しているが
createStatement()しなくていいのか?

3.頭のコメントから、ファイルから読み込んだデータを
一括登録しているように読み取ます。
InsertのSQLについてPreparedStatementを使用しているけど、
SQLは値を直に記述している。
Insert毎にcon_.prepareStatement(sb.toString())を実行するのは
無駄ではないだろうか。

4.現在のコードでは、Insert毎にcreateStatement()を呼ばないといけないように
見えるけど毎回statementのCloseはしているのだろうか。
connectionのcloseによる暗黙のcloseになると、コネクションプーリングを
行っている場合はタイミングによってDBのセッションが増え続ける不具合が
起こる可能性があるのではないだろうか。

5.
引用:

main関数でreceive()を呼び、createStatement()でinsert文を実行、getInsert()でinsertする値を取得しています



createStatement()ではステートメントを作成しているだけで、
Insertの実行はreceive()で実行しているが、記述ミス?


5.受信ファイルから一行ずつデータを取っているとのことですが、
登録データは検索SQLから取得しているのがよくわかりませんでした。
受信ファイルは検索キーワード取得用?
1

スキルアップ/キャリアアップ(JOB@IT)