當嘗試使用JDBC將字符串的值插入到我的數據庫中時,它將插入字符串的名稱,而不是插入字符串的值。JDBC - 如何插入字符串值
我有一個名爲firstName的字符串,這個字符串的值由用戶輸入給出。
這裏是我的SQL語句:
String sql = "Insert INTO users (ID, firstName, address) VALUES ('124','+firstName()','123')";
當嘗試使用JDBC將字符串的值插入到我的數據庫中時,它將插入字符串的名稱,而不是插入字符串的值。JDBC - 如何插入字符串值
我有一個名爲firstName的字符串,這個字符串的值由用戶輸入給出。
這裏是我的SQL語句:
String sql = "Insert INTO users (ID, firstName, address) VALUES ('124','+firstName()','123')";
由於各種原因,它是更好地使用java.sql.PreparedStatement
。用參數執行語句。例如,如果你想避免sql injection攻擊。
請參閱The Java Tutorials中Using Prepared Statements中的示例。
使用帶參數的SQL語句的優點是您可以使用相同的語句並在每次執行時使用不同的值。
PreparedStatement pstmt = conn.prepareStatement(
"UPDATE EMPLOYEES SET FIRST_NAME= ? WHERE ID = ?");
pstmt.setString(1, "user1080390"); // set parameter 1 (FIRST_NAME)
pstmt.setInt(2, 101); // set parameter 2 (ID)
int rows = pstmt.executeUpdate(); // "rows" save the affected rows
我將在接下來的幾周內詳細閱讀PreparedStatement的內容。不幸的是,我知道這聽起來很糟糕。此時此刻我沒有時間,我必須在明天的最後期限前完成工作。你有沒有可能變得更具體? – user1080390
您花時間嘗試使用骯髒的黑客可能會花費在閱讀PreparedStatments並使用它。保羅的代碼片段應該足以讓你走。 – Jonathan
我試圖修改從這個線程準備插入語句:http://stackoverflow.com/questions/1073101/how-do-you-do-an-extended-insert-using-jdbc-without-building-strings但我收到錯誤:無法找到符號preparedstatement ... – user1080390
試試這個
String sql = "Insert INTO users (ID, firstName, address) VALUES ('124','"+firstName()+"','123')";
爲了防止SQL注入,您需要使用在查詢之前逃脫字符串或嘗試準備語句。
這是骯髒而危險的方式,容易出錯(如果firstName包含引號會怎麼樣?),並且最重要的是,存在SQL注入攻擊的危險。切勿以真實的代碼做這件事。 – leonbloy
Provider.java:90:無法找到符號符號:方法firstName()localtion:class Provider String sql =「插入INTO用戶(ID,名字,地址)值('124','」+ firstName()+「', '123')「;^ – user1080390
@leonbloy你是絕對正確的,對不起。 – Karo
事情是這樣的..
String firstName ="sample";
String sql = "Insert INTO users (ID, firstName, address) VALUES ('124',"+firstName+",'123')";
你似乎不明白雙引號與外面裏面的東西之間的區別。它正在*正是*你告訴它。 –