![](/img/trans.png)
[英]Spring Data Access Exception when SQL string gets 'SYSDATE' passed as a String param
[英]Sysdate as string
我正在從Android設備發送到服務器字符串sysdate()
。 問題是代碼沒有向mysql數據庫插入任何內容。 first
列是DATETIME
。 當我輸入INSERT INTO test (first) VALUES (sysdate());
時,我正在使用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();
}
}
}
%>
我的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中建議的語句 。 這意味着將字符串date 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.