2016-04-02 2 views
0

Я запускаю простой Java-код для получения результатов из БД. Но он всегда дает индекс 1 вне диапазона. Как установить переменную в положение WHEREОшибка оператора MSSQL SELECT в выражении WHERE

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 Оба из них получили тот же ответ. И это было правильно, вот почему я принимаю оба ответа. :) – dmaprasad

Смежные вопросы