2016-04-02 32 views
0

DBから結果を得るために単純なJavaコードを実行しています。しかし、常にインデックス1は範囲外です。 WHERE句に変数を設定するにはどうすればよいですか?WHERE句のMSSQL SELECT文のエラー

public String getTransNumberFromDB(String cli) throws Exception { 
    System.out.println(clid); 
    String sql = "SELECT * FROM [MediaPrima_IVR].[dbo].[call_back] WHERE CLID= '?' and FLAG = '0'"; 
    System.out.println(sql); 
    this.Con = DriverManager.getConnection(this.url, this.dbUName, 
      this.dbPswd); 
    PreparedStatement stmt = this.Con.prepareStatement(sql); 
    stmt.setString(1, clid); 
    ResultSet rs; 

    try { 
     rs = stmt.executeQuery(); 

     while (rs.next()) { 
      getCLIFromResultSet(rs); 
      System.out.println("Getting Number from call back database..."); 
      System.out.println("Number from call back database is:" + getNumber()); 
     } 
    } catch (Exception e) { 
     System.out.println("Exception is : " + e); 
     throw e; 
    } finally { 
     stmt.close(); 
     this.Con.close(); 
    } 
    return getNumber(); 
} 

private String getCLIFromResultSet(ResultSet rs) throws SQLException { 

    setNumber(rs.getString("CALL_ID")); 
    return Number; 
} 

しかし、私は次のようにエラーを返しました。

com.microsoft.sqlserver.jdbc.SQLServerException: The index 1 is out of range. 
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170) 
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:698) 
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:707) 
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setString(SQLServerPreparedStatement.java:1015) 

この問題を解決するにはどうすればよいですか。

+1

置き換えます '?' ?と? –

答えて

1

? SQLでは ''(一重引用符)にするべきではありません。それはちょうどいいはずです。

String sql = "SELECT * FROM [MediaPrima_IVR].[dbo].[call_back] WHERE CLID= ? and FLAG = '0'"; 
+0

ありがとうございます。それは問題です。結果は今返されます。 – dmaprasad

+0

大歓迎です。私の答えを受け入れたものとしてマークしてください。 –

+0

答えを受け入れるには6分待たなければなりません:) – dmaprasad

-1
String sql = "SELECT * FROM [MediaPrima_IVR].[dbo].[call_back] WHERE CLID= ? and FLAG = '0'"; 
System.out.println(sql); 
+0

ありがとうございます。それは問題です – dmaprasad

+1

@prasadおそらくあなたが問題をどのように解決したかについて少し説明しますか? –

+0

@prasad uの両方に同じ答えが与えられます。そしてそれは正しかった、それが私が両方の答えを受け入れる理由です。 :) – dmaprasad