Sysdate как строка

Я отправляю на серверную строку sysdate()с устройства Android. Проблема в том, что код ничего не вставляет в базу данных mysql. Колонка first является DATETIME, Я использую MySQL, когда я печатаю INSERT INTO test (first) VALUES (sysdate()); в верстаке это работает.

<%
     String t = request.getParameter("time");
            Connection connection = null;
            PreparedStatement pstatement = null;
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            int updateQuery = 0;
            if (t != null) {
                if (t != "" ) {
                    try {
                        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
                        Statement st = connection.createStatement();
                        String queryString1 = "INSERT INTO test (first) VALUES (?)";
                        pstatement = connection.prepareStatement(queryString1);
                        pstatement.setString(1, t);
                        updateQuery = pstatement.executeUpdate();
                        if (updateQuery != 0) {
                            response.setStatus(400);
                        }
                    } catch (Exception ex) {
                        out.println(ex);

                    } finally {
                        pstatement.close();
                        connection.close();
                    }
                } 
            } 
        %>

1 ответ

Решение

Моя Java очень ржавая, но никто больше не прыгнул, поэтому я попробую. Я помню, как даты были хитрыми с JDBC.

Вот две попытки, но имейте в виду, что они не проверены, потому что у меня нет сейчас возможности их протестировать.

Подход № 1: передать дату в виде строки и MySQL конвертировать ее. Вместо этого для вашего INSERT заявление:

String queryString1 = "INSERT INTO test (first) VALUES (?)";

... попробуй это:

String queryString1 = "INSERT INTO test (first) VALUES (str_to_date(?, '%Y-%m-%d %H:%i:%s'))";

Подход № 2: использовать PreparedStatement.setDate вместо PreparedStatement.setString, Обратите внимание, что при этом используется ваш исходный оператор INSERT, а не тот, который предложен в подходе 1. Это означает преобразование строковой даты t к java.util.Date а затем к java.sql.date,

Вместо этого для вашего set:

pstatement.setString(1, t);

... попробуй это:

// Change string to java.util.Date
java.util.Date dt = new java.text.SimpleDateFormat(
    "yyyy-MM-dd HH:mm:ss", java.util.Locale.ENGLISH).parse(t);

// Change java.util.Date to java.sql.Date
java.sql.Date sqlDt = new java.sql.Date(dt.getTime());

// Set parameter as a date
pstatement.setDate(1, sqlDt);
Другие вопросы по тегам