Java 使用JDBC客户端获取MySQL的时间数据类型时出现的问题

Java 使用JDBC客户端获取MySQL的时间数据类型时出现的问题,java,mysql,jdbc,Java,Mysql,Jdbc,MySQL版本:5.5.41-0ubuntu0.14.04.1 根据,时间的最大值为838:59:59 我在名为table01的表中插入了这个值,该表有1个Time列col_Time 我尝试使用Java JDBC代码获取此信息: public class JDBCUtil { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://

MySQL版本:5.5.41-0ubuntu0.14.04.1

根据,时间的最大值为838:59:59

我在名为table01的表中插入了这个值,该表有1个Time列col_Time

我尝试使用Java JDBC代码获取此信息:

public class JDBCUtil {

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://xx.xx.xx.xx:3306/testdb";

    static final String USER = "root";
    static final String PASS = "root";

    public static void main(String[] args) {

        try {
            Class.forName(JDBC_DRIVER);

        } catch (ClassNotFoundException ce) {
            ce.printStackTrace();
        }

        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
                Statement stmt = conn.createStatement();) {

            String sql = "select * from table01;";
            ResultSet rs = stmt.executeQuery(sql);

            while (rs.next()) {
                Time time = rs.getTime("col_time");
                System.out.print("col_time : " + time);

            }
            rs.close();

        } catch (SQLException se) {
            se.printStackTrace();
        }

    }
}
我有一个例外:

java.sql.SQLException:第1列中时间“838:59:59”的格式不正确 位于com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:1073 位于com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:987 位于com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:982 位于com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:927 位于com.mysql.jdbc.resultstrow.getTimeFastResultstrow.java:949 位于com.mysql.jdbc.ByteArrayRow.getTimeFastByteArrayRow.java:226 位于com.mysql.jdbc.ResultSetImpl.getTimeInternalResultSetImpl.java:6050 位于com.mysql.jdbc.ResultSetImpl.getTimeResultSetImpl.java:5784 位于com.mysql.jdbc.ResultSetImpl.getTimeResultSetImpl.java:5819 位于com.motory.idw.blend.utils.jdbcuti.mainjdbcuti.java:34

预计这将超过java.sql.Time的限制

然后我使用

while (rs.next()) {
        String time = rs.getString("col_time");
        System.out.print("col_time : " + time);
    }
我有一个例外:

java.sql.SQLException:第1列中时间“838:59:59”的格式不正确 位于com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:1073 位于com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:987 位于com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:982 位于com.mysql.jdbc.SQLError.createSQLExceptionSQLError.java:927 位于com.mysql.jdbc.ResultSetImpl.getTimeFromStringResultSetImpl.java:5975 位于com.mysql.jdbc.ResultSetImpl.getStringInternalResultSetImpl.java:5723 位于com.mysql.jdbc.ResultSetImpl.getStringResultSetImpl.java:5570 位于com.mysql.jdbc.ResultSetImpl.getStringResultSetImpl.java:5610 在com.motory.idw.blend.utils.JDBCUtil.mainJDBCUtil.java:37

如何获取时间域?这里缺少什么?

时间变量的格式是:yyyy-MM-dd hh:MM:ss。这与SQL数据库存储的内容不同,因此当您尝试将时间初始化为所选时间时,它可能不兼容。文件说:

MySQL以“HH:MM:SS”格式或“HHH:MM:SS”格式检索和显示时间值,以获取大小时值

由于存在不同的格式,所以不会初始化时间变量

您可以尝试的是: 将从数据库中检索到的时间存储为字符串。然后使用以下链接的答案访问cha

时间变量的格式为:yyyy-MM-dd hh:MM:ss。这与SQL数据库存储的内容不同,因此当您尝试将时间初始化为所选时间时,它可能不兼容。文件说:

MySQL以“HH:MM:SS”格式或“HHH:MM:SS”格式检索和显示时间值,以获取大小时值

由于存在不同的格式,所以不会初始化时间变量

您可以尝试的是:
将从数据库中检索到的时间存储为字符串。然后使用以下cha链接的答案

如果您想使用查询获取时间列,您可以根据需要修改查询

String sql = "select TIME_FORMAT(col_time,'%H:%i:%i') as col_time from table01;";

在这个查询中,使用了mysql特定时间的格式化函数,它将根据传递的格式格式化列时间。有关此日期-时间函数和类似日期-时间函数的更多信息,请参阅

如果要使用查询获取时间列,可以根据需要修改查询

String sql = "select TIME_FORMAT(col_time,'%H:%i:%i') as col_time from table01;";
在这个查询中,使用了mysql特定时间的格式化函数,它将根据传递的格式格式化列时间。有关此日期时间函数和类似日期时间函数的更多信息,请参阅指示时间字段始终转换为java.sql.time。查看源代码可以发现这确实是正确的-即使在调用getString时,它也会首先检索数据作为时间,然后给出其字符串表示形式

您的解决方案应该是让数据库在获取时间值之前将其转换为字符串。也就是说,使用

然后使用rs.getStringcol\u time\u str

Mysql将为您将时间字段转换为字符串,您可以像检索任何CHAR或VARCHAR列一样检索它。

表示时间字段始终转换为java.sql.time。查看源代码可以发现这确实是正确的-即使在调用getString时,它也会首先检索数据作为时间,然后给出其字符串表示形式

您的解决方案应该是让数据库在获取时间值之前将其转换为字符串。也就是说,使用

然后使用rs.getStringcol\u time\u str


Mysql将为您将时间字段转换为字符串,您可以像检索任何CHAR或VARCHAR列一样检索它。

时间的格式是什么?能否尝试导入其他时间数据类型?查看此链接:这里是另一个带有时间变量格式的链接
:@LakshyaGoyal我不明白你的意思。我有客户提供的数据。我无法更改数据类型。我想用JDBC读取这些数据。代码中的错误到底在哪里?While line?时间的格式是什么?能否尝试导入其他时间数据类型?查看此链接:这里是另一个时间变量格式的链接:@LakshyaGoyal我不明白你的意思。我有客户提供的数据。我无法更改数据类型。我想用JDBC读取这些数据。代码中的错误到底在哪里?While line?我想您还没有阅读java.sql.Time的文档。另外,可能还没有读过这个问题,因为OP问为什么使用getString会给他一个关于时间格式的异常。另外,可能还没有读过这个问题,因为OP问为什么使用getString会给他一个关于时间格式的异常。