【问题标题】:sql error illegal operation on empty result set using java [duplicate]使用java对空结果集进行sql错误非法操作[重复]
【发布时间】:2015-08-01 12:55:10
【问题描述】:

我想返回一个我从表中选择的值,但我的代码没有返回任何东西,而且它还给出错误 Illegal operation on empty result set。 如何消除这个错误,这个程序也没有从表中选择正确的值

    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;

}

【问题讨论】:

  • 查询中的abc是别名吗?

标签: java sql mysql-workbench


【解决方案1】:

如果您只想更正此代码,请将此行从其现有位置移开

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 个值。您可以使用 2 个嵌套的 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 行,则会抛出异常,通过该异常您可以准确知道问题所在。

【讨论】:

    【解决方案2】:

    您正在使用if 语句循环遍历您的结果集,这是不合逻辑的。使用while 循环。将您的代码更改为while(resultSet.next())。如果您的 SQL 语句正确,代码应该可以正常工作。

    参考:Selecting records from table using JDBC

    【讨论】:

    • 如果使用 if 则只会检索第一条记录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2017-05-08
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多