2011-12-12 82 views
0

我想第一次使用PreparedStatements,但由於某種原因,我只是不能讓這個工作。同樣的請求沒有使用PreparedStaement可以正常工作。PreparedStatement不返回結果

簡單的工作版本:

 String artNum = "'" + artikelNummer.toLowerCase() + "'"; 
     String query = 
       "SELECT a.artnr, a.bezeichnung, " 
       + "(SELECT verfuegbar_bestand " 
       + "FROM getbestand(a.uid)) AS bestand_verfuegbar " 
       + "FROM article AS a " 
       + "WHERE lower(a.artnr) = " + artNum; 
     ResultSet results = statement.executeQuery(query); 

PreparedStatement的版本:

 String artNum = "'" + artikelNummer.toLowerCase() + "'"; 
     String query = 
       "SELECT a.artnr, a.bezeichnung, " 
       + "(SELECT verfuegbar_bestand " 
       + "FROM getbestand(a.uid)) AS bestand_verfuegbar " 
       + "FROM article AS a " 
       + "WHERE lower(a.artnr) = ? "; 
     prepStatement = con.prepareStatement(query); 
     prepStatement.setString(1, artNum); 
     ResultSet results = prepStatement.executeQuery(); 

任何幫助/想法將非常greatfully接收。

詩是artNum是一個字符串不是int如A1110

回答

2

如果您使用的PreparedStatement,你不需要將字符串括在引號是這樣的:

String artNum = "'" + artikelNummer.toLowerCase() + "'" 

這必須是:

String artNum = artikelNummer.toLowerCase(); 
+0

啊,完美。謝謝 :) – Sun

1

你還在引用的文章編號, - 你不需要做任何更多,因爲你直接傳遞值使用的參數。只需使用:

String query = 
     "SELECT a.artnr, a.bezeichnung, " 
     + "(SELECT verfuegbar_bestand FROM getbestand(a.uid))" 
     + " AS bestand_verfuegbar " 
     + "FROM article AS a " 
     + "WHERE lower(a.artnr) = ?"; 
prepStatement = con.prepareStatement(query); 
prepStatement.setString(1, artikelNummer.toLowerCase()); 
ResultSet results = prepStatement.executeQuery(); 

(下套管兩個字符串通常執行不區分大小寫的查詢是不是一個好主意,但是這是一個單獨的問題)