我从Android设备发送到服务器字符串sysdate()
。问题是代码没有向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();
}
}
}
%>
答案 0 :(得分: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);