为什么要获取java.sql.SQLException:ResultSet未打开。操作';下一个';不允许。JavaDerby数据库?
我得到了这个错误: java.sql.SQLException:结果集未打开。“下一步”操作未完成 被允许确认自动提交已关闭 当我试图从数据库创建实例时 当前代码:为什么要获取java.sql.SQLException:ResultSet未打开。操作';下一个';不允许。JavaDerby数据库?,java,jdbc,derby,Java,Jdbc,Derby,我得到了这个错误: java.sql.SQLException:结果集未打开。“下一步”操作未完成 被允许确认自动提交已关闭 当我试图从数据库创建实例时 当前代码: try { connection.setAutoCommit(false); stmt = connection.createStatement(); results = stmt.executeQuer
try
{
connection.setAutoCommit(false);
stmt = connection.createStatement();
results = stmt.executeQuery("SELECT * from animalTable");
int AnimalCat = -1;
System.out.print(connection.getAutoCommit());
//getting error on line below
while(results.next())
{
int ID = results.getInt(1);
int Age = results.getInt(2);
String Name = results.getString(3);
String AType = results.getString(4);
String Breed = results.getString(5);
AnimalCat = results.getInt(6);
int Adoption = results.getInt(7);
String Gender = results.getString(8);
String Description = results.getString(9);
if(Gender == "Male"){
gen = true;
}
animal = new Animal(Age, AType, gen, Breed, Description, Name);
animalList.add(animal);
if(AnimalCat != -1){
ResultSet resultCat = stmt.executeQuery("SELECT * from CategoryTable where ID = " + AnimalCat);
//without this line below i get a cursor error
resultCat.next();
System.out.println(resultCat.getInt(1) +"\n\n " + resultCat.getString(2));
String Category = resultCat.getString(2);
if(Category == "Lost"){
Date input = resultCat.getDate(3);
LocalDate date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
ResultSet personData = stmt.executeQuery("SELECT * from PersonTable where ID = " + resultCat.getInt(4));
Person person = new Person(personData.getString(2), personData.getString(3), personData.getString(4), personData.getString(5));
Category lost = new Lost(date, resultCat.getString(5), person);
animal.setAnimalCat(lost);
personList.add(person);
}
}
}
results.close();
stmt.close();
}
catch (SQLException sqlExcept)
{
sqlExcept.printStackTrace();
}
我尝试过关闭自动提交,就像它在异常中所说的那样,还添加了finally块并关闭语句。从我在网上看到的情况来看,我解决了其他问题,但我的运气不好
我知道
resultCat.next()
在某种程度上是错误的根源,但是如果没有它,我会得到一个“无效的游标状态-没有当前行”您有一个语句,从该语句中获取一个结果集,然后获取另一个结果集。这将自动生成第一个结果集
:
默认情况下,每个语句对象只能打开一个ResultSet对象
同时因此,如果读取一个ResultSet对象
与另一个的读取交错,每个都必须已生成
通过不同的语句对象。语句中的所有执行方法
如果
开放的存在
因此,当您在第一个结果集上调用next
时,会引发异常。Javadoc还告诉您要更改什么:创建第二条语句并使用该语句获得第二个结果集