`
yangwei0915
  • 浏览: 465233 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ResultSet 调用getString 抛出NullPointException问题的解决

 
阅读更多

在Java连接数据库时,有时候在ResultSet 调用getString (或其他类似的方法),有时候会抛出NullPointException,异常信息如下:

java.lang.NullPointerException
com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1059)
com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2719)
org.apache.jsp.delete_jsp._jspService(delete_jsp.java:110)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

但是通过debug发现ResultSet 对象不为空,这个问题就比较头疼,网上也有很多人在提问,但是大多都没有找到问题的根本原因。出现这个问题是因为多个ResultSet 使用了一个Statement或者PrepareStatement对象而导致,比如下面的代码:

Statement stat = conn.createStatement();
try {
     ResultSet rs = stat.executeQuery("select * from BbsRecord where id=" + id);
      rs.next();
      sid = rs.getInt("sid");
      ResultSet rss = stat.executeQuery("select * from bbsrecord where sid=" + sid);
      rss.last();
      if (rss.getRow() == 1) {
           if (rs.getInt("root") == 0) {  //错误报告指示的是这里
               stat.execute("update bbsrecord set leaf = 1 where id=" + sid);
               stat.execute("delete from bbsrecord where id =" + id);
               if (rs.getInt("leaf") == 0) {
                   delete(conn,id);
               }
           }
        } else {
           stat.execute("delete from bbsrecord where id =" + id);
           if (rs.getInt("leaf") == 0) {
                delete(conn, id);
           }
        }
        rs.close();
        rss.close();
} catch (SQLException e) {
     System.out.println("sql异常");
} finally {
     stat.close();
     conn.close(); 
}

 

 在上述代码中,由于第6行和第3行使用同一个Statement,导致了第9行抛出的NullPointerException异常

分享到:
评论

相关推荐

    ResultSet

    例如,`resultSet.getInt(1)`或`resultSet.getString("columnName")`。 4. 遍历结果集:为了完整遍历ResultSet,你需要在while循环中使用next()方法,直到它返回false为止。示例代码如下: ``` while (resultSet....

    java仓库管理

    supplierData.put(Integer.valueOf(resultSet.getInt("sup_id")), resultSet.getString("sup_name")); } catch (Exception e) { e.printStackTrace(); } return supplierData;//返回映射关系 } public ...

    bookstore 网上书店源码

    resultSet.getString (5), resultSet.getString (6), resultSet.getString (7), resultSet.getString (8) ); preparedStatement.close (); ConnDB.terminate(); return users; } else { preparedStatement....

    java数据库连接ResultSet

    ResultSet 通过一套 get 方法访问当前行中的不同列,例如 getInt、getString、getFloat 等。 在使用 ResultSet 之前,需要先执行 SQL 语句,并将结果存储到 ResultSet 对象中。例如: ```java java.sql.Statement ...

    ResultSet 转为listmap

    ResultSet 转为 List ResultSet 转为 List<Map> 是一种常见的数据处理操作。在 Java 中,使用 JDBC 连接数据库时,通常会返回一个 ...8. SQLException:SQLException 是 Java 中的异常类,用于抛出数据库操作异常。

    支持ResultSet的JTable

    - `ResultSet.getString(int columnIndex)`:用于获取指定列的字符串值。 - `ResultSet.getInt(int columnIndex)`:获取整数值,其他类型也有相应的方法。 - `ResultSet.next()`:移动游标到下一行,如果还有数据则...

    ResultSet转化为json,json转化为List

    user.setName(resultSet.getString("name")); user.setAge(resultSet.getInt("age")); userList.add(user); } ``` 4. 将List转换为JSON字符串: 使用Jackson的ObjectMapper进行转换: ```java ObjectMapper...

    获得结果集的字段名称_ResultSet的属性要调用ResultSetMetaData的方法

    获得结果集的字段名称_ResultSet的属性要调用ResultSetMetaData的方法 在Java中,获取结果集的字段名称可以通过调用ResultSetMetaData的方法来实现。ResultSetMetaData是一个公共接口,提供了关于ResultSet对象中列...

    JAVA 版本ResultSet 转换为JAVABEAN的工具类

    每行数据通过调用getXXX()方法(XXX代表数据类型)获取,例如getString()、getInt()等。 创建JavaBean时,我们通常定义一个类,包含与数据库表列相对应的属性,并提供getter和setter方法。例如,如果数据库表有id、...

    ResultSet对象获取数据的各种方法

    这段代码首先获取了`ResultSet`中的列数,然后遍历每一列并打印出其名称。 #### 2. ResultSet对象定位与移动 - `boolean absolute(int row)`:将光标移动到指定行号。 - `void afterLast()`:将光标移到最后一行...

    ResultSet用法集锦

    在Java编程语言中,`ResultSet`是用于存储和处理数据库查询结果的核心接口。它是由`Statement`或`PreparedStatement`执行SQL查询后返回的结果。本文将深入探讨`ResultSet`的使用方法,结合源码分析和实用工具,以...

    CallableStatement调用Oracle存储过程返回结果集(ResultSet).doc

    ### CallableStatement调用Oracle存储过程返回结果集(ResultSet) #### 一、无返回值的存储过程调用 在本节中,我们通过一个具体的例子来详细介绍如何使用`CallableStatement`来调用Oracle数据库中的无返回值存储...

    ResultSet的属性

    ResultSet是Java数据库连接(JDBC)中的一个重要接口,它用于存储和检索数据库查询结果。当执行SQL查询后,结果会被封装成ResultSet对象,允许我们逐行遍历并访问查询返回的数据。在处理ResultSet时,了解其属性和元...

    java 读取表结构 mysql

    boolean isAutoIncrement = resultSet.getString("Extra").contains("auto_increment"); // 是否自增 boolean isPrimaryKey = resultSet.getString("Key").equals("PRI"); // 是否为主键 System.out.println(...

    java调用oracle存储过程并得到结果集

    // 访问结果集中每一行的列,如:resultSet.getString("column_name"); System.out.println(resultSet.getString("column_name")); } ``` 最后,别忘了关闭所有的资源,包括`ResultSet`, `CallableStatement`和`...

    如何从 Java 存储过程将 JDBC ResultSet 作为 Ref Cursor 返回.doc

    总结来说,从Java存储过程返回JDBC ResultSet作为REF CURSOR,主要是为了解决Oracle数据库的特性和JDBC的兼容问题。通过Oracle9i引入的特性,开发者可以利用这种方法在PL/SQL和Java之间更灵活地交换数据。然而,这种...

    CallableStatement调用Oracle存储过程返回结果集(ResultSet).pdf

    本篇将详细阐述如何使用CallableStatement调用Oracle存储过程并处理返回的结果集。 一、无返回值的存储过程 对于无返回值的存储过程,如`PRO_1`,它的任务是根据传入的参数进行插入操作。在Java中,我们可以通过...

    ResultSet常用方法

    - `rs.absolute(int n)`:将游标移动到指定的行号,n为行号,如果n无效(如负数或超过总行数),则抛出异常。 - `rs.relative(int n)`:相对当前行移动n行,可以正向或负向移动。 - `rs.first()` 和 `rs.last()`...

    CallableStatement调用Oracle存储过程返回结果集(ResultSet).docx

    本篇将详细介绍如何使用CallableStatement调用Oracle存储过程,并处理返回的结果集(ResultSet)。 一、无返回值的存储过程 在Oracle中,一个无返回值的存储过程可能只执行某些操作,例如插入数据。以下是一个简单...

    数据库-数据库编码解决方案

    这个问题其实也很简单,因为PreparedStatement接口必须通过Connection接口来获取实例,而ResultSet接口又必须从Statement或者PreparedStatement接口来获取实例,有了这样的级联关系,问题也就迎刃而解了。...

Global site tag (gtag.js) - Google Analytics