Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CaioCRS

String de Conexão Java

Recommended Posts

Olá Pessoal, tudo bem?
Estou criando uma aplicação Web em Java(JSF), a tela da mesma está basicamente pronta, todo o visual definido, pois fazia parte de um antigo trabalho da Faculdade. Porém agora preciso testar a aplicação fazendo uma CRUD e algumas consultas direto da aplicação. Alguém poderia por gentileza me orientar para fazer corretamente a String de Conexão? O banco está pronto, já foram criadas todas as tabelas, a aplicação está ok, preciso agora testar mas não sei como. Na internet encontro alguns exemplos mas está tudo muito confuso.
Se alguém puder me orientar eu agradeço muito!

 

Eclipse Kepler

SQL Server 2008

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem "n" formas de ser feito isso cara.

 

Eu posso mostrar uma forma de realizar esse processo, pode não ser o melhor (pois também estou aprendendo) mas faço a conexão com o SGBD dessa forma:

 

Primeiro eu crio uma classe onde ficará os métodos e atributos usados por qualquer classe DAO. Por exemplo:

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

public class DataAccess {
    
    private final String USER = "admin123";
    private final String PASS = "123456";
    /* Exemplo usando JDBC oracle */
    private final String JDBC= "oracle.jdbc.OracleDriver";
    private final String DRIVER = "jdbc:oracle:thin:@//localhost:1521/XE";
    
    protected Connection con;
    protected PreparedStatement stm;
    
    protected boolean connect(){
        try {
            Class.forName(JDBC);
            con = DriverManager.getConnection(DRIVER, USER, PASS);
            return true;
        } catch( ClassNotFoundException | SQLException e ){
            return false;
        }
    }
    
    protected void disconnect(){
        try {
            con.close();
        } catch( SQLException e ){}
    }
}

Em seguia crio uma classe que herdará esses atributos e métodos. Primeiro, vamos supor que tenhamos uma classe de modelo "Pessoa":

class Pessoa {
    
    private int ID;
    private String name;

    /* Getters & Setters */
}

Então a classe DAO para esse modelo ficaria assim:

import java.sql.SQLException;

/* Herda os atributos e métodos de DataAccess */
public class DataAccessPessoa extends DataAccess {
    
    /* Um exemplo para inserir um usuário no banco... */
    public boolean insert( Pessoa p ){
        boolean success = false;
        if( connect() ){ /* se o método de conexão retornar true */
            try {
                /* Monta a 'query', por exemplo */
                stm = con.prepareStatement("insert into pessoa values(?,?)");
                stm.setInt( 1, p.getID() );
                stm.setString( 2, p.getName() );
                /* Executa a query */
                stm.executeQuery();
                /* Se a linha acima funcionar (sem gerar uma exceção), a variável
                'success' recebe valor true (para retornarmos e informar que ocorreu
                tudo certo).*/
                success = true;
            } catch (SQLException e){}
            finally {
                /* Independente de ter dado ou não certo, fazemos a desconexão */
                disconnect();
            }
        }
        /* retornamos se houve sucesso ou falha no insert */
        return success;
    }

    /* outros métodos: update, delete, select */
}

É claro, existem outras formas. Esse é um modo, o qual utilizo.

Espero que seja útil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem "n" formas de ser feito isso cara.

 

Eu posso mostrar uma forma de realizar esse processo, pode não ser o melhor (pois também estou aprendendo) mas faço a conexão com o SGBD dessa forma:

 

Primeiro eu crio uma classe onde ficará os métodos e atributos usados por qualquer classe DAO. Por exemplo:

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

public class DataAccess {
    
    private final String USER = "admin123";
    private final String PASS = "123456";
    /* Exemplo usando JDBC oracle */
    private final String JDBC= "oracle.jdbc.OracleDriver";
    private final String DRIVER = "jdbc:oracle:thin:@//localhost:1521/XE";
    
    protected Connection con;
    protected PreparedStatement stm;
    
    protected boolean connect(){
        try {
            Class.forName(JDBC);
            con = DriverManager.getConnection(DRIVER, USER, PASS);
            return true;
        } catch( ClassNotFoundException | SQLException e ){
            return false;
        }
    }
    
    protected void disconnect(){
        try {
            con.close();
        } catch( SQLException e ){}
    }
}

Em seguia crio uma classe que herdará esses atributos e métodos. Primeiro, vamos supor que tenhamos uma classe de modelo "Pessoa":

class Pessoa {
    
    private int ID;
    private String name;

    /* Getters & Setters */
}

Então a classe DAO para esse modelo ficaria assim:

import java.sql.SQLException;

/* Herda os atributos e métodos de DataAccess */
public class DataAccessPessoa extends DataAccess {
    
    /* Um exemplo para inserir um usuário no banco... */
    public boolean insert( Pessoa p ){
        boolean success = false;
        if( connect() ){ /* se o método de conexão retornar true */
            try {
                /* Monta a 'query', por exemplo */
                stm = con.prepareStatement("insert into pessoa values(?,?)");
                stm.setInt( 1, p.getID() );
                stm.setString( 2, p.getName() );
                /* Executa a query */
                stm.executeQuery();
                /* Se a linha acima funcionar (sem gerar uma exceção), a variável
                'success' recebe valor true (para retornarmos e informar que ocorreu
                tudo certo).*/
                success = true;
            } catch (SQLException e){}
            finally {
                /* Independente de ter dado ou não certo, fazemos a desconexão */
                disconnect();
            }
        }
        /* retornamos se houve sucesso ou falha no insert */
        return success;
    }

    /* outros métodos: update, delete, select */
}

É claro, existem outras formas. Esse é um modo, o qual utilizo.

Espero que seja útil.

 

Muito bem explicado, porém, neste exemplo você está conectando ao BD Oracle, no caso do SQL Server, eu apenas devo trocar o endereço do JDBC e do Driver?

 

Outra rápida dúvida, neste trecho:

 

 

stm.setInt( 1, p.getID() );
stm.setString( 2, p.getName() );

o que são os valores 1 e 2?

 

Valeu rnxn

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, basta baixar o jdbc e importar o arquivo .jar no seu projeto.

E ai você vai ter que escrever as querys de acordo com a sintaxe do sgbd que está usando.

 

Quanto aos valores, é a posição que ele deve substituir o "?" na query. Exemplo:

 

"insert into pessoa values(?,?)"

stm.setInt(2, "alguma coisa"); /* ele vai substituir o segundo "?" por "alguma coisa"

É mais seguro escrever dessa forma ao invés de algo assim:

String info = "alguma coisa";
String query = "insert into pessoa values" + 1 + "' + info + '";

O Exemplo acima é bem básico, mas imagine uma query mais complexa. Se esquecer uma aspa simples, a sintaxe ta errada e não funciona como esperado...

 

Usando preparedStatement você não precisa se preocupar com isso, basta usar o método correspondente àquele tipo de dado que você está inserindo.

 

setInt();

setString();

setBlob();

setBytes();

setLong();

setTime();

etc...

 

http://pt.stackoverflow.com/questions/5901/%C3%89-melhor-parametrizar-seu-preparedstatement-mesmo-que-o-valor-seja-fixo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.