Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Prepare语句的列索引错误无效_Java_Sql_Prepared Statement - Fatal编程技术网

Java Prepare语句的列索引错误无效

Java Prepare语句的列索引错误无效,java,sql,prepared-statement,Java,Sql,Prepared Statement,我得到以下准备语句的无效列索引。 这是我的密码 // Excluding some unnecessary code counter = 1; if (rsTableNames.next()) { // Creating Query for prepared statement String getCode = "select * from ( select c_name from " + rsTableNames.getString(1)+ " wher

我得到以下准备语句的无效列索引。 这是我的密码

// Excluding some unnecessary code
counter = 1;
if (rsTableNames.next()) 
{
    // Creating Query for prepared statement
    String getCode = "select * from ( select c_name from " 
          + rsTableNames.getString(1)+ " where lower(c_name) like ?%'";
    while (rsTableNames.next()) 
    {
      getCode += " union select c_name from " + 
      rsTableNames.getString(1)+ " where lower(c_name) like ?%'";
      counter++;
    }
    getCode += " ) where rownum <= " + maxRecords;
        // Now  The getCode contains 3 place holders ie ?           
    pst = con.prepareStatement(getCode);
    String param = "'" + query.toLowerCase();

    for(int i=1;i<=counter;i++)
    {
        pst.setString(i,param);  // when i=3 exception is thrown
    }
}
当我变为3时,我得到了一个例外,尽管查询包含3个占位符。
编辑提示:我认为问题出在“正在制造混乱”。我们怎么能逃避呢?

我不知道这是否是问题的原因,但我不认为参数在引用时的工作方式与您认为的完全相同。您仍然在代码中的每个参数后添加引号,并将其作为参数的开头。我猜你只是想:

rsTableNames.getString(1)+ " where lower(c_name) like ?";
在每个地方,然后:

String param = query.toLowerCase() + "%";

由于引用解析,这可能会解决问题-我认为您的中间参数被视为一个大文本的一部分。

我不知道这是否是问题的原因,但我认为参数在引用时的工作方式与您认为的不一样。您仍然在代码中的每个参数后添加引号,并将其作为参数的开头。我猜你只是想:

rsTableNames.getString(1)+ " where lower(c_name) like ?";
在每个地方,然后:

String param = query.toLowerCase() + "%";

由于引号解析,这可能会解决问题-我认为您的中间参数被认为是大文本的一部分。

您确定有3个吗?在sql中?尝试在for循环中打印整个preparedStatement

我怀疑这里的许多循环可能没有像您预期的那样工作,最终preparedStatement中只有2个参数

抛出了什么异常? 从Java API: 抛出: SQLException-如果parameterIndex与SQL语句中的参数标记不对应;如果发生数据库访问错误,或者在关闭的PreparedStatement上调用此方法


另外,如果您共享con连接和con.preparedStatement实例,请确保已正确关闭每个实例

是否确实有3个?在sql中?尝试在for循环中打印整个preparedStatement

我怀疑这里的许多循环可能没有像您预期的那样工作,最终preparedStatement中只有2个参数

抛出了什么异常? 从Java API: 抛出: SQLException-如果parameterIndex与SQL语句中的参数标记不对应;如果发生数据库访问错误,或者在关闭的PreparedStatement上调用此方法


另外,如果您共享con连接和con.preparedStatement实例,请确保已正确关闭每个实例

谢谢您的建议。我试过了,它删除了错误,但它创建了错误的查询。我想,like条款必须是'。我想我需要逃避“但不知道怎么做”。@Ajinkya你说的错误查询是什么意思?请举例说明您在结果方面得到了什么,以及您期望得到什么。@John:它使用..创建查询。。其中like查询%It从like子句中删除了“like”,这是必需的。所以它的结果为零,因为数据库中有一些记录。我认为子句应该有点像..where like'query%.@Ajinkya:Phew-我想不出什么了。很高兴一切都安排好了!对不起,我让你开箱思考:谢谢你的建议。我试过了,它删除了错误,但它创建了错误的查询。我想,like条款必须是'。我想我需要逃避“但不知道怎么做”。@Ajinkya你说的错误查询是什么意思?请举例说明您在结果方面得到了什么,以及您期望得到什么。@John:它使用..创建查询。。其中like查询%It从like子句中删除了“like”,这是必需的。所以它的结果为零,因为数据库中有一些记录。我认为子句应该有点像..where like'query%.@Ajinkya:Phew-我想不出什么了。很高兴一切都安排好了!对不起,我让你跳出了框框:一切都准备好了。问题是,一切都准备好了。问题出在‘’上。