2016-10-16 2 views
1

Я пытаюсь выбрать данные с помощью подготовленногоStatement и передать эти аргументы, но происходит исключение.java.sql.SQLException: недопустимый индекс столбца

Может ли кто-нибудь мне помочь? Вот мой код.

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; 
+0

'select *' - плохой способ структурировать инструкцию SQL, а не перечислять столбцы. Я бы предположил, что ваш запрос не возвращает 4 столбца, но это невозможно узнать. –

+0

выберите id_integrante, nome, rm id_grupo из integrantes; он работает, когда я выполняю в Oracle SQL Developer –

+0

Это 3 столбца не 4 ('id_grupon' является псевдонимом для столбца' rm'). –

ответ

2

При использовании PreparedStatement вы НЕ должны помещать кавычки заполнителей, которые собираются быть заменены строками. Ваше заявление

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

вызывает вопросительные знаки, которые будут рассматриваться как литералы, так что оператор имеет нулевые параметры, что и приводит к исключению. Измените его на

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

Спасибо! Это сработало! –

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