【问题标题】:Resultset's getObject() method - how to use it properly?结果集的 getObject() 方法——如何正确使用?
【发布时间】:2013-07-07 18:01:32
【问题描述】:

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

【问题讨论】:

  • 为什么getObject旁边有双括号:(())
  • 它告诉你你有一个语法错误。比如,太多的括号,以及不属于的类型。
  • 好吧,抱歉我修好了括号
  • @BrianRoach 可悲的是,我的答案不能仅包含在 cmets =\
  • @iceface 问题是你不了解 JDBC 是如何工作的,所以首先要做的是复习它。

标签: java jdbc resultset


【解决方案1】:

对象变量,分别是:

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

【讨论】:

    【解决方案2】:

    我们的对象:

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

    【讨论】:

      【解决方案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

      【讨论】:

      • 我试过了,还把错误的那行改成了 Account account= rs.getObject(i, Account.class);现在没有语法错误,但它返回 null,我将调试和编辑问题,顺便感谢
      • 有道理,我找到了一种方法,谢谢。当我们制作 String s=rs.getString(0);它没有给出任何错误,所以我想如果我对 Account 对象做同样的事情,那没关系,但它没有
      • 但是关于你的答案,getObject 方法也可以带两个参数是没有错的
      • iceface,您的数据库不包含 Account 类的实例,除非您将它们作为 Blob 放在那里,在这种情况下,您仍然在错误地使用 API。听取 Luigi 的建议并查看 JDBC 及其教程。
      • 有谁知道为什么 ResultSet.getObject(int i) 从 1 而不是 0 开始计算列(作为任何数组)?
      猜你喜欢
      • 2016-07-13
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 2018-07-22
      相关资源
      最近更新 更多