准备好的语句和结果集-Java空指针异常
概述:尝试连接到MS Access DB以将结果集返回到jtable中 问题:java空指针异常 代码: 我有一个表单可以获取strMIGIDREF,如果需要,我可以从中粘贴代码,但我认为这不是问题所在 这是我得到的错误,我已经粘贴了第一位,如果需要可以粘贴更多准备好的语句和结果集-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)
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();