Probelas com a conexão ao banco de dados [resolvido]

10 respostas
C_Lucas

Bom dia. Bom estou tendo problemas com enviar dados para o banco de dados. Tenho dois codigos. Um para enviar dados de um formulário para criar usuários para utilizar o aplicativo que estou fazendo, este código está funcionando e é este abaixo:

b_enviar.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e){
String password1 = new String(p_pass1.getText());
 String password2 = new String(p_pass2.getText());
           if(password1 == null ? "" == null : password1.equals("")){
               JOptionPane.showMessageDialog(null,
       "Preencha o campo 1 da senha",
   "Operação não efetuada",JOptionPane.ERROR_MESSAGE,
     null);}if(password2 == null ? "" == null : password2.equals("")){
         JOptionPane.showMessageDialog(null,
       "Preencha o campo 2 da senha",
   "Operação não efetuada",JOptionPane.ERROR_MESSAGE,
     null);}

 try{
    String url ="jdbc:odbc:admin_user";
    String username="";
    String password = "";
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection conexaoadmin;
    conexaoadmin = DriverManager.getConnection(url,username,password);
    Statement statementadmin ;
    statementadmin = conexaoadmin.createStatement();
    statementadmin.executeUpdate("INSERT INTO usuario(nome,senha)VALUES('"+t_nome.getText()+"','"+p_pass2.getText()+"')");

    JOptionPane.showMessageDialog(null,"Os dados forão enviados",
            "Gravação de dados",
            JOptionPane.INFORMATION_MESSAGE);

        }
catch(Exception event)
{JOptionPane.showMessageDialog(null,"Conexão falhou",
            "Tentativa de conexão falhou",
            JOptionPane.ERROR_MESSAGE);
}


           }
       });

B_enviar é um botão. O outro está igual:

ETCC.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){




        String snome = new String(textonome.getText());
        String srgm = new String(textorgm.getText());
        String sendereco = new String(textoendereco.getText());
        String scurso = new String (textocurso.getText());
        String snume = new String (textonume.getText()); // Essa string é para o nº da casa
        String semail = new String(textoemailt.getText());
        /*Será usado um metodo diferente para
         *  as caixas de texto com formatação
         * esse método irá retirar quaisquer caracteres
         * diferentes de 0 e 9
         */
        String scep = new String(cept.getText().replaceAll("[^0-9]",""));
        String stelefone = new String(telt.getText().replaceAll("[^0-9]",""));
        String sdata = new String(datat.getText().replaceAll("[^0-9]",""));

        // verifica se as caixas de texto estão vazias

        if(snome == null ? "" == null : snome.equals("")){
            JOptionPane.showMessageDialog(null,
       "O campo NOME esta em branco",
   "Erro ao enviar dados",JOptionPane.ERROR_MESSAGE,
     null);
        }
        if(srgm == null? "" == null : srgm.equals("")){
            JOptionPane.showMessageDialog(null,
       "O campo RGM esta em branco",
   "Erro ao enviar dados",JOptionPane.ERROR_MESSAGE,
     null);
        }
        if(sendereco == null ? "" == null : sendereco.equals("")){
            JOptionPane.showMessageDialog(null,
       "O campo ENDEREÇO esta em branco",
   "Erro ao enviar dados",JOptionPane.ERROR_MESSAGE,
     null);
        }
        if(scurso == null ? "" == null : scurso.equals("")){
            JOptionPane.showMessageDialog(null,
       "O campo CURSO esta em branco",
   "Erro ao enviar dados",JOptionPane.ERROR_MESSAGE,
     null);
        }
        if(snume == null ? "" == null : snume.equals("")){
           JOptionPane.showMessageDialog(null,
       "O campo N° DA CASA esta em branco",
   "Erro ao enviar dados",JOptionPane.ERROR_MESSAGE,
     null);
        }
        if(semail == null ? "" == null : semail.equals("")){
            JOptionPane.showMessageDialog(null,
       "O campo EMAIL esta em branco",
   "Erro ao enviar dados",JOptionPane.ERROR_MESSAGE,
     null);
        }
        if(scep == null ? "" == null : scep.equals("")){
            JOptionPane.showMessageDialog(null,
       "O campo CEP esta em branco",
   "Erro ao enviar dados",JOptionPane.ERROR_MESSAGE,
     null);
        }
        if(stelefone == null ?""== null:stelefone.equals("")){
            JOptionPane.showMessageDialog(null,
       "O campo TELEFONE esta em branco",
   "Erro ao enviar dados",JOptionPane.ERROR_MESSAGE,
     null);
        }
        if(sdata == null ?"" == null: sdata.equals("")){
            JOptionPane.showMessageDialog(null,
       "O campo DATA DA MATRICULA esta em branco",
   "Erro ao enviar dados",JOptionPane.ERROR_MESSAGE,
     null);
        }

        else{ JOptionPane.showMessageDialog(null,
       "Conexão está sendo criada",
   "Criando conexão",JOptionPane.WARNING_MESSAGE,null);
        }
        // criando método para configurar caixas de texto que aceitaram somente números

textonume.addFocusListener((new java.awt.event.FocusAdapter(){
            @Override
			public void focusLost(java.awt.event.FocusEvent evt) {


        long text_nume;
        if(textonume.getText().length()!=0){
            try{
                text_nume = Long.parseLong(textonume.getText());
            }
            catch(NumberFormatException excp ){
                textonume.setText(null);
                JOptionPane.showMessageDialog(null,
       "Este campo só aceita números",
   "Erro ",JOptionPane.ERROR_MESSAGE,
     null);

            }
        }
            }}));

            textorgm.addFocusListener((new java.awt.event.FocusAdapter(){
            @Override
			public void focusLost(java.awt.event.FocusEvent evt) {


        long text_rgm;
        if(textorgm.getText().length()!=0){
            try{
                text_rgm = Long.parseLong(textorgm.getText());
            }
            catch(NumberFormatException excp ){
                textorgm.setText(null);
                JOptionPane.showMessageDialog(null,
       "Este campo só aceita números",
   "Erro ",JOptionPane.ERROR_MESSAGE,
     null);

            }
        }
            }}));
        // enviando os dados para o banco de dados
            
             try{
    String url ="jdbc:odbc:tcc";
    String username="";
    String password="";
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection conexao;
    conexao = DriverManager.getConnection(url,username,password);
    Statement statement ;
    statement = conexao.createStatement();
    statement.executeUpdate("INSERT INTO cadastrotcc (nome,rgm,curso,email,cep,telefone,matricula,endereço,n_da_casa)VALUES('"+textonome.getText()+"',
'"+textorgm.getText()+"','"+textocurso.getText()+"','"+textoemailt.getText()+"','"+cept.getText()+"',
'"+telt.getText()+"','"+datat.getText()+"','"+textoendereco.getText()+"','"+textonume.getText()+"')");
torgm.getText()+"','"+textocurso.getText()+"','"+textoemailt.getText()+"','
"+cept.getText()+"','"+telt.getText()+"','"+datat.getText()+"','
"+textoendereco.getText()+"','"+textonume.getText()+"')");


    JOptionPane.showMessageDialog(null,"Os dados forão enviados",
            "Gravação de dados",
            JOptionPane.INFORMATION_MESSAGE);

        }
catch(Exception event)
{JOptionPane.showMessageDialog(null,"Conexão falhou",
            "Tentativa de conexão falhou",
            JOptionPane.ERROR_MESSAGE);
}


    }
});

porém o código cai no catch toda hora, pensei que era por causa do JFormattedTextField que usei, pois quando fosse enviar as String para o banco de dados iria enviar a formatação então daria erro. porém tirei do “values” as caixas formatadas e continua dando erro. Criei uma segunda tabela do banco ADMIN_USER com o mesmo nome da tabela tcc e tbm não funciona. Alguel por favor poderia me ajudar?

Desde de ja agradeço.

10 Respostas

gregorioarthur

Cara,

posta a pilha dos erros pra gente ver, fica mais fácil de achar o problema…

falou!

C_Lucas

gregorioarthur:
Cara,

posta a pilha dos erros pra gente ver, fica mais fácil de achar o problema…

falou!

Bom é que a classe está certa, quando eu compilo roda, só que cai no catch e não executa o try. sabe por que isso ocorre gregorioarthur?

gregorioarthur

entao vamos lá, qual dos try esta dando pau? o que tem o insert?

falow

C_Lucas

A o try que está dando errado é esse

try{
    String url ="jdbc:odbc:tcc";
    String username="";
    String password="";
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection conexao;
    conexao = DriverManager.getConnection(url,username,password);
    Statement statement ;
    statement = conexao.createStatement();
    statement.executeUpdate("INSERT INTO cadastrotcc (nome,rgm,curso,email,cep,telefone,matricula,endereço,n_da_casa)VALUES
('"+textonome.getText()+"',
'"+textorgm.getText()+"','"+textocurso.getText()+"','"+textoemailt.getText()+"','"+cept.getText()+"','"+telt.getText()+"',
'"+datat.getText()+"','"+textoendereco.getText()+"','"+textonume.getText()+"')");
torgm.getText()+"','"+textocurso.getText()+"','"+textoemailt.getText()+"','
"+cept.getText()+"','"+telt.getText()+"','"+datat.getText()+"','
"+textoendereco.getText()+"','"+textonume.getText()+"')");


    JOptionPane.showMessageDialog(null,"Os dados forão enviados",
            "Gravação de dados",
            JOptionPane.INFORMATION_MESSAGE);

        }
catch(Exception event)
{JOptionPane.showMessageDialog(null,"Conexão falhou",
            "Tentativa de conexão falhou",
            JOptionPane.ERROR_MESSAGE);
}


    }
});

Bom como contano codigo tentei usar um outro banco de dados, e ja tentei criar uma segunda tabela no outro banco de dados banco de dados porém não deu certo.

luizalbsilva

Coloca o stacktrace para aparecer no seu console, dando um printStackTrace na exception, assim:

catch(Exception event) { event.printStackTrace(); JOptionPane.showMessageDialog(null,"Conexão falhou", "Tentativa de conexão falhou", JOptionPane.ERROR_MESSAGE); }

Com base no stack trace fica mais facil debugar :wink:

C_Lucas

Bom eu não tenho muito tempo com o java potanto não sei analisar corretamente a depuração. Alguém poderia me ajudar, a lista abaixo é o que o meu compilador diz da depuração.

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] A instru
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
        at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111)
        at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
        at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:288)
        at chrisjava$11.actionPerformed(chrisjava.java:512)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
        at java.awt.Component.processMouseEvent(Component.java:5517)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
        at java.awt.Component.processEvent(Component.java:5282)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3984)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3819)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1791)
        at java.awt.Component.dispatchEvent(Component.java:3819)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

O que eu entendi é que o erro começa da linha 512 onde inicio a conexão com o banco de dados. Desde de ja agradeço a ajuda de todos.

luizalbsilva

Realmente, a linha 512 parece ser a culpada… se for onde vc tenta usa o getConnection, verifica se você ajustou no ODBC do windows (Painel de controle/Desempenho e manutenção/Ferramentas administrativas/Fontes de dados)

Se estiver ajustado, tente abrir com algum programa que conheça… neste ponto não posso te ajudar, na verdade uso Ubuntu, e rodo o windows numa VM somente para testar algum sistema que rode no windows, ou para simular uma rede com a MS. Não tem nada instalado por la. Na época que programava em Delphi (ainda nas versões 5 a 7), tinha um utilitário que usávamos… acho que o nome era dbExplorer ou coisa assim, mas não tenho certeza.

Uma dica: experimenta não usar mais SQL em seus programas. Torna-se muito complicador na hora de portar entre bancos diferentes… experimenta usar um Hibernate (adoro este) ou mesmo um IBatis… existem vários ORMs no mercado, ou estude a JPA. Vc não vai se arrepender !

(Uma das variações que vi, é que alguns bancos delimitam suas strings com aspas duplas, outros com simples… )

C_Lucas

Muito obrgado pela dica luizasilva. :smiley: :smiley: :smiley:

gregorioarthur

mas até vc estudar o hibernate e começar a usá-lo, pode usar o PreparedStatement.

fica a dica que, se o programa for mto simples nao compensa um hibernate, caso contrário, use-o pois eh interessante.

=D

C_Lucas

Entendo. Obrigado pela ajuda tbm gregorioarthur. Mas os dois codigos estão praticamente iguais tirando algumas sentenças de if e else e o mesmo insiste em cair no catch. Ja configurei a fonte odbc e nada. Sem problemas de qualquer forma muito obrigado. :smiley: :smiley: :smiley:

Criado 29 de maio de 2010
Ultima resposta 29 de mai. de 2010
Respostas 10
Participantes 3