Erro consulta postgresql

BOA NOITE COMUNIDADE :wink:

Sou estudante de programação em JAVA e estou realizando meu primeiro projeto CRUD. Porém sempre que tento, esta dando uma exceção ao executar o código:

*ERRO:

O indice da coluna está fora do intervalo : 0, número de colunas: 0;

parte do botao inserir (local do erro):

private void btninserirActionPerformed(java.awt.event.ActionEvent evt) {

if (checkInputs() && ImgPath != null){

        Connection con = getConnection();
        try {
            PreparedStatement ps = con.prepareStatement("INSERT INTO aluno (matricula,nomealuno, turma, datadenascimento, nomeresponsavelum, telefoneresponsavelum, nomeresponsaveldois, telefoneresponsaveldois, image)"
                    + "values ('?','?', '?','?', '?','?','?','?', '?')"); 
            ps.setString(0, txtmatricula.getText());   
             ps.setString(1, txtnomecompleto.getText());   
             ps.setString(2, txtturma.getText());    
             ps.setString(3, txtnascimento.getText());   
             ps.setString(4, txtnomeresponsavel1.getText());   
             ps.setString(5, txtnumresponsavel1.getText());    
           ps.setString(6,txtnomeresponsavel2.getText());   
             ps.setString(7, txtnumresponsavel2.getText());   
             InputStream img = new FileInputStream(new File (ImgPath));
             ps.setBlob(9, img);
             ps.executeUpdate();
              JOptionPane.showMessageDialog(null, "Data");
        } catch (Exception ex) {
             JOptionPane.showMessageDialog(null, ex.getMessage());
        }
        
    }else {
        JOptionPane.showMessageDialog(null, "Alguma informação está incorreta");
        
    }
  
}   

a tabela no bdd é a seguinte:

Tentei analisar alguns erros parecidos, porém não rolou ;(

tentei algumas coisas… como:

  • Tirar a matricula (visto q ela ja tinha um “valor predefinido no banco”

Experimente sem os apóstrofos nas interrogações, pois parece que os parâmetros não estão sendo reconhecidos. Algo como:

PreparedStatement ps = con.prepareStatement("INSERT INTO aluno "+
" (matricula, nomealuno, turma, datadenascimento, " +
"nomeresponsavelum, telefoneresponsavelum, nomeresponsaveldois, " +
"telefoneresponsaveldois, image)" +
"values (?, ?, ?, ?, ?, ?, ?, ?, ?)");

E ajuste o setBlob, pois a imagem é o parâmetro 8, não 9:

ps.setBlob(8, img);

Você só deve fazer isso se não deseja preencher o valor, e usar o valor predefinido da coluna. Caso contrário, preencha o campo.

Abraço.

Na realidade esse parâmetro é o 9, os restantes é que estão errados. Os índices do PreparedStatement começam em 1 e não em 0.

1 curtida

Fiquei na dúvida quanto à isso, pra mim era 0. Valeu pela correção.

Abraço.