Duvida para inserir em banco de dados com swing (Resolvido)

12 respostas
M

Bom Dia
Estou com um problema para inserir dados em um banco ao click do botão.
poderiam me ajudar por favor.
Já procurei em varios topicos porem sem sucesso.

Minhas classes.

Classe principal.

public class CadastroDeEmpresa extends JFrame {

    JLabel rotuloCEP, rotuloTel, rotuloEndereco, rotuloEmpresa, rotuloCidade,
            rotuloBairro, rotuloEmail, rotuloCNPJ, rotuloInscricao;
    JFormattedTextField cep, tel, cnpj;
    MaskFormatter maskCEP, maskTel, maskCNPJ;
    JTextField empresa, enderceco, cidade, bairro, email, inscricao, endereco;
    JButton cancela, limpar, insere;
    //EmpresaDAO dao = new EmpresaDAO();

    public CadastroDeEmpresa() {
        super("Cadastro de Clientes");
        Container telaEmpresa = getContentPane();
        setLayout(null);

        //Empresa cadastra = new Empresa();
        // Rotulos
        rotuloEmpresa = new JLabel("Empresa: ");
        rotuloEndereco = new JLabel("Endereco: ");
        rotuloCidade = new JLabel("Cidade: ");
        rotuloBairro = new JLabel("Bairro: ");
        rotuloCEP = new JLabel("CEP: ");
        rotuloTel = new JLabel("Telefone: ");
        rotuloEmail = new JLabel("Email: ");
        rotuloCNPJ = new JLabel("CNPJ: ");
        rotuloInscricao = new JLabel("Inscrição: ");

        // Posicionamento dos rotulos
        rotuloEmpresa.setBounds(10, 0, 100, 120);
        rotuloEndereco.setBounds(10, 30, 100, 120);
        rotuloCidade.setBounds(10, 60, 100, 120);
        rotuloBairro.setBounds(10, 90, 100, 120);
        rotuloCEP.setBounds(300, 90, 100, 120);
        rotuloTel.setBounds(10, 150, 100, 120);
        rotuloEmail.setBounds(10, 180, 100, 120);
        rotuloCNPJ.setBounds(10, 210, 100, 120);
        rotuloInscricao.setBounds(10, 240, 100, 120);

        // TextField.
        empresa = new JTextField(30);
        endereco = new JTextField(50);
        cidade = new JTextField(50);
        bairro = new JTextField(30);
        email = new JTextField(50);
        inscricao = new JTextField(20);

        // Posicionamento dos TextField
        empresa.setBounds(70, 50, 220, 20);
        endereco.setBounds(70, 80, 220, 20);
        cidade.setBounds(70, 110, 220, 20);
        bairro.setBounds(70, 140, 220, 20);
        email.setBounds(70, 232, 220, 20);
        inscricao.setBounds(70, 290, 180, 20);

        // Botões
        cancela = new JButton("Cancela");
        limpar = new JButton("Limpar");
        insere = new JButton("Inserir");

        cancela.setBounds(250, 340, 100, 20);
        limpar.setBounds(130, 340, 100, 20);
        insere.setBounds(10, 340, 100, 20);

        try {
            maskCEP = new MaskFormatter("#####-###");
            maskCNPJ = new MaskFormatter("###.###.###/####-##");
            maskTel = new MaskFormatter("(##)-####-####");
            maskTel.setPlaceholderCharacter('_');
            maskCEP.setPlaceholderCharacter('_');
            maskCNPJ.setPlaceholderCharacter('_');

        } catch (ParseException exp) {
        }

        cep = new JFormattedTextField(maskCEP);
        cnpj = new JFormattedTextField(maskCNPJ);
        tel = new JFormattedTextField(maskTel);

        cep.setBounds(333, 140, 100, 20);
        cnpj.setBounds(70, 260, 150, 20);
        tel.setBounds(70, 200, 100, 20);

        telaEmpresa.add(rotuloEmpresa);
        telaEmpresa.add(rotuloEndereco);
        telaEmpresa.add(rotuloCidade);
        telaEmpresa.add(rotuloBairro);
        telaEmpresa.add(rotuloCEP);
        telaEmpresa.add(rotuloCNPJ);
        telaEmpresa.add(rotuloEmail);
        telaEmpresa.add(rotuloInscricao);
        telaEmpresa.add(rotuloTel);
        telaEmpresa.add(empresa);
        telaEmpresa.add(endereco);
        telaEmpresa.add(cidade);
        telaEmpresa.add(bairro);
        telaEmpresa.add(email);
        telaEmpresa.add(inscricao);
        telaEmpresa.add(tel);
        telaEmpresa.add(cep);
        telaEmpresa.add(cnpj);
        telaEmpresa.add(cancela);
        telaEmpresa.add(limpar);
        telaEmpresa.add(insere);

        setSize(450, 400);
        setVisible(true);


        insere.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
             //nao sei como fazer para este botao funcionar o que devo adicionar aqui?
            }
        });

        limpar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                empresa.setText(null);
                endereco.setText(null);
                cidade.setText(null);
                bairro.setText(null);
                email.setText(null);
                inscricao.setText(null);
                tel.setText(null);
                cep.setText(null);
                cnpj.setText(null);

            }
        });
        cancela.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                int opcao;
                Object[] sair = {"Sim", "Não"};
                opcao = JOptionPane.showOptionDialog(null,
                        "Deseja mesmo Cancelar a operação?", "Fechar",
                        JOptionPane.YES_NO_OPTION,
                        JOptionPane.QUESTION_MESSAGE, null, sair, sair[0]);
                if (opcao == JOptionPane.YES_OPTION) {
                    System.exit(0);
                }
            }
        });

    }

    public static void main(String args[]) {
        CadastroDeEmpresa app = new CadastroDeEmpresa();
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

Classe de Conexao (Já testada).

public class ConnectionFactory {
	public static Connection getConnection() throws SQLException {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("Conectando ao banco");
			return DriverManager.getConnection("jdbc:mysql://localhost/clientes",
					"root", "root");
		} catch (ClassNotFoundException e) {
			throw new SQLException(e.getMessage());
		}
	}
}

Classe DAO

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JTextField;

public class EmpresaDAO {

    private Connection connection;


    public EmpresaDAO() throws SQLException {
        this.connection = ConnectionFactory.getConnection();
    }

    public void adiciona(Empresa empresa) throws SQLException {



        // prepared statement para inserção
        String sql = "insert into  (nome,email,endereco) values (?,?,?)";
        PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(sql);
        // seta os valores
        stmt.setString(1, empresa.getEmpresa());
        stmt.setString(2, empresa.getEndereco());
        stmt.setString(3, empresa.getCidade());
        stmt.setString(4, empresa.getBairro());
        stmt.setString(5, empresa.getEmail());
        stmt.setString(6, empresa.getInscricao());
        stmt.setString(7, empresa.getCep());
        stmt.setString(8, empresa.getTel());
        stmt.setString(9, empresa.getCnpj());

        // executa
        stmt.execute();
        stmt.close();
    }

    void adiciona(JTextField empresa) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}
public class Empresa {

    String empresa, enderceco, cidade, bairro, email, inscricao, endereco, cep,
            tel, cnpj;

    public String getEmpresa() {
        return empresa;
    }

    public void setEmpresa(String empresa) {
        this.empresa = empresa;
    }

    public String getEnderceco() {
        return enderceco;
    }

    public void setEnderceco(String enderceco) {
        this.enderceco = enderceco;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getInscricao() {
        return inscricao;
    }

    public void setInscricao(String inscricao) {
        this.inscricao = inscricao;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }
}

12 Respostas

kicolobo

O problema está no seu SQL de inserção.

Saca só:

String sql = "insert into  (nome,email,endereco) values (?,?,?)";

Mas você passa muito mais de 3 parametros

stmt.setString(1, empresa.getEmpresa());  
        stmt.setString(2, empresa.getEndereco());  
        stmt.setString(3, empresa.getCidade());  
        stmt.setString(4, empresa.getBairro());  
        stmt.setString(5, empresa.getEmail());  
        stmt.setString(6, empresa.getInscricao());  
        stmt.setString(7, empresa.getCep());  
        stmt.setString(8, empresa.getTel());  
(...)
M

Verdade, falha minha corrigido porem tenho uma outra duvida é na classe principal como adicionar uma ação para o botão insere?

codigo corrigido.

String sql = "insert into  (empresa, endereco, cidade, bairro, email, inscricao, cep, tel, cnpj) values (?,?,?,?,?,?,?,?,?)";

botão Inserir.

insere.addActionListener(new ActionListener() {  
  
            @Override  
            public void actionPerformed(ActionEvent arg0) {  
             //nao sei como fazer para este botao funcionar o que devo adicionar aqui?  
            }  
        });
F

recomendo o hibernate facilita a vida 10000000000000x

Felagund

No Botão inserir vc cria a empresa com os dados da tela

empresa = new Empresa();
emprese.setNome(tfNome.getText()); //so um exemplo
... //Continua empreenchendo

//Chama o DAO para salvar
new EmpresaDA().cadastrar(empresa);
M

Felagund.
fiz do modo que me orientou porem não deu certo esta dando erro em new EmpresaDAO().cadastrar(empresa);

insere.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                Empresa empresa = new Empresa();
                //emprese.setNome(tfNome.getText()); //so um exemplo
                empresa.setEmpresa(empresas.getText());
                empresa.setEnderceco(endereco.getText());
                empresa.setCidade(cidade.getText());
                empresa.setBairro(bairro.getText());
                empresa.setEmail(email.getText());
                empresa.setInscricao(inscricao.getText());
                empresa.setTel(tel.getText());
                empresa.setCep(cep.getText());
                empresa.setCnpj(cnpj.getText());

                new EmpresaDAO().cadastrar(empresa); // Esta dando erro aqui
                
            }
        });
M

Fred, com ficaria com hibernate?

M

Agora esta aparecendo o seguinte erro.

SEVERE: null
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(empresa, endereco, cidade, bairro, email, inscricao, cep, tel, cnpj) values ('M' at line 1
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
        at com.mysql.jdbc.Util.getInstance(Util.java:381)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3536)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3468)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1957)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2107)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2648)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2086)
        at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1365)
        at projetoempresa.EmpresaDAO.cadastrar(EmpresaDAO.java:41)
        at projetoempresa.CadastroDeEmpresa$1.actionPerformed(CadastroDeEmpresa.java:149)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3255)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
barney

Vou tentar te ajudar aí e depois fazer algumas recomendações…

insere.addActionListener(new ActionListener() {         
            @Override     
            public void actionPerformed(ActionEvent arg0) {     
             //nao sei como fazer para este botao funcionar o que devo adicionar aqui?     
            }     
        });

Nesse código você vai ter que instanciar sua empresa ( new Empresa()), setar os valores nos atributos
(empresa.setNome(“NOME”)) chamar o método “adiciona” da classe “EmpresaDAO” passando a empresa instanciada e assim ele vai inserir normalmente.

Recomendações

De uma mastigada em seu código está querendo fazer tudo na mesma classe
use mais o conceito de Orientação a Objetos use “MVC” basicamente 6 classes
exemplo:
Empresa (Entity)
FrmEmpresa (Tela)
EmpresaDAO (DAO)
EmpresaCtr (Controller)
EmpresaModel (Modelo)
ConnectionFactory (Conexão)

Use: JPA :smiley:

barney

murphy:
Agora esta aparecendo o seguinte erro.

SEVERE: null com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(empresa, endereco, cidade, bairro, email, inscricao, cep, tel, cnpj) values ('M' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.Util.getInstance(Util.java:381) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3536) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3468) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1957) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2107) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2648) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2086) at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1365) at projetoempresa.EmpresaDAO.cadastrar(EmpresaDAO.java:41) at projetoempresa.CadastroDeEmpresa$1.actionPerformed(CadastroDeEmpresa.java:149) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6263) at javax.swing.JComponent.processMouseEvent(JComponent.java:3255) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2475) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Cara tem um erro em sua Query, se eu não estou enganado ali… "insert into…"
ta faltando o nome da tabela “insert into empresa” :wink:

M

Realmente, era isto Barnei…
Funcionou…
Muito Obrigado.

F

com hibernate ainda estou estudando hehe eu usava JDBC, mas fica algo assim:

Emrepsa empresa = new Empresa(); empresa.setNome("Nome"); empresa.setCNPJ("01419283"); ... ... SessionFactory sf = new Configuration().configure().buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); session.save(empresa); tx.commit(); session.close();

F

desculpe duplo post, sexta feira é foda heh

Criado 8 de janeiro de 2010
Ultima resposta 8 de jan. de 2010
Respostas 12
Participantes 5