Por que nao funciona? (Por favor respondam)

9 respostas
samuelhenriquerj

Estou tentando fazer uma classe para inserir dados, porém na funciona,
é um codigo para cadastro de usuarios, a verificação se ele existe funciona, porém a inserção não funciona…Tenho certeza que a conexão está certa, mas a inserção na vai…
Por favor me ajudem

package Projeto;

import java.sql.*;



public class CadastroBd{
    
    protected Connection con;
    protected PreparedStatement stmt;
        
    public void Open()
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con=DriverManager.getConnection("jdbc:mysql://localhost:3306/testes","root","coti");
        }
        catch (Exception e)
        {            
        }
    }
    public boolean ExisteLogin(Login login)
    {
        boolean flag = false;
        try
        {
            
            stmt=con.prepareStatement("select * from login where login=?");
            stmt.setString(1,login.getLogin());
            ResultSet rs = stmt.executeQuery();
            while(rs.next())
            {
                flag=true;
                break;
            }
            stmt.close();             
            
        }
        catch (Exception e)
        {        
        }
        
        return flag;
    }
    public void CadastrarLogin(Login login)
    {
        try
        {           
            stmt=con.prepareStatement("insert into login  (login,senha) values (?,?)");
            stmt.setString(1,login.getLogin());
            stmt.setString(2,login.getSenha());
            stmt.executeQuery();
            stmt.close();        
            
        }
        catch (Exception e)
        {
        }
    }
    public void CadastrarDados(Cadastro dados)
    {
        try
        {
            stmt=con.prepareStatement("insert into dados (nome,data_nasc,rua,bairro) values(?,?,?,?)");
            stmt.setString(1,dados.getNome());
            stmt.setString(2,dados.getData_nasc());
            stmt.setString(3,dados.getRua());
            stmt.setString(4,dados.getBairro());
            stmt.executeQuery();
            stmt.close();      
            
        }
        catch (Exception e)
        {          
        }        
       
    }
}

9 Respostas

davidbuzatto

Troca o executeQuery para apenas execute nos Prepared Statements que fazem inserção.

O executeQuery é usado com os selects da vida.

Se você der uma lida na documentação vc vai encontrar isso.

Até mais…

davidbuzatto

Mais uma coisa, nunca faça os catchs da forma que você fez caso você não tenha certeza do que pode acontecer. Se você estivesse dentro de cada catch exibindo o stackTrace e/ou a mensagem da excessão vc ia ver o erro.

Dentro dos catchs sempre faça a impressão da pilha de chamadas de métodos e procure capturar excessões mais específicas (SQLException no caso).

Até mais!

L

Troque executeQuery por executeUpdate…

sergiotaborda
public void CadastrarDados(Cadastro dados)
     {
         try
         {
             stmt=con.prepareStatement("insert into dados (nome,data_nasc,rua,bairro) values(?,?,?,?)");
             stmt.setString(1,dados.getNome());
             stmt.setString(2,dados.getData_nasc());
             stmt.setString(3,dados.getRua());
             stmt.setString(4,dados.getBairro());
             stmt.executeQuery();  <== mude para stmt.executeUpdate()
             stmt.close();      
             
         }
         catch (Exception e)
         {          
         }        
        
     }

Um comando insert não é uma query. O select é uma query.
Então o que vc deve invocar é stmt.executeUpdate() e não stmt.executeQuery(). É so substituir.

davidbuzatto

Não entendi pq vc usou protected nos membros da sua classe… Eles devem ser acessíveis via herança? Para que?

Hehehe mais uma coisa, nomeie os métodos usando as convensões de codificação da linguagem Java… Dá uma pesquisada no google que você vai encontrar o documento.

samuelhenriquerj

Mt obrigado pessoal, agora deu certo, so nao entendi sobre a questão do try catch q vc falaram??

samuelhenriquerj

pois teria q importar biblioteca p/ só usar o print…
ou tem outra forma?

davidbuzatto

Não teria que importar nada para usar o print da classe System…

try { // alguma coisa que lança uma SQLException } catch ( SQLException exc ) { System.out.println( exc.getMessage() ); // exibe a mensagem de excessão. exc.printStackTrace(); // exibe a pilha de execução de métodos, traçando o início até o fim }

Tenta mudar seu código e deixar o executeQuery como vc estava deixando só para forçar o erro, ou entrar errar de propósito a sintaxe do SQL. Você vai ver o erro ecoar na saída na aplicação.

Até mais!

samuelhenriquerj

Vlw, mt obrigado msm! :slight_smile:

Criado 14 de julho de 2007
Ultima resposta 15 de jul. de 2007
Respostas 9
Participantes 4