首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检索时出现ResultSet is Closed错误

检索时出现ResultSet is Closed错误
EN

Stack Overflow用户
提问于 2013-07-13 21:38:39
回答 1查看 260关注 0票数 0

我正在尝试将单词列表存储在数据库中。所有其他面向数据库的函数都工作得很好,但是这个特定的方法在循环中调用时会返回一个ResultSet is Closed错误。我正在尝试模拟HashMap的方法结构。下面是有问题的方法:

代码语言:javascript
复制
public int get(String key){
    ResultSet rs = null;
    int ret = -1;
    try{
        if(!running)
        initialize();
        rs = connection.createStatement().executeQuery("select frequency from Commonlist where word = '"+key+"'");
        ret = rs.getInt("frequency");
    }
        catch(SQLException sqle){
        sqle.printStackTrace();
    }
    finally{
        try{rs.close();}catch(Exception e){e.printStackTrace();}
        return ret;
    }
}

它似乎将这个错误抛给了ret = rs.getInt()。作为数据库世界的初学者,我似乎束手无策,但每个人都曾是初学者:)。作为参考,整个班级:

代码语言:javascript
复制
import java.sql.*;
import org.sqlite.*;
public class CommonList
{
    private static Connection connection = null;
    private static Statement query;
    private boolean running = false;
    public synchronized Connection getConnection(){
        try{
            if(running == false)
            connection = DriverManager.getConnection("jdbc:sqlite:CommonList.db");
        }
        catch(Exception e){
            e.printStackTrace();
        }
        running = true;
        return connection;
    }
    public void initialize(){
        try{
            Class.forName("org.sqlite.JDBC");
            connection = getConnection();
            query = connection.createStatement();
            query.setQueryTimeout(30);
            query.executeUpdate("create table if not exists CommonList(word string,frequency integer)");
        }
            catch(Exception sqle){
            sqle.printStackTrace();
        }
    }
    public void put(String key,int frequency){
        try{
            if(!running)
            initialize();
            query.executeUpdate("delete from CommonList where word = '"+key+"'");
            query.executeUpdate("insert into CommonList values('"+key+"',"+frequency+")");
        }
            catch(SQLException sqle){
            sqle.printStackTrace();
        }
    }
    public int get(String key){
        ResultSet rs = null;
        int ret = -1;
        try{
            if(!running)
            initialize();
            rs = connection.createStatement().executeQuery("select frequency from Commonlist where word = '"+key+"'");
            ret = rs.getInt("frequency");
        }
            catch(SQLException sqle){
            sqle.printStackTrace();
        }
        finally{
            try{rs.close();}catch(Exception e){e.printStackTrace();}
            return ret;
        }
    }
    public void delete(String key){
        try{
            if(!running)
            initialize();
            query.executeUpdate("delete from CommonList where word = '"+key+"'");
        }
            catch(SQLException sqle){
            sqle.printStackTrace();
        }
    }
    public String toString(){
//Test code
         ResultSet rs =null;
        try{
             rs =  connection.createStatement().executeQuery("select * from CommonList");
             System.out.println("Word       Frequency\n---------------------------");
             while(rs.next()){
                 System.out.println(rs.getString(1)+"    "+rs.getInt(2));
                }
            }
            catch(Exception e){
                e.printStackTrace();
            }
            finally{
                try{rs.close();}catch(Exception e){e.printStackTrace();}
                return "Java Wrapper for SQLite Database";
            }
    }
    private void closeConnection(){
        if(connection!=null)
        try{connection.close();}catch(Exception e){e.printStackTrace();}
    }
    public void close(){
        closeConnection();
        running = false;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-13 22:02:26

您需要首先调用rs.next()以确保结果集游标指向返回的ResultSet中的第一条记录。因此,请替换下面的调用:

代码语言:javascript
复制
ret = rs.getInt("frequency");

通过以下方式:

代码语言:javascript
复制
if(rs.next()){
ret = rs.getInt("frequency");
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17630720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档