2011-12-12 6 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

당신이자는 PreparedStatements를 사용하는 경우 다음과 같이 따옴표로 문자열을 묶어야 할 필요가 없습니다 :

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(); 

(. 일반적으로 대소 문자를 구분하지 쿼리를 수행하는 두 개의 문자열을 낮은-케이싱 것은 좋은 생각이 아니다, 그러나 그것은 별개의 문제이다)

관련 문제