Erro ao inseri dados

4 respostas
IsaelCoelho

estou fazendo um cadastro de notas então faço uma consulta na tabela aluno e quero inseri notas no aluno em que eu deseja para isso tento inseri o mesmo id da tabela aluno só que o codgo não ta danddo certo alguém pode me ajudar

Bancobimetre1 b = new Bancobimetre1();
        b.iniciaBanco();
        ManipulaBancoBimestre md = new ManipulaBancoBimestre();
        String nomeprocura = nome.getText();
        String serieprocura = serie.getText();
        String turmaprocura = turma.getText();
        String turnoprocura = turno.getText();
        String anoprocura = ano.getText();
        ResultSet rs = md.RetornaDados("SELECT * FROM aluno2 ");

        try {
            while (rs.next()) {
                if (rs.getString("Nome").equals(nomeprocura)
                        && rs.getString("serie").equals(serieprocura)
                        && rs.getString("turma").equals(turmaprocura)
                        && rs.getString("turno").equals(turnoprocura)
                        && rs.getString("ano").equals(anoprocura)) {
                    String tran = rs.getString("id");//tran variavel rece o id
                    long id = Long.parseLong(tran);
        float Port = Float.parseFloat(port.getText());
        float Mat = Float.parseFloat(mat.getText());
        float Qui = Float.parseFloat(quimica.getText());
        float Soc = Float.parseFloat(sociologia.getText());
        float Bio = Float.parseFloat(biologia.getText());
        float Geo = Float.parseFloat(geo.getText());
        float Hist = Float.parseFloat(hist.getText());
        float Lit = Float.parseFloat(lit.getText());
        float Fisica = Float.parseFloat(fisica.getText());
        float Edfisica = Float.parseFloat(edfisisca.getText());
        float Filosofia = Float.parseFloat(filosofia.getText());
        float Ingles = Float.parseFloat(ingles.getText());
        float Art = Float.parseFloat(art.getText());


        try {
            b.cadastraPessoa(id, Port, Lit, Mat, Geo, Hist, Art, Fisica, Qui, Bio, Edfisica, Filosofia, Soc, Ingles); //Maria
            JOptionPane.showMessageDialog(this, "Pessoa Cadastrada com Sucesso!");
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, "erro ao inserir dados no banco de dados\n" + ex, " Erro", JOptionPane.ERROR_MESSAGE);

        }



                }

            }
        } catch (SQLException ex) {
            Logger.getLogger(Bimestre1.class.getName()).log(Level.SEVERE, null, ex);

        }
    }

essa outra classe é a que inseri dado no banco

package Bimestre;

import com.mysql.jdbc.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Bancobimetre1 {

    private static Connection conn;
    private static ResultSet rs;
    private static PreparedStatement ps;
    private static Statement st;

    public Statement getSt() {
        return st;
    }

    public void iniciaBanco() {
        try {

            Class.forName("com.mysql.jdbc.Driver");
            //objeto responsavel pela conexao com o banco de dados
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/escola", "root", "");
            st = (Statement) conn.createStatement();
        } catch (Exception e) {
            System.out.println("erro de conexao ao banco");
        }
    }

     void cadastraPessoa(long id, float Port, float Lit,float Mat,float Geo, float Hist,float Art,float Fisica,float Qui,float Bio, float Edfisica, float Filosofia, float Soc,float Ingles) {
        try {
            iniciaBanco();
            try {
                String sql = "INSERT INTO Bimestre1 (id, Portugues, Literatura, Matematic, Geografia, Historia, Artes, Fisca, Quimica, Biologia, Ed.fisica, Sociologia, Ingles ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?);";

                ps = conn.prepareStatement(sql);

                ps.setLong(1, id);
                ps.setFloat(2, Port); //Maria
                ps.setFloat(3, Lit);
                ps.setFloat(4, Mat);
                ps.setFloat(5, Geo);
                ps.setFloat(6, Hist);
                ps.setFloat(7, Art);
                ps.setFloat(8, Fisica);
                ps.setFloat(9, Qui);
                ps.setFloat(10, Bio);
                ps.setFloat(11, Edfisica);
                ps.setFloat(12, Filosofia);
                ps.setFloat(13, Soc);
                ps.setFloat(14, Ingles);
                ps.execute();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            fechaBanco();
            e.printStackTrace();
        }
    }

    void fechaBanco() {
        try {
            conn.close();
        } catch (SQLException ex) {
            //ex.printStackTrace();
        }
    }


  
}

essa é a classe de manipula a consulta

package novo;

import java.sql.ResultSet;
import javax.swing.JOptionPane;

public class ManipulaBancoBimestre {
 ResultSet rs;
 Banco C = new Banco();

    //FUNCAO PARA RETORNAR DADOS
    public ResultSet RetornaDados(String sql) {
        try {
            //abrinco conexao com banco de dados
            C.iniciaBanco();

            try {
                //Carrega as informações desejadas do banco de dados.
                rs = null;
                rs = C.getSt().executeQuery(sql);

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Erro ao executar a query na base de dados!\n" + e);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro de conexão com banco de dados\n" + e);
        }
        return rs;
    }
}

4 Respostas

luxu

posta o erro pra nos vermos o q pode ser!!!

romarcio

Pelo que entendi você está fazendo uma consulta no banco por um aluno X. Dai quando recupera esse aluno na consulta você quer alterar a nota dele.
Se for isso você precisa fazer um update e não um insert.
Se vc tentar fazer um insert em um ID que já existe, vai dar erro de duplicidade de id ou coisa do tipo.

Não sei qual seu conhecimento em banco, mas seria mais ou menos com esse aqui:

Você passa os campos que quer alterar e o o ID da linha que será alterado.

IsaelCoelho

é mais ou menos isso mano o negocio é o seguinte quero fazer um consulat em banco para pegar o id certo do aluno esse id quero inserir em outra tabela nota para desta for eu conseguir inseri o idnota para o aluno certo entende.

tipo tenho o aluno de id 01 na tabela nome e o nome dele é Pedro quero pegar esse id e leva- para a tabela notas ai a nota vai ter o mesmo id correspondente ao aluno Pedro.

esse ai é o erro

run:

java.sql.SQLException: Column count doesnt match value count at row 1

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)

at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:995)

at Bimestre.Bancobimetre1.cadastraPessoa(Bancobimetre1.java:55)

at Bimestre.Bimestre1.jButton1ActionPerformed(Bimestre1.java:393)

at Bimestre.Bimestre1.access$400(Bimestre1.java:11)

at Bimestre.Bimestre1$5.actionPerformed(Bimestre1.java:159)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)

at java.awt.Component.processMouseEvent(Component.java:6203)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)

at java.awt.Component.processEvent(Component.java:5968)

at java.awt.Container.processEvent(Container.java:2105)

at java.awt.Component.dispatchEventImpl(Component.java:4564)

at java.awt.Container.dispatchEventImpl(Container.java:2163)

at java.awt.Component.dispatchEvent(Component.java:4390)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)

at java.awt.Container.dispatchEventImpl(Container.java:2149)

at java.awt.Window.dispatchEventImpl(Window.java:2478)

at java.awt.Component.dispatchEvent(Component.java:4390)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)

at java.awt.EventQueue.access$000(EventQueue.java:96)

at java.awt.EventQueue$1.run(EventQueue.java:608)

at java.awt.EventQueue$1.run(EventQueue.java:606)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)

at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)

at java.awt.EventQueue$2.run(EventQueue.java:622)

at java.awt.EventQueue$2.run(EventQueue.java:620)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
jamirdeajr

O erro indica que o número de colunas que você passou no insert não confere, note que está faltando ‘Filosofia’ depois de ‘Ed.Fisica’ (13 campos em vez de 14).
Deveria estar assim:

Já a questão da atualização terá que ser como o Romarcio falou, tem que usar UPDATE, com INSERT e mesmo ID vai dar erro de Chave Duplicada (por SQL não tem algo tipo MERGE que faça automático).

Criado 20 de março de 2011
Ultima resposta 20 de mar. de 2011
Respostas 4
Participantes 4