2016-10-16 17 views
1

私はpreparedStatementを使用してデータを選択してこれらの引数を渡そうとしましたが、例外が発生しました。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

select id_integrante、nome、rm integrantesからのid_grupo;私は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

ありがとう!!出来た! –

関連する問題