我进行数据库查询,并将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
方法?
ResultSet.getObject
(和其他getXxx
方法)将从ResultSet
的当前行检索数据,并从索引1开始。您已将i
变量设置为0值。
只需更改此
int i=0;
至
int i=1;
此外,getObject
需要一个参数,但您错误地发送了两个:
Account account= rs.getObject(i, Account);
您可能试图使用ResultSet#getObject(int, Class)
(可从Java7中获得),但必须考虑到Account
类不能从数据库列神奇地转换为此对象的实例。
看起来最好先查看JDBC试用版,然后重试以解决您的问题。
下面是另一个值得回顾的好消息来源:使用自定义类型映射
我们的对象:
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数据库下测试。
对象变量,包括:
- 仅引用内存中的空间
- 任何REFERENCE都使用内存(只是一点点)
- 从一个引用中获取/使用任何特定类类型的对象的方法是简单地对其进行类型转换