Conexao

3 respostas
L

Boa tarde a todos…
Estou começando a estudar conexao java com bd mysql, andei vendo uns códigos para conexao para manutenção de dados e achei o seguinte para inserir dados:
// botão gravar

try{ //tratamento de erros
[b]       [u]    // Localiza o driver  utilizado

Class.forName(com.mysql.jdbc.Driver);

//  Conectar no banco, que no meu caso é o eletiva na porta 3306 a padrão.

String url = jdbc:mysql://localhost:3306/eletiva;

Connection con = DriverManager.getConnection(url, root, “”);
//objeto comdo sql
        Statement stmt = con.createStatement();[/u][/b]
       
       // As variaveis a,b e c recebendo os dados digitados nos campos nome,endereco e sexo.
        String a = nome.getText();
        String b= endereco.getText();
        String c=  sexo.getModel().getSelectedItem().toString();
                
     
       
        // O codigo não é prosto pois ele é auto incremento.
       
        stmt.executeUpdate( "insert  into  clientes ( nome,endereco,sexo)  values  ( '  "  + a + " ','  "  + b + " ','  "  + c + " ') " );
      // Exibe a mensagem depois da gravação
        JOptionPane.showMessageDialog( this, "DADOS SALVOS! ");
       
            
       
        con.close();  // fecha conexão do banco de dados.
       
        //Tratamentos dos erros.
       
    }  catch( SQLException e){
        JOptionPane.showMessageDialog(this,  "Erro  Cmdo  SQL  " + e.getMessage() );
       
    } catch( ClassNotFoundException e){
        JOptionPane.showMessageDialog( this, " Driver não encontrado " );
    }

O que eu gostria de saber se tem como eu definir a conexao em uma classe e depois qdo precisar inserir, atualizar, excluir etc… não precisar definir a conexao de novo…
se alguem puder me ajudar…

3 Respostas

Ruttmann

Você pode transformar a classe de conexão em um Singleton, e passar a conexão por parâmetro a todos os métodos que precisam de conexão ao DB…

É uma solução boa, pra sistema pequenos.

Não tenho muita vivência com sistemas grandes, acredito que existem opções mais indicadas pra estes casos.

P

Concordo com o Ruttmann.

Monte a classe conexão separada de todas as outras. Uma classe que apenas conecte no banco.

Depois quando alguma classe precisar conectar no banco, basta você herdar a classe conexão e pronto.

Vou postar um exemplo de conexão com o MySQL:

public class conexao
{
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    private static final String serverName = "pms-165035";
    private static final String mydatabase = "sufs";
    private static final String STR_CON = "jdbc:mysql://" + serverName + "/" + mydatabase;
    private static final String USER = "Pedro";
    private static final String PASSWORD = "159753";
    private Connection conexao;
    public Statement statement;
    public ResultSet resultset;
    public boolean status;

    public void conecta()
    {
        try
        {
            Class.forName(DRIVER);
            conexao = DriverManager.getConnection(STR_CON, USER, PASSWORD);
        }
        catch (ClassNotFoundException erro)
        {
            JOptionPane.showMessageDialog (null, "Erro: "+erro);
        }
        catch (SQLException erro)
        {
            JOptionPane.showMessageDialog (null, "Erro: "+erro);
        }
    }

    public void desconectar ()
    {
        try {
            conexao.close();
        } catch (SQLException erro) {
            JOptionPane.showMessageDialog(null, "Erro: "+erro);
        }
    }

    public void sqlSelect(String sql)
    {
        try
        {
            statement = conexao.createStatement(resultset.TYPE_SCROLL_SENSITIVE, resultset.CONCUR_READ_ONLY);
            resultset = statement.executeQuery(sql);
        }
        catch (SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro: "+erro);
        }
    }
    
    public boolean executeSQL(String sql)
    {
        try
        {
            statement = conexao.createStatement(resultset.TYPE_SCROLL_SENSITIVE, resultset.CONCUR_READ_ONLY);
            status = statement.execute(sql);
        }
        catch (SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro "+erro);
        }
        return status;
    }
}

Depois quando preciso conectar ao banco para gravar por exemplo, eu crio uma classe e dou um extends nesta conexão.

Por exemplo, cadastrar um funcionário na minha tabela funcionarios:

public class funcionarioDAO extends conexao{

    public funcionarioDAO(){
        super();
    }

    public void cadastrarFuncionario(funcionarioBO fBO) {
        String sql;
        
        sql = "insert into funcionarios values ("
                + "null, "
                + "'"+fBO.getNome()+"', "
                + "'"+fBO.getSecao()+"', "
                + "'"+fBO.getDivisao()+"')";
        
        super.conecta();
        if(super.executeSQL(sql))
            JOptionPane.showMessageDialog(null, "Funcionário cadastrado com sucesso!");
        super.desconectar();
    }
}
BrunoFurtado

Opa,
Segue ai um exemplo que de DaoFactory.
É preciso adicionar a lib do mysql-connector para o projeto funcionar.

Criado 20 de setembro de 2012
Ultima resposta 20 de set. de 2012
Respostas 3
Participantes 4