sql错误使用java对空结果集进行非法操作

时间:2015-05-20 10:24:56

标签: java sql mysql-workbench

我想返回一个我从表中选择的值,但是我的代码没有返回任何内容,它也会在空结果集上给出错误非法操作。 如何删除此错误,此程序也没有从表

中选择适当的值
    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;

}

2 个答案:

答案 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语句正确,代码应该按预期工作。

参考: Selecting records from table using JDBC