2015-05-16 3 views
0

Я пытаюсь установить время, которое создал created_at, created_at DATETIME NOT NULL в моей таблице по адресу OPENSHIFT по местному времени Kopenhagen. Как установить время на сервере openshift для моего локального времени? На данный момент я получаю эту ошибку com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '16.05.2015 22:28:13' for column 'created_at' at row 1 на этой линии prep.executeQuery();Почему я получаю сообщение об ошибке «com.mysql.jdbc.MysqlDataTruncation: Усечение данных: неправильное значение datetime:»?

Я ценю любую помощь.

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(); 
} 

ответ

1

Очевидно, дата по умолчанию формат/время на вашем компьютере приложения не распознается на сервере MySQL. Самое простое исправить - использовать базу данных для установки времени.

Один из способов:

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

Лучший способ определить created_at поэтому он имеет значение по умолчанию во время вставки. Тогда вы можете оставить его полностью из replace/insert. Здесь описывается process. Некоторые детали зависят от версии MySQL, которую вы используете.

+0

Моя цель - установить локальное время для столбца created_at, а не время сервера, поэтому я думаю, что я буду управлять им следующим образом: «VALUES (?,?,?,?, Now() + INTERVAL 6 HOUR)' – MrPencil

Смежные вопросы