Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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 调用ResultSet.getDate()时出现NullPointerException_Java_Jdbc - Fatal编程技术网

Java 调用ResultSet.getDate()时出现NullPointerException

Java 调用ResultSet.getDate()时出现NullPointerException,java,jdbc,Java,Jdbc,在下面的代码中调用ResultSet.getDate()时,我得到了一个java.lang.NullPointerException。但是,数据库中的条目似乎不是null。连接似乎处于活动状态,因为正在提取其他字段。 我做错了什么 try { ... /* Code that creates a connection and initializes statement */ String query = "SELECT * FROM groups WHERE id = 'tes

在下面的代码中调用
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 |
+------------+----------+---------------------+

在数据库中创建的字段
的类型是
datetime
,这与Java
Date
不同

你需要转换它

如果你看看第一个答案,你会看到如何解决它,正如本文所提到的,你能试一下这样的sthg吗

我也从上面提到的问题中获取代码

Timestamp timestamp = resultSet.getTimestamp(i);
if (timestamp != null)
    date = new java.util.Date(timestamp.getTime()));

我发现
User.process
进一步查询了数据库,从而关闭了当前的
ResultSet
(或者我推测是这样)。执行以下操作时,
NullPointerException
将消失:

try {
    ...
    if(rs.next()) {
        admin = rs.getString("admin_id");
        java.sql.Timestamp created_on = rs.getTimestamp("created_on");
        User.process(admin);
    }
}
catch(Exception e) {
    ...
}

按照其他解决方案的建议使用
getTimestamp()
,也可以获得所需的结果。

您能试试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
语句,表示在ResultSet关闭后不允许执行
操作
getTimestamp()
也会出现相同的错误,就像我在注释中提到的那样。在
rs.getTimestamp(“created_on”)
上获得
NullPointerException
。您说过“就像@SemihEker建议的那样,getTimestamp()最终会给我期望的结果。”。这个答案对你合适吗?是的,一旦我摆脱了NPE。在
User.process
函数中。谢谢。哦,我很高兴帮助你:)谢谢你的链接。使用
getTimestamp()
可以在我摆脱
NullPointerException
之后获得所需的结果。从
datetime
(相当于时间戳)转换是自动的,并且是JDBC规范所要求的(它只需删除时间)