簡體   English   中英

如何從jsp頁面將日期插入mysql數據庫?

[英]How to insert date into a mysql database from a jsp page?

我試圖將數據插入到MySQL數據庫中,其中一列獲取當前日期。

該代碼是

unit=request.getParameter("unit");
name=request.getParameter("name");
article=request.getParameter("article");
String user=request.getParameter("username");
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/newsletter?", "root", "pooja");
Statement st = conn.createStatement();

String query="insert into browse values('"+0+"','"+name+"', '"+NOW()+"', '"+article+"', '"+unit+"', '"+user+"' );";
ResultSet rs = st.executeQuery(query);

代碼在NOW()處拋出錯誤,表明該方法未定義。 我可以在此代碼本身中進行任何更正嗎,還是可以通過其他方式將當前日期輸入數據庫?

提前致謝。

now()函數是一個MySQL函數,而不是Java方法調用。 因此,它應該是SQL文本的一部分,而不是字符串。

something是返回字符串的Java表達式時 ,添加類似"'" + something + "'"是正確的。 如果something內容包含“ foo”,則結果為'foo' ,這是有效的SQL字符串。

但是NOW()不是Java表達式。 它也不是SQL中的文字字符串。 因此,您不需要引號。 相反,您應該有類似+",NOW(),"+

String query="insert into browse values('0','"+name+"', NOW(), '"+article+"', '"+unit+"', '"+user+"' );";

建議使用PreparedStatement而不是語句,並且不要以這種方式嵌入字符串。 然后, NOW()將成為SQL語句的一部分,而字符串將僅由?替換?

String query="insert into browse values('0',?,NOW(),?,?,?)";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setString(1, name);
stmt.setString(2, article);
stmt.setString(3, unit);
stmt.setString(4, user);
int inserted = stmt.executeUpdate();

您確實在調用未定義的Java方法NOW() ,並將此Java方法的結果傳遞給查詢。 您想要的是查詢以調用名為NOW()數據庫函數的查詢。 因此,對NOW()的調用必須是查詢本身的一部分:

String query = "insert into browse values(?, ?, NOW(), ?, ?, ?)";

您會問所有那些問號。 這些占位符允許使用准備好的語句 安全地傳遞參數。 如果您堅持使用String串聯來傳遞參數,那么您的代碼將受到SQL注入攻擊,一旦任何參數包含單引號,它就會失敗,並且您將努力插入除字符串和數字(​​例如,日期,二進制數據等)。 因此,請學習使用准備好的語句。

另外, executeQuery()用於執行選擇查詢,並在ResultSet中返回數據。 要執行插入查詢,必須使用executeUpdate()

java.util.Date now = new java.util.Date();

請記住,變量“ now”的類型為Date。 您必須對其進行修改以適應您的DB->列類型

如果您使用TIMESTAMP類型,則在您更新表格時將自動插入日期。 當然,這將是惰性的時間和日期,如果您只需要日期,則只需創建一個新的Date對象。 另外,您應該真正使用PreparedStatements來防止基於MySQL注入的攻擊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM