sql错误使用java对空结果集执行非法操作
我想返回一个我从表中选择的值,但我的代码不返回任何东西,并且它还对空结果集执行错误非法操作。 如何删除此错误,此程序也不会从表中选择正确的值sql错误使用java对空结果集执行非法操作,java,sql,mysql-workbench,Java,Sql,Mysql Workbench,我想返回一个我从表中选择的值,但我的代码不返回任何东西,并且它还对空结果集执行错误非法操作。 如何删除此错误,此程序也不会从表中选择正确的值 Connection connection= null ; Statement statement = null ; ResultSet resultSet= null; int cellno=0; try { connection = DriverManager.g
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;
}
您正在使用
if
语句循环遍历结果集,这是不合逻辑的。使用while
循环。将代码更改为while(resultSet.next())
。如果您的SQL语句正确,则代码应按预期工作
请参阅:如果您只想更正此代码,请将此行从其现有位置移动
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
,使用它可以动态地向语句中插入值,这样就不容易出错
其次,如果希望确保查询只从数据库返回1个值。您可以使用两个嵌套的if
语句,如:
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行,它将抛出一个异常,您可以通过该异常确切地知道问题所在。查询中的abc
是别名吗?如果使用if,则只检索第一条记录