MySQL版本:5.5.41-0ubuntu0.14.04.1
根据文档,时间的最大值是"838:59:59“。
我将此值插入名为table01的表中,该表具有1 Time列col_time。
我尝试使用Java代码获取它:
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();
}
}
}我有例外:
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) at com.mysql.jdbc.ResultSetRow.getTimeFast(ResultSetRow.java:949)第1栏中的“838:59:59”在com.mysql.jdbc.ByteArrayRow.getTimeFast(ByteArrayRow.java:226) at com.mysql.jdbc.ResultSetImpl.getTimeInternal(ResultSetImpl.java:6050) at com.mysql.jdbc.ResultSetImpl.getTime(ResultSetImpl.java:5784) at com.mysql.jdbc.ResultSetImpl.getTime(ResultSetImpl.java:5819) at com.impetus.idw.blend.utils.JDBCUtil.main(JDBCUtil.java:34)
预计这将超过java.sql.Time 的限制。
然后,我使用以下方法将其取为字符串
while (rs.next()) {
String time = rs.getString("col_time");
System.out.print("col_time : " + time);
}我有例外:
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) at com.mysql.jdbc.ResultSetImpl.getTimeFromString(ResultSetImpl.java:5975)第1栏中的“838:59:59”在com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5723) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5610) at com.impetus.idw.blend.utils.JDBCUtil.main(JDBCUtil.java:37)
如何获取时间字段?我在这里错过了什么?
发布于 2016-08-10 15:28:43
MySQL JDBC驱动程序的文档表示时间字段总是被转换为java.sql.Time。查看源代码就会发现,这确实是正确的--即使您调用getString(),它也首先以Time的形式检索数据,然后给出它的字符串表示形式。
您的解决方案应该是让数据库在获取时间值之前将时间值转换为字符串。也就是说,不要仅仅使用SELECT *,而是使用
SELECT CAST( col_time AS char ) AS col_time_str
FROM table01然后使用rs.getString("col_time_str")。
Mysql将为您将时间字段转换为字符串,您将能够像执行任何CHAR或VARCHAR列一样检索它。
发布于 2016-08-10 14:30:53
如果要使用查询获取时间列,可以将查询修改为
String sql = "select TIME_FORMAT(col_time,'%H:%i:%i') as col_time from table01;";在这个查询中,使用mysql特定的TIME_FORMAT()函数,它将根据传递的格式格式化col_time。有关此日期时间函数和类似日期时间函数的详细信息,请参阅时间格式。
发布于 2016-08-10 13:38:31
Time变量的格式是:yyyy:mm:ss。这与SQL数据库存储的内容不同,所以当您尝试将time初始化为选定的时间时,它可能是不兼容的。医生说:
MySQL检索并显示“HH:MM:SS”格式的时间值(或“HHH:MM:SS”格式用于大小时值)。
因为有不同的格式,所以您的time变量不会被初始化。
您可以尝试的是:将从数据库中检索到的时间存储为String。然后使用以下链接的答案到cha
https://stackoverflow.com/questions/38874542
复制相似问题