【发布时间】:2015-02-13 21:05:57
【问题描述】:
我在以下代码中调用ResultSet.getDate() 时收到java.lang.NullPointerException。然而,数据库中的条目似乎不是null。该连接似乎处于活动状态,因为正在获取其他字段。
我做错了什么?
try {
... /* Code that creates a connection and initializes statement */
String query = "SELECT * FROM groups WHERE id = 'testGroup1'";
ResultSet rs = statement.executeQuery(query);
if(rs.next()) {
admin = rs.getString("admin_id");
User.process(admin);
java.sql.Date created_on = rs.getDate("created_on");
System.out.println("Created on = " + created_on.toString());
}
}
catch(Exception e) {
System.out.println("Stuck here");
e.printStackTrace();
}
这是输出和堆栈跟踪:
Admin id = 42 // User.process prints the admin id
Stuck here
java.lang.NullPointerException
at com.mysql.jdbc.ResultSet.findColumn(ResultSet.java:966)
at com.mysql.jdbc.ResultSet.getDate(ResultSet.java:1988)
at com.myapp.server.model.Group.initInfo(Group.java:39)
...
我有以下架构:
+-------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| id | varchar(50) | NO | PRI | NULL | |
| admin_id | varchar(50) | NO | MUL | NULL | |
| created_on | datetime | NO | | NULL | |
+-------------------+--------------+------+-----+---------+-------+
以及数据库中的以下条目:
+------------+----------+---------------------+
| id | admin_id | created_on |
+------------+----------+---------------------+
| testGroup1 | 42 | 2014-12-15 22:46:31 |
+------------+----------+---------------------+
【问题讨论】:
-
你可以试试 rs.getTimestamp();
-
我认为问题出在 SQL 日期格式上。
datetime您指的是正确的数据类型吗?请改用Date。 -
@SemihEker
getTimestamp()也会抛出NullPointerException。 -
这似乎是您的 jdbc 驱动程序中的一个错误。您使用的是什么版本?最近的 mysql 驱动甚至没有一个名为
ResultSet的类 -
@Dima 我使用的是
mysql-connector-java-5.0.8。我已经升级到mysql-connector-java-5.1.34,它似乎有一个ResultSet类。它现在显示java.sql.SQLException说Operation not allowed after ResultSet closed。