Erro ao acessar banco de dados [RESOLVIDO]

14 respostas
hackum

Não estou consiguindo acessar o banco de dados, eu tirei o executeUpdate e eu consigo acessar normalmente, mas quando eu coloco, aparece que não foi possível acessar o banco de dados. Veja se tem algo de errado:

class cadastrarClienteDB {
    
    
    private String codigo;
    private String nomeCliente;
    private String dataNascimento;
    private String cpfCNPJ;
    private String rg;
    private String telefone;
    private String celular;
    private String cep;
    private String endereco;
    private String bairro;
    
    Connection conectar;
    Statement stmt;
    
    public cadastrarClienteDB(String codigoC,String nomeC,String dataNascimentoC,String cpfCNPJC,
               String rgC,String telefoneC, String celularC, String cepC,String enderecoC, String bairroC)
    {
        codigo = codigoC;
        nomeCliente = nomeC;
        dataNascimento = dataNascimentoC;
        cpfCNPJ = cpfCNPJC;
        rg = rgC;
        telefone = telefoneC;
        celular = celularC;
        cep = cepC;
        endereco = enderecoC;
        bairro = bairroC;
        
        
        
        try {
            
            Class.forName("com.mysql.jdbc.Driver"); //carrega o driver
            conectar = DriverManager.getConnection("jdbc:mysql://localhost/mysql","root","123456");
            
            stmt = conectar.createStatement();
            
            //stmt.executeUpdate("INSERT INTO dadosClientes" + "(codigoCliente,nomeCliente,dataNascimento,cpfCNPJ,rg,telefone,celular,cep,endereco,bairro)" + "VALUES ('"+codigo+"', '"+nomeCliente+"', '"+dataNascimento+"', '"+cpfCNPJ+"', '"+rg+"', '"+telefone+"', '"+celular+"', '"+cep+"', '"+endereco+"', '"+bairro+"')");
            
            stmt.executeUpdate("INSERT INTO dadosClientes"  + "(codigoCliente,nomeCliente)" + "VALUES ('"+codigo+"', '"+nomeCliente+"')");
            
            if(stmt == null)
            {
                JOptionPane.showMessageDialog(null,"Não foi possível cadastrar! \n"
                        + "Porfavor, contate o suporte técnico.");
            }
            else 
            {
                JOptionPane.showMessageDialog(null,"Dados cadastrados com sucesso!");
                
            }
            
        }
        catch(ClassNotFoundException e)
        {
            JOptionPane.showMessageDialog(null,"Classe não encontrada!" +JOptionPane.ERROR_MESSAGE);
        }
        
        catch(SQLException E)
        {
            JOptionPane.showMessageDialog(null,"Não foi possível conectar ao banco de dados! " +JOptionPane.ERROR_MESSAGE);
            
        }

14 Respostas

Fexx

Pq não utiliza a interface PreparedStatement ao invés de Statement ? seu codigo fica mais legível e mais fácil de dá manutenções, imagina uma tabela com diversas colunas, vc teria que fazer varias aspas simples, duplas etc… com PreparedStatement vc usa coringas que sõa representados pelas interrogações.

ao invés disso:

"INSERT INTO dadosClientes"  + "(codigoCliente,nomeCliente)" + "VALUES ('"+codigo+"', '"+nomeCliente+"')");

Com PreparedStatement ficaria assim;

"INSERT INTO dadosClientes(codigoCliente, nomeCliente) VALUES (?,?)";

Onde cada interrogação é uma coluna da tabela.

Crie um método apenas para criar a conexão, e outra para inserir os dados.

E ainda vc pode acabar eliminando esse if:

if(stmt == null)  
            {  
                JOptionPane.showMessageDialog(null,"Não foi possível cadastrar! \n"  
                        + "Porfavor, contate o suporte técnico.");  
            }  
            else   
            {  
                JOptionPane.showMessageDialog(null,"Dados cadastrados com sucesso!");  
                  
            }

Colocando, no lugar certo das exceptions, podendo chamar o método getMessage() e o printStackTrace() para facilitar nas correções.

Boa sorte…

hackum

Como que esse método vai saber que eu quero o valor X ?

Fexx

Seja mais claro nas perguntas.

Quando disse para criar um método para conexão?
veja um exemplo, essa classe é uma fabrica de conexões. com ela vc pode verifica possíveis erro na conexão. tirando abaixa coesão.

package agenda.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionDataBase {
	private static final String URL_MYSQL = "jdbc:mysql://localhost/agenda";
	private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
	private static final String USER = "root";
	private static final String PASS = "skate182";

	public static Connection getConnection() {
		System.out.println("Conectando ao Banco de Dados");
		try {
			Class.forName(DRIVER_CLASS);
			return DriverManager.getConnection(URL_MYSQL, USER, PASS);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		return null;
	}

	public void fecharConexao(Connection conn) {
		try {
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			System.out.println("Não foi possivel fechar conexão: "
					+ e.getMessage());
		}
	}
}
hackum

Estou falando disso:

"INSERT INTO dadosClientes(codigoCliente, nomeCliente) VALUES (?,?)";

Como que essa interrogação vai saber que eu quero o valor nomeCliente ?

Fexx

Exemplo simples

try{      
    // cria um preparedStatement  
    PreparedStatement stmt = con.prepareStatement("INSERT INTO dadosClientes(codigoCliente, nomeCliente) VALUES (?,?)");  
  
    // preenche os valores  
    stmt.setInt(1, codigo);  // o 1 significa o primeiro coringa(interrogação)
    stmt.setString(2, nomeCliente);  //o 2 significa o segundo coringa(interrogação)

leia isso:

veja isso:

Abraços.

hackum

Ótimo Fexx. Agora eu consigui compreender. Muito obrigado por me tirar essa dúvida. Realmente é bem mais prático usar o preparedStatement.

Um grande abraço!

Heitorh3

Cara por você não faz assim, pelo menos é assim que eu faço.

public void salvar(Cliente bean) throws SQLException{
		
		Connection con = pool.getConnection();
		PreparedStatement ps;
		
		String sqlInsert = "INSERT INTO cliente(nome,cid_cod,bai_cod,rua,uf,numero,cep,cpf,telefone)" +  
		                   "VALUES (?,?,?,?,?,?,?,?,?);";
		
			ps = con.prepareStatement(sqlInsert);
			ps.setString(1, bean.getNome());
			ps.setInt(2, bean.getcidade().getCid_cod());
			ps.setInt(3, bean.getBairro().getBai_cod());
			ps.setString(4, bean.getRua());
			ps.setString(5, bean.getUf());
			ps.setString(6, bean.getNome());
			ps.setString(7, bean.getCep());
			ps.setString(8, bean.getCpf());
			ps.setString(9, bean.getTelefone());
			
			
			ps.executeQuery();
	
	}

}
hackum

Não consigo enviar os dados:

class cadastrarClienteDB {
    
    
    private String codigo;
    private String nomeCliente;
    private String dataNascimento;
    private String cpfCNPJ;
    private String rgCliente;
    private String telefoneCliente;
    private String celularCliente;
    private String cepCliente;
    private String enderecoCliente;
    private String bairroCliente;
   

    Connection conectar;
    PreparedStatement ps; 
    
    public cadastrarClienteDB(String codigoC,String nomeC,String dataNascimentoC, String cpfCNPJC, String rgC,String telefoneC, String celularC, String cepC, String enderecoC,String bairroC)
    {
        codigo = codigoC;
        nomeCliente = nomeC;
        dataNascimento = dataNascimentoC;
        cpfCNPJ = cpfCNPJC;
        rgCliente = rgC;
        telefoneCliente = telefoneC;
        celularCliente = celularC;
        cepCliente = cepC;
        enderecoCliente = enderecoC;
        bairroCliente = bairroC;

        
        
        
        try {
            
            Class.forName("com.mysql.jdbc.Driver"); //carrega o driver
            conectar = DriverManager.getConnection("jdbc:mysql://localhost/clientes","root","1234567");
            
            
            //stmt.executeUpdate("INSERT INTO dadosClientes" + "(codigoCliente,nomeCliente,dataNascimento,cpfCNPJ,rg,telefone,celular,cep,endereco,bairro)" + "VALUES ('"+codigo+"', '"+nomeCliente+"', '"+dataNascimento+"', '"+cpfCNPJ+"', '"+rg+"', '"+telefone+"', '"+celular+"', '"+cep+"', '"+endereco+"', '"+bairro+"')");
            
             ps = conectar.prepareStatement("INSERT INTO dadosClientes " +
                                    "(codigo, nome, datanascimento,cpfcnpj,rg,telefone) "+
                                    "VALUES (?,?,?,?,?,?,?);");
             
             
             ps.setString(1, codigo);
             ps.setString(2, nomeCliente);
             ps.setString(3, dataNascimento);
             ps.setString(4, cpfCNPJ);
             ps.setString(5, rgCliente);
             ps.setString(6, telefoneCliente);
             ps.setString(7, celularCliente);
         
             
            
            
            if(ps == null)
            {
                JOptionPane.showMessageDialog(null,"Não foi possível cadastrar! \n"
                        + "Porfavor, contate o suporte técnico.");
            }
            else 
            {
                JOptionPane.showMessageDialog(null,"Dados cadastrados com sucesso!");
                
            }
            
        }
        catch(ClassNotFoundException e)
        {
            JOptionPane.showMessageDialog(null,"Classe não encontrada!" +JOptionPane.ERROR_MESSAGE);
        }
        
        catch(SQLException E)
        {
            JOptionPane.showMessageDialog(null,"Não foi possível conectar ao banco de dados! " +JOptionPane.ERROR_MESSAGE);
            
        }
        
        
        
        
        
    }
    
}
Fexx

Cara seu código com muita baixa coesão, tudo em uma classe só.

tenta dividir isso, até mesmo para vc entender melhor.

Tentei usar o seu mesmo, porém deu mais trabalho do que criar um novo kkkk.

Mas tá ai, só muda as configurações do banco:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.swing.JOptionPane;

class cadastrarClienteDB {

	private String codigo;
	private String nomeCliente;
	private String dataNascimento;
	private String cpfCNPJ;
	private String rgCliente;
	private String telefoneCliente;
	private String celularCliente;
	private String cepCliente;
	private String enderecoCliente;
	private String bairroCliente;

	Connection conectar;
	PreparedStatement ps;
	private static final String DRIVER = "org.gjt.mm.mysql.Driver";
	private static final String BANCO = "java";
	private static final String URL = "localhost";
	private static final String CONNECTION = "jdbc:mysql://" + URL + ":3306/"
			+ BANCO;
	private static final String USUARIO = "root";
	private static final String SENHA = "root";

	public cadastrarClienteDB(String codigoC, String nomeC,
			String dataNascimentoC, String cpfCNPJC, String rgC,
			String telefoneC) {
		codigo = codigoC;
		nomeCliente = nomeC;
		dataNascimento = dataNascimentoC;
		cpfCNPJ = cpfCNPJC;
		rgCliente = rgC;
		telefoneCliente = telefoneC;


		try {
			Class.forName(DRIVER);
			conectar = DriverManager.getConnection(CONNECTION, USUARIO, SENHA);
			System.out.println("Conexão efetuada com sucesso");
		} catch (ClassNotFoundException e) {
			System.out.println("Drive não encontrado");
		} catch (SQLException e) {
			System.out.println("Não foi possivel efetuar a conexão");
		}

		try {

			String sql = "INSERT INTO dadosclientes (codigo, nome, datanascimento,cpfcnpj,rg,telefone)VALUES (?,?,?,?,?,?)";

			ps = conectar.prepareStatement(sql);

			ps.setString(1, codigo);
			ps.setString(2, nomeCliente);
			ps.setString(3, dataNascimento);
			ps.setString(4, cpfCNPJ);
			ps.setString(5, rgCliente);
			ps.setString(6, telefoneCliente);

			ps.executeUpdate();

			if (ps == null) {
				JOptionPane.showMessageDialog(null,
						"Não foi possível cadastrar! \n"
								+ "Porfavor, contate o suporte técnico.");
			} else {
				JOptionPane.showMessageDialog(null,
						"Dados cadastrados com sucesso!");

			}

		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null,
					"Não foi possível Inseir dados ao banco! "
							+ JOptionPane.ERROR_MESSAGE);
			System.out.println("Erro: "+e.getMessage());

		}

	}

	public static void main(String[] args) throws SQLException {
		cadastrarClienteDB c = new cadastrarClienteDB("teste", "teste",
				"teste", "teste", "teste", "teste");

	}

}

Boa sorte.

hackum

Não consigo adcionar os dados:

class cadastrarClienteDB {
    
    
    private String codigo;
    private String nomeCliente;
    private String dataNascimento;
    private String cpfCNPJ;
    private String rgCliente;
    private String telefoneCliente;
    private String celularCliente;
    private String cepCliente;
    private String enderecoCliente;
    private String bairroCliente;
   

    Connection conectar;
    PreparedStatement ps; 
    
    public cadastrarClienteDB(String codigoC,String nomeC,String dataNascimentoC, String cpfCNPJC, String rgC,String telefoneC, String celularC, String cepC, String enderecoC,String bairroC)
    {
        codigo = codigoC;
        nomeCliente = nomeC;
        dataNascimento = dataNascimentoC;
        cpfCNPJ = cpfCNPJC;
        rgCliente = rgC;
        telefoneCliente = telefoneC;
        celularCliente = celularC;
        cepCliente = cepC;
        enderecoCliente = enderecoC;
        bairroCliente = bairroC;

        
        
        
        try {
            
            Class.forName("com.mysql.jdbc.Driver"); //carrega o driver
            conectar = DriverManager.getConnection("jdbc:mysql://localhost/clientes","root","123434");
            
            
            //stmt.executeUpdate("INSERT INTO dadosClientes" + "(codigoCliente,nomeCliente,dataNascimento,cpfCNPJ,rg,telefone,celular,cep,endereco,bairro)" + "VALUES ('"+codigo+"', '"+nomeCliente+"', '"+dataNascimento+"', '"+cpfCNPJ+"', '"+rg+"', '"+telefone+"', '"+celular+"', '"+cep+"', '"+endereco+"', '"+bairro+"')");
            
             ps = conectar.prepareStatement("INSERT INTO dadosClientes " +
                                    "(codigo, nome, datanascimento,cpfcnpj,rg,telefone,cep) "+
                                    "VALUES (?,?,?,?,?,?,?,?)" );
             
             
             ps.setString(1, codigo);
             ps.setString(2, nomeCliente);
             ps.setString(3, dataNascimento);
             ps.setString(4, cpfCNPJ);
             ps.setString(5, rgCliente);
             ps.setString(6, telefoneCliente);
             ps.setString(7, celularCliente);
             ps.setString(8, cepCliente);
             
             

         
             
            
            
            if(ps == null)
            {
                JOptionPane.showMessageDialog(null,"Não foi possível cadastrar! \n"
                        + "Porfavor, contate o suporte técnico.");
            }
            else 
            {
                JOptionPane.showMessageDialog(null,"Dados cadastrados com sucesso!");
                
            }
            
        }
        catch(ClassNotFoundException e)
        {
            JOptionPane.showMessageDialog(null,"Classe não encontrada!" +JOptionPane.ERROR_MESSAGE);
        }
        
        catch(SQLException E)
        {
            JOptionPane.showMessageDialog(null,"Não foi possível conectar ao banco de dados! " +JOptionPane.ERROR_MESSAGE);
            
        }
        
        
        
        
        
    }
    
}

Depois que eu coloquei o CEP do cliente, não consigo colocar os dados:

ps.setString(8, cepCliente);
Fexx

Verifique Sua query, vc está passando 7 valores: codigo, nome, datanascimento,cpfcnpj,rg,telefone,cep,

ps = conectar.prepareStatement("INSERT INTO dadosClientes " +  
                                    "(codigo, nome, datanascimento,cpfcnpj,rg,telefone,cep) "+  
                                    "VALUES (?,?,?,?,?,?,?,?)" );

E aqui vc está passando 8?

As interrogações e a query tem que tem o mesmo numero de paramentos que os set’s abaixo.

ps.setString(1, codigo);  
             ps.setString(2, nomeCliente);  
             ps.setString(3, dataNascimento);  
             ps.setString(4, cpfCNPJ);  
             ps.setString(5, rgCliente);  
             ps.setString(6, telefoneCliente);  
             ps.setString(7, celularCliente);  
             ps.setString(8, cepCliente);

Na sua query, cade o campo celularCliente?

hackum

Corrigi o problema, e ainda sim, não deu:

class cadastrarClienteDB {
    
    
    private String codigo;
    private String nomeCliente;
    private String dataNascimento;
    private String cpfCNPJ;
    private String rgCliente;
    private String telefoneCliente;
    private String celularCliente;
    private String cepCliente;
    private String enderecoCliente;
    private String bairroCliente;
   

    Connection conectar;
    PreparedStatement ps; 
    
    public cadastrarClienteDB(String codigoC,String nomeC,String dataNascimentoC, String cpfCNPJC, String rgC,String telefoneC, String celularC, String cepC, String enderecoC,String bairroC)
    {
        codigo = codigoC;
        nomeCliente = nomeC;
        dataNascimento = dataNascimentoC;
        cpfCNPJ = cpfCNPJC;
        rgCliente = rgC;
        telefoneCliente = telefoneC;
        celularCliente = celularC;
        cepCliente = cepC;
        enderecoCliente = enderecoC;
        bairroCliente = bairroC;

        
        
        
        try {
            
            Class.forName("com.mysql.jdbc.Driver"); //carrega o driver
            conectar = DriverManager.getConnection("jdbc:mysql://localhost/clientes","root","1212121");
            
            
            //stmt.executeUpdate("INSERT INTO dadosClientes" + "(codigoCliente,nomeCliente,dataNascimento,cpfCNPJ,rg,telefone,celular,cep,endereco,bairro)" + "VALUES ('"+codigo+"', '"+nomeCliente+"', '"+dataNascimento+"', '"+cpfCNPJ+"', '"+rg+"', '"+telefone+"', '"+celular+"', '"+cep+"', '"+endereco+"', '"+bairro+"')");
            
             String dados = "INSERT INTO dadosClientes " +
                                    "(codigo, nome, datanascimento,cpfcnpj,rg,telefone,celular,cep) "+
                                    "VALUES (?,?,?,?,?,?,?,?)";
             
             
             ps = conectar.prepareStatement(dados);
             ps.setString(1, codigo);
             ps.setString(2, nomeCliente);
             ps.setString(3, dataNascimento);
             ps.setString(4, cpfCNPJ);
             ps.setString(5, rgCliente);
             ps.setString(6, telefoneCliente);
             ps.setString(7, celularCliente);
             ps.setString(8, cepCliente);
             

         
             
            
            
            if(ps == null)
            {
                JOptionPane.showMessageDialog(null,"Não foi possível cadastrar! \n"
                        + "Porfavor, contate o suporte técnico.");
            }
            else 
            {
                JOptionPane.showMessageDialog(null,"Dados cadastrados com sucesso!");
                
            }
            
        }
        catch(ClassNotFoundException e)
        {
            JOptionPane.showMessageDialog(null,"Classe não encontrada!" +JOptionPane.ERROR_MESSAGE);
        }
        
        catch(SQLException E)
        {
            JOptionPane.showMessageDialog(null,"Não foi possível conectar ao banco de dados! " +JOptionPane.ERROR_MESSAGE);
            
        }
        
        
        
        
        
    }
    
}
pmlm

Falta o executeUpdate. E que erro é que dá?

hackum

Problema resolvido!
Obrigado a todos !

Criado 26 de janeiro de 2012
Ultima resposta 27 de jan. de 2012
Respostas 14
Participantes 4