如何在java中为sqlite数据库的不同行示例化多个对象?

cwxwcias  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(308)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题
我想我可以保持这个很简单。我有一个来自javafx的gui,它显示来自sqlite数据库的关于示例“租户”的信息,但是,我只能让它用表顶部的第一个可用信息填充一行,使用我编写的查询数据库的当前方法。这是因为我需要示例化我当前拥有的作为“租户”对象的对象,该对象采用名称、租赁长度、已付租金(0/1)和与该租户关联的属性id。
如果我只能访问单行而没有while循环,那么如何用java中的sqlite数据库填充表中的所有内容呢。
例如

rs.getString("name");
    rs.getDouble("leaseLength");
    rs.getBoolean("rentPaid");
    rs.getString("PropertyID");

所有这些都只返回第一个值,没有while循环,但我需要它返回多个值以存储在不同的变量中,这样我就可以从所述变量中的信息示例化多个对象。当我调用querytents()方法时,它设法从第一个租户那里获取所需的值,但是我看不到继续查询示例化并从尽可能多的租户那里获取信息的方法。
有什么想法吗?
以下是显示表的屏幕截图:
在此处输入图像描述
这是查询sqlite数据库并获取租户的所有信息,然后使用4个字段示例化我在别处定义的租户对象的结果。但是我只能做一个租户,如果我调用该方法两次,它就会用相同的租户填充表,因为它仍然只能从.db文件的列表中获取第一个租户。
抱歉,如果这是一个糟糕的问题,或如果信息是缺乏的。我对这个很陌生,7月份才开始编写代码。先谢谢你。

xriantvc

xriantvc1#

你多次提到不使用 while 循环,这就是你的问题所在。为了得到 ResultSet 你需要使用 while 循环。例如:

List<Tenant> getTenants() throws SQLException {
  try (Statement stat = connection.createStatement();
       ResultSet rs = stat.executeQuery("SELECT * FROM tenants")) {

    List<Tenant> tenants = new ArrayList<>();

    while (rs.next()) {
      Tenant tenant = new Tenant();
      tenant.setName(rs.getString("name"));
      tenant.setLeaseLength(rs.getDouble("leaseLength"));
      tenant.setRentPaid(rs.getBoolean("rentPaid"));
      tenant.setPropertyId(rs.getString("PropertyID"));

      tenants.add(tenant);
    }

    return tenants;
  }
}

注意事项:
每次 ResultSet#next() 退货 true 内部“光标”移动到下一行数据。
上面使用try with resources语句。
如果查询有参数,强烈建议使用 PreparedStatement 而不是 Statement . 这有助于防止常见问题,尤其是sql注入。

相关问题