web-dev-qa-db-ja.com

結果セットのgetObject()メソッド-それを適切に使用する方法は?

データベースクエリを作成し、AccountオブジェクトをResultSetに格納します。コードは次のとおりです。

try {
    ResultSet rs = queryDatabase();
    int i=0;
    while (rs.next()) {
        Account account= rs.getObject(i, Account); //ERROR
        accounts.add(account);
        i++;
    } 
} catch (Exception e) {
}

このコードは3つのオブジェクトを返し、それらをrsに格納します。次に、これらのオブジェクトをResultSetに取得し、コードに示されているようにArrayListに配置します。ただし、指定された行に;が必要であるというエラーが表示されます。 getObjectメソッドを適切に使用するにはどうすればよいですか?

8
yrazlik

_ResultSet.getObject_ (および他のgetXxxメソッド)は、ResultSetの現在の行からデータを取得し、インデックス1から開始します。i変数に0の値を設定しました。

これを変更するだけ

_int i=0;
_

_int i=1;
_

また、getObjectには1つのパラメーターが必要ですが、誤って2つ送信しています。

_Account account= rs.getObject(i, Account);
_

おそらくあなたは ResultSet#getObject(int, Class) (Java 7)から入手可能)を使おうとしていましたが、Accountクラスが使用できないことを考慮に入れる必要がありますデータベース列からこのオブジェクトのインスタンスにmagically変換されます。

JDBCトライアル を最初に確認してから、問題の解決を再試行する方がよいようです。

レビューする別の良い情報源は次のとおりです。 カスタマイズされた型マッピングの使用

3
Luiggi Mendoza

私たちの目的:

import Java.io.Serializable;
...
class Account implements Serializable{
   public String data;
}

Bdからオブジェクトを取得する方法:

while (rs.next()) {
        Object accountJustObject = rs.getObject(i); 
        Account account = (Account)accountJustObject;
        accounts.add(account);
        i++;
} 

オブジェクトを保存する方法:

public void InsertAccount(int id, Account newaccount){
 reparedStatement insertNew = conn.prepareStatement(
  "INSERT INTO root(id,account) VALUES (?,?)";
   insertNew.setInt(1, id);             //INT   field type
   insertNew.setObject(2, newaccount);  //OTHER field type
   insertNew.executeUpdate();  
 )
}

H2データベースでテスト済み。

1
Ilja Vost

オブジェクト変数は次のとおりです。

  • メモリ内のスペースへの参照のみ。
  • すべてのREFERENCEはメモリを使用します(ほんの少し)
  • 1つの参照から特定のタイプのクラスのオブジェクトを取得/使用する方法は、単純に型キャストすることです。
0
Alejandro Hdz