java.sql.SQLException:无效的列索引

Posted

技术标签:

【中文标题】java.sql.SQLException:无效的列索引【英文标题】:java.sql.SQLException: invalid column index 【发布时间】:2016-10-16 06:05:04 【问题描述】:

我一直在尝试使用preparedStatement 选择数据并传递这些参数,但是发生了异常。

谁能帮帮我?这是我的代码。

Connection connection = DBConnection.getConnection();
    String query = "select * from integrantes where nome like '?' or rm like '?'";
            ArrayList<Integrante> list = new ArrayList<>();
            try 
                PreparedStatement preparedStatement = connection.prepareStatement(query);
                preparedStatement.setString(1, ('%' + term + '%'));
                preparedStatement.setString(2, ('%' + term + '%'));
                JOptionPane.showMessageDialog(null, ((OraclePreparedStatement) preparedStatement).getOriginalSql());
                ResultSet resultSet = preparedStatement.executeQuery();
                while (resultSet.next()) 
                    list.add(new Integrante(resultSet.getInt(1), resultSet.getString(2), resultSet.getString(3), resultSet.getInt(4)));
                
             catch(SQLException e) 
                JOptionPane.showMessageDialog(null, "Erro ao listar o(s) integrante(s)." + e);
             catch(NullPointerException e) 
                JOptionPane.showMessageDialog(null, "Ocorreu um erro inesperado.");
             catch(Exception e) 
                JOptionPane.showMessageDialog(null, "Ocorreu um erro no código.");
            

            return list;

【问题讨论】:

select * 是一种构建 SQL 语句而不是列出列的糟糕方法。我猜您的查询不会返回 4 列,但不可能知道。 从 integrantes 中选择 id_integrante、nome、rm id_grupo;当我在 Oracle SQL Developer 中执行时它也能正常工作 这是 3 列而不是 4 列(id_gruponrm 列的别名)。 【参考方案1】:

使用PreparedStatement 时,您不能在将被字符串替换的占位符周围加上引号。你的陈述

"select * from integrantes where nome like '?' or rm like '?'"

导致问号被视为文字,因此该语句具有零参数,从而导致异常。改成

"select * from integrantes where nome like ? or rm like ?"

【讨论】:

以上是关于java.sql.SQLException:无效的列索引的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException:无效的列索引

java.sql.SQLException: 无效的列索引

java.sql.SQLException: 无效的列索引

java.sql.SQLException:指定的 Oracle URL 无效错误

java.sql.SQLException: 无效的列索引

java.sql.SQLException: 调用中无效的参数