【问题标题】:MSSQL SELECT Statement Error in WHERE clauseWHERE 子句中的 MSSQL SELECT 语句错误
【发布时间】:2016-04-02 08:42:50
【问题描述】:

我正在运行简单的 java 代码以从 DB 中获取结果。但它总是给出索引 1 超出范围。如何在 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)

请帮忙解决这个问题。

【问题讨论】:

    标签: java sql-server mssql-jdbc


    【解决方案1】:

    ?在 sql 中不应出现在 ' ' (单引号)中。应该只是?。

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

    【讨论】:

    • 非常感谢。这是一个问题。现在返回结果。
    • 当然。必须等待 6 分钟才能接受答案:)
    【解决方案2】:
    String sql = "SELECT * FROM [MediaPrima_IVR].[dbo].[call_back]  WHERE CLID= ? and FLAG = '0'";
    System.out.println(sql);
    

    【讨论】:

    • 非常感谢。这就是问题
    • @prasad 可以稍微解释一下您是如何解决问题的吗?
    • @prasad 你们俩都得到了相同的答案。这是正确的,这就是我接受这两个答案的原因。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2014-09-18
    • 2010-12-07
    • 1970-01-01
    • 2013-04-30
    • 2018-04-16
    • 2023-03-15
    相关资源
    最近更新 更多