2012-05-08 46 views
2

當嘗試使用JDBC將字符串的值插入到我的數據庫中時,它將插入字符串的名稱,而不是插入字符串的值。JDBC - 如何插入字符串值

我有一個名爲firstName的字符串,這個字符串的值由用戶輸入給出。

這裏是我的SQL語句:

String sql = "Insert INTO users (ID, firstName, address) VALUES ('124','+firstName()','123')"; 
+4

你似乎不明白雙引號與外面裏面的東西之間的區別。它正在*正是*你告訴它。 –

回答

6

由於各種原因,它是更好地使用java.sql.PreparedStatement。用參數執行語句。例如,如果你想避免sql injection攻擊。

請參閱The Java TutorialsUsing 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 
+0

我將在接下來的幾周內詳細閱讀PreparedStatement的內容。不幸的是,我知道這聽起來很糟糕。此時此刻我沒有時間,我必須在明天的最後期限前完成工作。你有沒有可能變得更具體? – user1080390

+0

您花時間嘗試使用骯髒的黑客可能會花費在閱讀PreparedStatments並使用它。保羅的代碼片段應該足以讓你走。 – Jonathan

+0

我試圖修改從這個線程準備插入語句:http://stackoverflow.com/questions/1073101/how-do-you-do-an-extended-insert-using-jdbc-without-building-strings但我收到錯誤:無法找到符號preparedstatement ... – user1080390

0

試試這個

String sql = "Insert INTO users (ID, firstName, address) VALUES ('124','"+firstName()+"','123')";

爲了防止SQL注入,您需要使用在查詢之前逃脫字符串或嘗試準備語句。

+1

這是骯髒而危險的方式,容易出錯(如果firstName包含引號會怎麼樣?),並且最重要的是,存在SQL注入攻擊的危險。切勿以真實的代碼做這件事。 – leonbloy

+0

Provider.java:90:無法找到符號符號:方法firstName()localtion:class Provider String sql =「插入INTO用戶(ID,名字,地址)值('124','」+ firstName()+「', '123')「;^ – user1080390

+0

@leonbloy你是絕對正確的,對不起。 – Karo

0

事情是這樣的..

String firstName ="sample"; 
String sql = "Insert INTO users (ID, firstName, address) VALUES ('124',"+firstName+",'123')";