我想返回一个我从表中选择的值,但是我的代码没有返回任何内容,它也会在空结果集上给出错误非法操作。 如何删除此错误,此程序也没有从表
中选择适当的值 Connection connection= null ;
Statement statement = null ;
ResultSet resultSet= null;
int cellno=0;
try
{
connection = DriverManager.getConnection(DATABASE_URL,"root","rohma");
statement = connection.createStatement();
//resultSet = statement.executeQuery("SELECT idactors,firstname,lastname FROM actors");
String sql ="SELECT cells FROM abc.projectformat WHERE projectname='"+proj+"' AND projectpassword='"+pass+"';";
resultSet=statement.executeQuery(sql);
if(resultSet.next())
{
//System.out.print("query executed");
}
else
{
//System.out.print("not executed");
}
cellno =resultSet.getInt("cells");
// System.out.print(cellno);
//String deletedtable =projectpassword+projectname;
}
catch(SQLException sqlException)
{
sqlException.printStackTrace();
}
finally
{
try
{
resultSet.close();
statement.close();
connection.close();
}
catch(Exception exception)
{
}
}
return cellno;
}
答案 0 :(得分:2)
如果您只想更正此代码,请将此行从其现有位置
移开cellno =resultSet.getInt("cells");
在if
块内部:
if(resultSet.next())
{
cellno =resultSet.getInt("cells");
//System.out.print("query executed");
}
您的代码的问题是,即使resultSet
为空,语句cellno =resultSet.getInt("cells");
也已执行。但现在当你把它放在if
块中时,如果resultSet
为空,那么它就不会执行。
您的代码中存在许多问题。首先,您通过直接将string
插入SQL语句来执行查询。您应该使用PreparedStatement
,您可以使用if
动态地将值插入到不容易出错的语句中。
其次,如果您想确保查询只返回数据库中的1个值。您可以使用2个嵌套if(resultSet.next()){
if(resultSet.isLast()){
cellno =resultSet.getInt("cells");
}else{
throw new SQLException("More than one row returned");
}
}else{
throw new SQLException("No rows returned");
}
语句,如:
resultSet
上述代码的优点是,如果{{1}}为空或者行数超过1,则会抛出异常,您可以通过该异常确切地知道问题所在。
答案 1 :(得分:0)
您正在使用if
语句循环通过您的结果集,这是不合逻辑的。使用while
循环。将代码更改为while(resultSet.next())
。如果您的SQL语句正确,代码应该按预期工作。