[英]Java Prepared statement not executing
我創建了一個3層小程序,其中包括:前端-> servlet->數據庫。
在前端,我將一些詳細信息輸入表單。 它們被傳遞到servlet,該servlet將呈現一些HTML並顯示輸入到表單中的值,同時還調用類DatabaseHelper。 然后,DatabaseHelper連接並將這些相同的值插入表中。
我知道這些值將被傳遞給servlet類,因為它們正在HTML中顯示。 因此,問題必須出在准備好的語句之內。 問題是,我看不到語句本身有任何錯誤。 當我查詢表本身時,那里沒有數據。
數據庫連通性是有效的,因為我可以使用硬編碼的語句而不是准備好的語句將值插入數據庫。
這里是我正在使用的語句。 任何建議深表感謝。
public void addRegisterDetails(String name, String email, String country, String password, ){
try{
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();
// Make db connection
con = DriverManager.getConnection(url, USERNAME, PASSWORD);
st = con.createStatement();
String query = " INSERT INTO user_information (name, email, country, password)" + " VALUES (?, ?, ?, ?)";
PreparedStatement preparedStmt = con.prepareStatement(query);
preparedStmt.setString (1, name);
preparedStmt.setString (2, email);
preparedStmt.setString (3, country);
preparedStmt.setString (4, password);
preparedStmt.execute();
}catch(ClassNotFoundException ex) {
System.out.println(ex);
}catch(Exception e){
e.printStackTrace();
}
}
表定義
除id(類型為INT)外的所有VARCHAR。
您應該在語句對象上調用方法executeUpdate()
。
另外,我看不到任何提交數據的調用,任何事務處理。 如果出於這個問題的目的跳過了那段代碼,那是很好的。 否則,這是非常重要的一步(如果一切順利,則提交,對於異常情況回滾)
使用executeUpdate
進行數據庫寫操作:
preparedStmt.executeUpdate();
答:數據庫ID未設置為自動遞增。 由於某種原因,這不允許您隨后將數據插入表中。 感謝ChadNC指出這一點。
另外,為什么st = con.createStatement();
?
為什么在查詢中有領先的空間?
String query = " INSERT INTO user_information (name, email, country, password)"
+ " VALUES (?, ?, ?, ?)";
這個領先的空間可能或可能不重要...
最后,您應該在使用完連接后使用try-with-resources或finally塊關閉連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.