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