Não insere no Banco AJUDA! Usando JavaDB[RESOLVIDO]

Olá estou criando um sistema pra cadastrar um funcionario, dai eu criei uma classe chamada pessoa com os metodos e atributos, crir o JFrame q tem os campos para digitar, e crir uma classe chamada PessoaDAO para inserir os dados no banco. Dai ele deveria cadastrar e criar um id para cada pessoa cadastrada, so que eu nao sei como fazer esse id ser auto increment e como ele ser criado sozinho, tipo ao clicar pra enviar, aparecia id 1 no proximo cadastro id 2 etcc. e tbm ta dando um erro dizendo que as colunas do tipo NUMERIC nao podem conter valores do tipo char.

Sera que poderiam me ajudar?? aqui vai a classse pessoa, pessoaDAO e o JFrame :

[code]
public class Pessoa {
private String nome;//atributos
private String email;
private Integer telefone;
private String rua;
private Integer numero;
private String compl;
private String bairro;
private String cidade;
private String estado;
private Integer cep;
private String admissao;
private Integer cpf;

   public Pessoa() {
       super();
   }
   
   public String getNome(){//metodo acessor
    return this.nome;
   }
   public void setNome(String nom){//metodo modificador
    this.nome=nom;
   }
   public String getEmail(){//metodo acessor
    return this.email;
   }
   public void setEmail(String mail){//metodo modificador
    this.email = mail;
   }
   public Integer getTelefone(){//metodo acessor
    return this.telefone;
   }
   public void setTelefone(Integer tel){//metodo modificador
    this.telefone=tel;
   }
   public String getRua(){//metodo acessor
    return this.rua;
   }
   public void setRua(String ru){//metodo modificador
    this.rua=ru;
   }
   public Integer getNumero(){//metodo acessor
    return this.numero;
   }
   public void setNumero(Integer num){//metodo modificador
    this.numero=num;
   }
   public String getCompl(){//metodo acessor
    return this.compl;
   }
   public void setCompl(String com){//metodo modificador
    this.compl=com;
   }
   public String getBairro(){//metodo acessor
    return this.bairro;
   }
   public void setBairro(String bai){//metodo modificador
    this.bairro=bai;
   }
   public String getCidade(){//metodo acessor
    return this.cidade;
   }
   public void setCidade(String cid){//metodo modificador
    this.cidade=cid;
   }
   public String getEstado(){//metodo acessor
    return this.estado;
   }
   public void setEstado(String est){//metodo modificador
    this.estado=est;
   }
   public Integer getCep(){//metodo acessor
    return this.cep;
   }
   public void setCep(Integer ce){//metodo modificador
    this.cep=ce;
   }
   public String getAdmissao(){//metodo acessor
    return this.admissao;
   }
   public void setAdmissao(String admis){//metodo modificador
    this.admissao=admis;
   }
   public Integer getCpf(){//metodo acessor
    return this.cpf;
   }
   public void setCpf(Integer cp){//metodo modificador
    this.cpf=cp;
   }

}[/code]

A classe PessoaDAO

[code]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

public class PessoaDAO {

private Connection conn;
private String usuario = "roger";
private String senha = "roger";
private Pessoa pessoa;

public PessoaDAO() {  
        try {  
            Class.forName("org.apache.derby.jdbc.ClientDriver");  
            conn = DriverManager.getConnection("jdbc:derby://localhost:1527/empresa",usuario,senha);  
            conn.setAutoCommit(true);
        } catch (SQLException e) {  
            System.err.println("Erro: "+e);  
            conn = null;  
            e.printStackTrace();  
        } catch (ClassNotFoundException e) {  
            System.out.println("ClassNotFound...");  
            e.printStackTrace();  
        }  
}   
   

public void salvar(Pessoa pessoa) {
    try {
        String query = "Insert into FUNCIONARIO(ID,NOME,EMAIL,TELEFONE,RUA,NUMERO,COMPL,BAIRRO,CIDADE,ESTADO,CEP,ADMISSAO,CPF) values (?,?,?,?,?,?,?,?,?,?,?,?,?)";
        PreparedStatement p = conn.prepareStatement(query); 
        p.setInt(1,10);
        p.setString(1,pessoa.getNome());
        p.setString(1,pessoa.getEmail());
        p.setInt(1,pessoa.getTelefone());
        p.setString(1,pessoa.getRua());
        p.setInt(1,pessoa.getNumero());
        p.setString(1,pessoa.getCompl());
        p.setString(1,pessoa.getBairro());
        p.setString(1,pessoa.getCidade());
        p.setString(1,pessoa.getEstado());
        p.setInt(1,pessoa.getCep());
        p.setString(1,pessoa.getAdmissao());
        p.setInt(1,pessoa.getCpf());
        int quantos = p.executeUpdate();
        JOptionPane.showMessageDialog(null,"Atualizou "+quantos + " registros");
    } catch(Exception e) {
        JOptionPane.showMessageDialog(null,e);
    }
} 

}[/code]

E O JFrame

import javax.swing.*;

public class cadastra_gerente extends javax.swing.JFrame {
    
    private Pessoa pessoa;
    private PessoaDAO pessoaDAO;

    /** Creates new form cadastra_gerente */
    public cadastra_gerente() {
        initComponents();
        pessoa = new Pessoa(); 
        pessoaDAO = new PessoaDAO();
    }private void BtnEnviarActionPerformed(java.awt.event.ActionEvent evt) {                                          
    if (!validaComponentes()) {
        return;
    }
    pessoa.setNome(TxtNome.getText());
    pessoa.setEmail(TxtEmail.getText());
    pessoaDAO.salvar(pessoa);
    JOptionPane.showMessageDialog(null, "Pessoa "+pessoa.getNome()+ " cadastrada com sucesso.");
    System.exit(0);
    
    
}                                         

private void BtnCancelarActionPerformed(java.awt.event.ActionEvent evt) {                                            
System.exit(0);// TODO add your handling code here:
}                                           

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new cadastra_gerente().setVisible(true);
            }
        });
    }
    private boolean validaComponentes() {
        if (TxtNome.getText() == null || TxtNome.getText().equals("")) {
            JOptionPane.showMessageDialog(null, "Erro. Entre com o nome do funcionario");
            return false;
        }
        return true;
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton BtnCancelar;
    private javax.swing.JButton BtnEnviar;
    private javax.swing.JTextField TxtEmail;
    private javax.swing.JTextField TxtNome;
    private javax.swing.JTextField TxtNumero;
    private javax.swing.JTextField TxtRua;
    private javax.swing.JTextField TxtTelefone;
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.ButtonGroup buttonGroup2;
    private javax.swing.ButtonGroup buttonGroup3;
    private javax.swing.ButtonGroup buttonGroup4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel15;
    private javax.swing.JLabel jLabel16;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollBar jScrollBar1;
    private javax.swing.JTextField jTextAdmissao;
    private javax.swing.JTextField jTextBairro;
    private javax.swing.JTextField jTextCep;
    private javax.swing.JTextField jTextCidade;
    private javax.swing.JTextField jTextCompl;
    private javax.swing.JTextField jTextCpf;
    private javax.swing.JTextField jTextEstado;
    // End of variables declaration                   

    

}

A imagem anexa mostra o formulario e o erro:


Poxa sera q ngm pode me ajudar?? por favor pessoal, ajudem ai, to quebrando aki pra tentar resolver isso, mas nao vejo mais solucao pra esse problema. Ajudem por favor.

Bom, no meu caso utilizo o JPA para conexao com o banco de dados e o autoincrement fica de forma transparente… um problema que eu tinha era pra pegar o id atualizado logo após ter sido inserido o registro, mas acabei resolvendo assim:

http://netbeando.blogspot.com/2009/09/jpa-e-lastinsertid.html

Pode ser que seja útil.

Bom, mas o básico é que o campo id da sua tabela no banco de dados seja configurado como autoincrement ou então você deverá criar uma rotina pra calcular o próximo id…

Outra coisa que eu observei no seu código é que você está utilizando campos do tipo cpf como sendo do tipo inteiro, sei lá, vai de cada um, mas na minha opinião campos que você não precisa fazer algum tipo de cálculo com eles poderiam ser string mesmo.

[]'s

Eu mudei pra string, so que o javaDB (o proprio banco q tem dentro do netbeans) nao oferece auto increment. nao sei pq, tentei fazer um for pra ir incrementando esse id mas nao sei como se faz isso, um metodo pra incrementar o id e passa-lo.

se alguem souber ajudem me

Realmente nunca utilizei esse banco de dados, mas se não existe um campo que possa ser autoincrement acho que você vai ter que fazer algo do tipo “SELECT MAX({campo_id})+1 FROM {sua_tabela}” pra inserir o código retornado ao próximo registro… basicamente é isso.

[]'s

cara esse banco, pra quem meche no netbeans , vc clica em servicos dai vai aparecer a aba servicos do lado dai vc clica la e vai ter banco de dados. Blz, vc me explicou, mas eu nao entendi mto como eu iria fazer isso. como eu iria inserir o id, definir o primeiro id?? isso q ta estranho.

Queria descobrir isso.

Mas vlw. Se alguem mais puder ajudar, agradeco.

p.setInt(1,10); p.setString(1,pessoa.getNome()); p.setString(1,pessoa.getEmail()); p.setInt(1,pessoa.getTelefone()); p.setString(1,pessoa.getRua()); p.setInt(1,pessoa.getNumero()); p.setString(1,pessoa.getCompl()); p.setString(1,pessoa.getBairro()); p.setString(1,pessoa.getCidade()); p.setString(1,pessoa.getEstado()); p.setInt(1,pessoa.getCep()); p.setString(1,pessoa.getAdmissao()); p.setInt(1,pessoa.getCpf()); int quantos = p.executeUpdate();

Se você colocar na sequência talvez funcione…

             p.setInt(1,10);  
             p.setString(2,pessoa.getNome());  
             p.setString(3,pessoa.getEmail());  
             p.setInt(4,pessoa.getTelefone());  
             p.setString(5,pessoa.getRua());  
             p.setInt(6,pessoa.getNumero());  
             p.setString(7,pessoa.getCompl());
//E POR AI VAI, NA SEQUÊNCIA DO SEU SQL..

Entao, eu mudei e coloquei na sequencia, ja esta inserindo no banco. A onda agora e como mecher com esse ID auto increment, como eu seria um metodo que retorna o id atual e incrementa ele para o proximo entende?? Eu tava tentando fazer esse metodo la na classe pessoa, onde tem todos os gets e sets, mas ta dando errado, eu tentei usar um laco for, mas dai se fosse usar um for teria q ter uma condicao de parada, mas como eu faco condicao de parada sendo que os ids tem q ser infinito, pois eu nao sei qtas pessoas serao cadastradas, dai eu coloquei condicao de parada 999999 kkkkkk, mas dai tava dando erro, vou tentar achar uma solucao,s e puderem me ajudar nessa ultima parte ai. Agradeco.

Flw.

cara utilize para pegar o ultimo id a instrução:

select max(id) from suatabela

Ai você tem o ultimo id, o próximo é só somar +1

abraço

Boas…eu ia citar a parte que você não estava setando da forma correta o PreparedStatement mas já foi dito certo? :slight_smile:

Sobre o auto increment, em Oracle se usa Sequence, em MySQL auto incremente…pesquisa na web como faz para gerar valores para sua chave primária automaticamente para o seu banco de dados, acredito que algum site fale sobre isso.

Abraços! :slight_smile:

Blz, vou tentar aki, qqr coisa eu posto aki de novo uma nova duvida ou o resultado. mas vlw ate agora.

[quote=psyhclo]Eu mudei pra string, so que o javaDB (o proprio banco q tem dentro do netbeans) nao oferece auto increment. nao sei pq, tentei fazer um for pra ir incrementando esse id mas nao sei como se faz isso, um metodo pra incrementar o id e passa-lo.

se alguem souber ajudem me[/quote]

o JavaDB (Derby) oferece auto increment sim.

na criação da tabela:

create table Tabela ( Codigo integer primary key GENERATED BY DEFAULT AS IDENTITY, Outro varchar(256) not null )
na inserção dos dados:

[code]insert into Tabela (Outro) values (‘Tra la lá’)

– ou

insert into Tabela values (default, ‘Tra la lá’)

– ou ainda

insert into Tabela (Codigo, Outro) values (default, ‘Tra la lá’)[/code]

ta dando erro nesse primeiro codigo ai da criacao da tabela , eu copiei e colei la no executar comando sql dai apareceu isso

Código do erro -1, estado do SQL 42X01: Erro de sintaxe: Encountered “not” at line 4, column 19.
Linha 1, coluna 1

ve ai oq pode ser. eu li em outros lugares q o cara disse tbm q nao estava conseguindo achar auto increment no derby q tinha q fazer “manualmente”.

[quote=psyhclo]ta dando erro nesse primeiro codigo ai da criacao da tabela , eu copiei e colei la no executar comando sql dai apareceu isso

Código do erro -1, estado do SQL 42X01: Erro de sintaxe: Encountered “not” at line 4, column 19.
Linha 1, coluna 1

ve ai oq pode ser. eu li em outros lugares q o cara disse tbm q nao estava conseguindo achar auto increment no derby q tinha q fazer “manualmente”.[/quote]
o problema é que esqueci de colocar o tamanho do campo “Outro” no exemplo que dei. assim:

create table Tabela ( Codigo integer primary key GENERATED BY DEFAULT AS IDENTITY, Outro varchar(256) not null )
já corrigi o post anterior.

Cara eu consegui ainda bem, olha so o que eu fiz, com o executar comando sql:


CREATE TABLE TESTE.FUNCIONARIO (  
               ID INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),  
               nome varchar(255) not null,
               email varchar(255) not null,
               etcc.... o resto dos campos
);

dai nao hora de inserir fiz assim:

 public void salvar(Pessoa pessoa) {
         try {
            String query = "Insert into FUNCIONARIO(ID,NOME,EMAIL,TELEFONE,RUA,NUMERO,COMPL,BAIRRO,CIDADE,ESTADO,CEP,ADMISSAO,CPF) values (default,?,?,?,?,?,?,?,?,?,?,?)";
            PreparedStatement p = conn.prepareStatement(query); 
            p.setInt(1,20);
            p.setString(1,pessoa.getNome());
            p.setString(2,pessoa.getEmail());
            p.setString(3,pessoa.getTelefone());
            p.setString(4,pessoa.getRua());
            p.setString(5,pessoa.getNumero());
            p.setString(6,pessoa.getCompl());
            p.setString(7,pessoa.getBairro());
            p.setString(8,pessoa.getCidade());
            p.setString(9,pessoa.getEstado());
            p.setString(10,pessoa.getCep());
            p.setString(11,pessoa.getAdmissao());
            p.setString(12,pessoa.getCpf());
            
            int quantos = p.executeUpdate();
            JOptionPane.showMessageDialog(null,"Atualizou "+quantos + " registros");
         } catch(Exception e) {
            JOptionPane.showMessageDialog(null,e);
        }   
    }

E ta inserindo blz, dai eu inserir mais um e ficou como id 2 , bom pra caramba.

Vlw a todos ai pela ajuda!!