Java 使用JDBC客户端获取MySQL的时间数据类型时出现的问题
MySQL版本:5.5.41-0ubuntu0.14.04.1 根据,时间的最大值为838:59:59 我在名为table01的表中插入了这个值,该表有1个Time列col_Time 我尝试使用Java JDBC代码获取此信息: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://
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会给他一个关于时间格式的异常。