0

単語のリストをデータベースに保存しようとしています。他のすべてのデータベース指向関数は正常に機能しますが、この特定のメソッドをループで呼び出すと、ResultSet is Closedエラーが返されます。HashMap のメソッド構造をシミュレートしようとしています。問題のある方法は次のとおりです。

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()です。私はデータベースの世界の初心者であり、頭がおかしいようですが、誰もがかつては初心者でした:)。参考までに、クラス全体:

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;
    }
}
4

1 に答える 1