【问题标题】:Why do I get a "com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value:" error?为什么我会收到“com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value:”错误?
【发布时间】:2015-05-16 20:36:07
【问题描述】:

我正在尝试将 OPENSHIFT 上的表中的 created_at 列时间 created_at DATETIME NOT NULL 设置为我的本地时间 Kopenhagen。如何将 openshift 服务器中的时间设置为本地时间?目前我在这行prep.executeQuery();收到此错误com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '16.05.2015 22:28:13' for column 'created_at' at row 1

感谢您的帮助。

stt.execute("CREATE TABLE IF NOT EXISTS bus"
                    + "(id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,"
                    + "mac VARCHAR(30) NOT NULL UNIQUE,"
                    + "route int(11) NOT NULL,"
                    + "latitude FLOAT(10,6) NOT NULL,"
                    + "longitude FLOAT(10,6) NOT NULL,"
                    + "created_at DATETIME NOT NULL )");

insert_into_table 方法:

private void insert_into_table(String macD, int routeD, double latD,
        double longD, Connection con) throws SQLException {

    Calendar calendar = new GregorianCalendar();
    TimeZone timeZone = TimeZone.getTimeZone("Europe/Berlin");
    calendar.setTimeZone(timeZone);
    String time = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss")
            .format(calendar.getTime());

    PreparedStatement prep = con
            .prepareStatement("REPLACE INTO bus(mac, route, latitude, longitude, created_at)"
                    + "VALUES( ?, ?, ? , ?,? )");
    prep.setString(1, macD);
    prep.setInt(2, routeD);
    prep.setDouble(3, latD);
    prep.setDouble(4, longD);
    prep.setString(5, time);
    prep.executeQuery();
}

【问题讨论】:

    标签: java mysql datetime jdbc


    【解决方案1】:

    显然,MySQL 服务器无法识别您应用程序计算机上的默认日期/时间格式。最简单的解决方法是使用数据库来设置时间。

    一种方法是:

    PreparedStatement prep = con
             .prepareStatement("REPLACE INTO bus(mac, route, latitude, longitude, created_at)"
                     + "VALUES( ?, ?, ? , ?, now())");
    

    更好的方法是定义created_at,使其具有插入时间的默认值。然后,您可以将其完全排除在 replace/insert 之外。这个process 在这里解释。一些细节取决于您使用的 MySQL 版本。

    【讨论】:

    • 我的目标是将我的本地时间设置为 created_at 列而不是服务器时间,所以我想我会像这样管理它VALUES( ?, ?, ? , ? , now() + INTERVAL 6 HOUR)
    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 2017-08-06
    • 2020-11-05
    • 2020-07-02
    • 1970-01-01
    • 2020-11-05
    • 2018-06-22
    • 2020-01-12
    相关资源
    最近更新 更多