我一直在試圖找出爲什麼下面的代碼不會產生在我的ResultSet中的任何數據:Java中的參數化Oracle SQL查詢?
String sql = "SELECT STUDENT FROM SCHOOL WHERE SCHOOL = ? ";
PreparedStatement prepStmt = conn.prepareStatement(sql);
prepStmt.setString(1, "Waterloo");
ResultSet rs = prepStmt.executeQuery();
在另一方面,以下運行正常:
String sql = "SELECT STUDENT FROM SCHOOL WHERE SCHOOL = 'Waterloo' ";
PreparedStatement prepStmt = conn.prepareStatement(sql);
ResultSet rs = prepStmt.executeQuery();
數據類型學校是CHAR(9字節)。而不是setString,我也試過:
String sql = "SELECT STUDENT FROM SCHOOL WHERE SCHOOL = ? ";
PreparedStatement prepStmt = conn.prepareStatement(sql);
String school = "Waterloo";
Reader reader = new CharArrayReader(school.toCharArray());
prepStmt.setCharacterStream(1, reader, 9);
prepStmt.setString(1, "Waterloo");
ResultSet rs = prepStmt.executeQuery();
我完全停留在接下來的調查中; Eclipse調試器說,即使在setString或setCharacterStream之後,SQL查詢也不會改變。我不確定是否因爲設置參數不起作用,或者調試器無法獲取PreparedStatement中的更改。
任何幫助將不勝感激,謝謝!
需要檢查的兩件事:1)如果您不使用表格,其中一列的名稱與表格相同,是否仍會發生? 2)你確定你正在對結果集進行迭代 - 如果你對查詢進行硬編碼而不是使用參數,你會得到結果嗎? – 2010-08-10 16:43:23
對於它的價值,你的第一個例子對我來說看起來很好。喬恩可能會在「學校」表中的「學校」專欄中提到 - 這個*不應該成爲問題,但是你的代碼不應該失敗...... – 2010-08-10 16:53:57
出於好奇,試試第一個示例(帶'?'的示例),但將參數設置爲帶有尾部空格的「Waterloo」。 MySQL應該忽略尾隨空格,但是在這種情況下,司機可能會做些簡單的事情。 – 2010-08-10 17:03:42