gpt4 book ai didi

java - 结果集已关闭检索时出错

转载 作者:行者123 更新时间:2023-12-02 06:54:03 26 4
gpt4 key购买 nike

我正在尝试在数据库中存储单词列表。所有其他面向数据库的函数都运行良好,但在循环中调用此特定方法时,会返回 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;
}
}

最佳答案

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

ret = rs.getInt("frequency");

与:

if(rs.next()){
ret = rs.getInt("frequency");
}

关于java - 结果集已关闭检索时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17630720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com