Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
准备好的语句和结果集-Java空指针异常_Java_Jdbc_Nullpointerexception_Ucanaccess - Fatal编程技术网

准备好的语句和结果集-Java空指针异常

准备好的语句和结果集-Java空指针异常,java,jdbc,nullpointerexception,ucanaccess,Java,Jdbc,Nullpointerexception,Ucanaccess,概述:尝试连接到MS Access DB以将结果集返回到jtable中 问题:java空指针异常 代码: 我有一个表单可以获取strMIGIDREF,如果需要,我可以从中粘贴代码,但我认为这不是问题所在 这是我得到的错误,我已经粘贴了第一位,如果需要可以粘贴更多 Connecting to database using MIGID java.lang.NullPointerException at sundata.Database.GetMIGIDRecord(Database.java:63)

概述:尝试连接到MS Access DB以将结果集返回到jtable中

问题:java空指针异常

代码:

我有一个表单可以获取strMIGIDREF,如果需要,我可以从中粘贴代码,但我认为这不是问题所在

这是我得到的错误,我已经粘贴了第一位,如果需要可以粘贴更多

Connecting to database using MIGID
java.lang.NullPointerException
at sundata.Database.GetMIGIDRecord(Database.java:63)
at sundata.MainForm.MIGIDSearch(MainForm.java:141)
at sundata.MainForm.jmenuMIGIDSearchActionPerformed(MainForm.java:337)
at sundata.MainForm.access$000(MainForm.java:6)
at sundata.MainForm$1.actionPerformed(MainForm.java:58)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
第63行是

//CHECK TO MAKE SURE SOME RECORDS ARE RETURNED
rs.last();
我已经尝试了在谷歌上找到的许多解决方案,到目前为止还没有任何乐趣。我试过一段测试代码,检查连接等,似乎效果很好,只是当我尝试使用preparedstatement时,它似乎出错了。 ResultSet rs=preStatement.getResultSet();只是一直说它的值为null,getMaxRows也是


我使用的是Netbeans IDE 7.4和JAVA SE SDK 7,您得到的是一个
NullPointerException
,因为您错误地使用了
executeQuery
方法:

//执行查询
preStatement.executeQuery();
//将查询结果返回到结果集中
ResultSet rs=preStatement.getResultSet();
第一行代码执行SQL查询并返回一个ResultSet对象,您只需丢弃它(因为您没有将其分配给任何对象)。第二行代码尝试检索PreparedStatement的结果集,但上一行已经检索(并丢弃)了它,因此
getResultSet
返回
null

相反,你应该简单地去做

ResultSet rs=preStatement.executeQuery();
补充说明:

  • 省略
    Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)语句,因为(1)它是不相关的:UCanAccess不使用ODBC,而(2)
    类。几乎不再需要forName
    语句(UCanAccess根本不需要ODBC)

  • 不要使用
    rs.last()
    测试是否返回了行。相反,只需在返回结果集后立即调用
    rs.next()
    。如果
    rs.next()
    返回
    true
    ,则结果集包含行(您现在指向第一行)。如果
    rs.next()
    返回
    false
    ,则不会返回任何行
    rs.last()
    后跟
    rs.beforeFirst()
    将无法使用默认的结果集类型,即
    ResultSet.type\u FORWARD\u ONLY


  • 您将获得一个
    NullPointerException
    ,因为您错误地使用了
    executeQuery
    方法:

    //执行查询
    preStatement.executeQuery();
    //将查询结果返回到结果集中
    ResultSet rs=preStatement.getResultSet();
    
    第一行代码执行SQL查询并返回一个ResultSet对象,您只需丢弃它(因为您没有将其分配给任何对象)。第二行代码尝试检索PreparedStatement的结果集,但上一行已经检索(并丢弃)了它,因此
    getResultSet
    返回
    null

    相反,你应该简单地去做

    ResultSet rs=preStatement.executeQuery();
    
    补充说明:

  • 省略
    Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)语句,因为(1)它是不相关的:UCanAccess不使用ODBC,而(2)
    类。几乎不再需要forName
    语句(UCanAccess根本不需要ODBC)

  • 不要使用
    rs.last()
    测试是否返回了行。相反,只需在返回结果集后立即调用
    rs.next()
    。如果
    rs.next()
    返回
    true
    ,则结果集包含行(您现在指向第一行)。如果
    rs.next()
    返回
    false
    ,则不会返回任何行
    rs.last()
    后跟
    rs.beforeFirst()
    将无法使用默认的结果集类型,即
    ResultSet.type\u FORWARD\u ONLY


  • 您将获得一个
    NullPointerException
    ,因为您错误地使用了
    executeQuery
    方法:

    //执行查询
    preStatement.executeQuery();
    //将查询结果返回到结果集中
    ResultSet rs=preStatement.getResultSet();
    
    第一行代码执行SQL查询并返回一个ResultSet对象,您只需丢弃它(因为您没有将其分配给任何对象)。第二行代码尝试检索PreparedStatement的结果集,但上一行已经检索(并丢弃)了它,因此
    getResultSet
    返回
    null

    相反,你应该简单地去做

    ResultSet rs=preStatement.executeQuery();
    
    补充说明:

  • 省略
    Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)语句,因为(1)它是不相关的:UCanAccess不使用ODBC,而(2)
    类。几乎不再需要forName
    语句(UCanAccess根本不需要ODBC)

  • 不要使用
    rs.last()
    测试是否返回了行。相反,只需在返回结果集后立即调用
    rs.next()
    。如果
    rs.next()
    返回
    true
    ,则结果集包含行(您现在指向第一行)。如果
    rs.next()
    返回
    false
    ,则不会返回任何行
    rs.last()
    后跟
    rs.beforeFirst()
    将无法使用默认的结果集类型,即
    ResultSet.type\u FORWARD\u ONLY


  • 您将获得一个
    NullPointerException
    ,因为您错误地使用了
    executeQuery
    方法:

    //执行查询
    preStatement.executeQuery();
    //将查询结果返回到结果集中
    ResultSet rs=preStatement.getResultSet();
    
    第一行
    //CHECK TO MAKE SURE SOME RECORDS ARE RETURNED
    rs.last();