Resultset的getObject()方法 - 如何正确使用它?

时间:2013-07-09 23:22:05

标签: java jdbc resultset

我进行数据库查询并在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方法?

3 个答案:

答案 0 :(得分:3)

ResultSet.getObject(以及其他getXxx方法)将从ResultSet的当前行检索数据并从索引1开始。您已设置i变量0值。

只需更改此

int i=0;

int i=1;

此外,getObject需要一个参数,但您输错了两个:

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

可能您尝试使用ResultSet#getObject(int, Class)(可从Java 7获得),但您必须考虑到您的Account类无法神奇地转换为数据库列到此对象的实例。

最好首先查看JDBC trial,然后重试以解决您的问题。

以下是另一个值得审核的好消息来源:Using Customized Type Mappings

答案 1 :(得分:1)

我们的目标:

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数据库下测试。

答案 2 :(得分:0)

对象变量是:

  • 仅引用内存中的空间。
  • 任何参考都使用内存(只是一点点)
  • 从一个引用中获取/使用特定类类型的任何对象的方法是通过简单的类型转换。