我有這段代碼,有一個準備好的語句。我知道這個查詢是多餘的。參數id
是字符串<space>413530
(「413530」)。請注意前面的空格字符。resultSet如果參數中包含空白連接,但不使用setString
String query = "SELECT RSCode as id FROM Customer WHERE RSCode=?";
PreparedStatement newPrepStatement = connection
.prepareStatement(query);
newPrepStatement.setString(1, id);
resultSet1 = newPrepStatement.executeQuery();
while (resultSet1.next()) {
System.out.println("Got a result set.");
logindata.add(resultSet1.getString("id"));
}
執行此查詢後,我沒有得到任何結果。現在
,如果我用同樣的語句和參數附加作爲字符串的一部分如下:
String query = "SELECT RSCode as id FROM Customer WHERE RSCode=" + id;
PreparedStatement newPrepStatement = connection
.prepareStatement(query);
resultSet1 = newPrepStatement.executeQuery();
while (resultSet1.next()) {
System.out.println("Got a result set.");
logindata.add(resultSet1.getString("id"));
}
我得到的結果作爲執行這個準備好的語句後。同樣適用於java.sql.statement
我想知道爲什麼驅動程序忽略第二段代碼中的空白,但在第一部分有問題。
但不會' 「選擇RSCode的ID從客戶WHERE RSCode =」 + ID;'是擴展爲'「SELECT RSCode as id FROM Customer WHERE RSCode ='0123';'?空白仍然需要計數,對吧? – theTuxRacer 2012-07-23 13:26:58
不,它會是「SELECT RSCode as id FROM Customer WHERE RSCode = 0123;」 – Tomer 2012-07-23 13:27:30
應該避免連接(考慮SQL注入) – 2012-07-23 13:28:45