【问题标题】:Error "ResultSet closed"错误“结果集已关闭”
【发布时间】:2016-04-07 10:18:29
【问题描述】:

为什么会出现这个错误:

错误:java.sql.SQLException:结果集已关闭

从此代码:

try{   
        ArrayList<String> longArray = new ArrayList<String>();
        longArray.add("12345678912"); // All column in sqlite database are "text" so that's why I create String List 
        longArray.add("12345678911"); 
        System.out.println(longArray);
        String parameters = StringUtils.join(longArray.iterator(),",");  
        connection = sqliteConnection.dbConnector();  
        PreparedStatement pst=connection.prepareStatement("select columnA from TableUser where id in (?)");    
        pst.setString(1, parameters ); 
        ResultSet rs = pst.executeQuery(); 

        System.out.println(rs.getString("columnA")); // did not print anything, probably rs is empty
        rs.close();

数据库详情:
我在数据库中有一个表TableUser,其中有一列“id”作为文本。

另一个问题:数据库12345678912 (TEXT) 中的值是否与longArray.add("12345678912") 相同?

【问题讨论】:

    标签: java sqlite arraylist resultset


    【解决方案1】:

    在您检索到 ResultSet 后,您丢失了 if(rs.next())while(rs.next())

    对于您的其他问题...是的,他们都是Strings,不是吗?

    编辑: 问题本质上是试图将多个参数放入PreparedStatement 中的IN 语句中。见PreparedStatement IN Clause Alternatives

    【讨论】:

    • 没错。但是 while(rs.next()) { System.out.println(rs.getString("columnA"));没有打印任何东西..我该如何解决?非常感谢
    • 通过进行不返回空结果集的查询。
    • 尝试使用 Statement 并将 ID 连接到查询以查看它是否有效(如果 ID 是 TEXT,则使用 ' 分隔符)。可能是 SQLite 驱动程序不喜欢您使用准备好的语句的方式。
    • 你能帮我写对吗?你是认真的吗? //字符串问题 = "(?)"; PreparedStatement pst=connection.prepareStatement("select"+columnA+" from '"+TableUser +" where ' = '"+id+"' = '"+question+"'");
    • 查看链接以讨论如何使用IN 子句和PreparedStatement(它仍然比使用原始Statement 好很多)。
    猜你喜欢
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多