Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql错误使用java对空结果集执行非法操作_Java_Sql_Mysql Workbench - Fatal编程技术网

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,则只检索第一条记录