使用JDBC客户端

时间:2016-08-10 13:14:39

标签: java mysql jdbc

MySQL版本:5.5.41-0ubuntu0.14.04.1

根据docs,时间的最大值是“838:59:59”

我在名为table01的表中插入了此值,其中包含1 时间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列中Time'838:59:59'的格式错误       在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)       在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)       在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)       在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)       at com.mysql.jdbc.ResultSetRow.getTimeFast(ResultSetRow.java:949)       在com.mysql.jdbc.ByteArrayRow.getTimeFast(ByteArrayRow.java:226)       在com.mysql.jdbc.ResultSetImpl.getTimeInternal(ResultSetImpl.java:6050)       在com.mysql.jdbc.ResultSetImpl.getTime(ResultSetImpl.java:5784)       在com.mysql.jdbc.ResultSetImpl.getTime(ResultSetImpl.java:5819)       在com.impetus.idw.blend.utils.JDBCUtil.main(JDBCUtil.java:34)

预计会超出java.sql.Time

的限制

然后我使用

将其作为String获取
while (rs.next()) {
        String time = rs.getString("col_time");
        System.out.print("col_time : " + time);
    }

我有例外:

  

java.sql.SQLException:第1列中Time'838:59:59'的格式错误       在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)       在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)       在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)       在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)       在com.mysql.jdbc.ResultSetImpl.getTimeFromString(ResultSetImpl.java:5975)       在com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5723)       在com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570)       at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5610)       在com.impetus.idw.blend.utils.JDBCUtil.main(JDBCUtil.java:37)

如何获取时间字段?我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

documentation for the MySQL JDBC driver表示TIME字段始终转换为java.sql.Time。查看源代码显示确实如此 - 即使您调用getString()它首先将数据检索为Time,然后为您提供字符串表示。

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

SELECT CAST( col_time AS char ) AS col_time_str
FROM table01

然后使用rs.getString("col_time_str")

Mysql会将时间字段转换为字符串,您可以像执行任何CHARVARCHAR列一样检索它。

答案 1 :(得分:1)

如果要使用查询获取时间列,可以将查询修改为

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

在此查询中,使用特定于mysql的TIME_FORMAT()函数,该函数将根据传递的格式格式化col_time。有关此功能和类似日期时间功能的更多信息,请参阅https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_time-format

答案 2 :(得分:0)

$serverName = "192.168.1.55:1433"; //serverName\instanceName $db_user = 'sa'; $db_pwd = '1234567'; $database = 'workshop'; $table = 'dbo.appointment'; $con = mssql_connect($serverName, $db_user, $db_pwd); if (!$con || !mssql_select_db($database, $con)) { die('Unable to connect or select database!'); } mssql_query("BEGIN TRAN"); $columns = "'id', 'name', 'time'"; $values = "1, 'James', 1422120000000"; $query = "INSERT INTO ".$database.".".$table." (".$columns.") "."VALUES (".$values.")"; $result = mssql_query($query, $con); print_r($result); mssql_query("COMMIT"); mssql_close($con); header('Content-type: application/json'); echo json_encode(1); 变量的格式为:yyyy-MM-dd hh:mm:ss。这与SQL数据库存储的不同,因此当您尝试将Time初始化为所选时间时,它可能不兼容。文档说:

  

MySQL在' HH:MM:SS'中检索并显示TIME值。格式(或' HHH:MM:SS'大小时值的格式)。

由于格式不同,您的time变量无法初始化。

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