Exemplo de PreparedStatement

Olá Pessoal,

To com um grande problema li uma vez aqui que era melhor trabalhar com PreparedStatement, e comecei a estudar só que tem hora que funciona e tem hora que não funciona, será que alguém poderia me dar um exemplo usando preparedStatement ou mesmo me indicar algum tutorial, eu já li no Deitel e lá não encontrei nada, a baixo eu motro um exemplo de um método que eu crieie

private void insereDadosGeral(Medidas medidas, Amostra amostra, String sql){
try{
PreparedStatement prst = con.prepareStatement(sql);
st = prst;
prst.setDate(1, new java.sql.Date(amostra.getIdent().getDataEntrevista().getTime()));
prst.setDate(2, new java.sql.Date(amostra.getIdent().getDataNascimento().getTime()));
prst.setString(3, amostra.getIdent().getNaturalidade());
prst.setString(4, amostra.getIdent().getCursoSetor());

}catch(Exception e){
System.out.println("Erro: " + e);
}

Desde já agradeço

Marcelo Logan

try{	
	// cria um preparedStatement
	PreparedStatement stmt = con.prepareStatement("insert into contatos (nome,email,endereco) values (?,?,?)");

	// preenche os valores
	stmt.setString(1, “xxx”);
	stmt.setString(2, “contato@xxx.com.br”);
	stmt.setString(3, “R. xxxx 12”);

	// executa
	stmt.execute();
	stmt.close();

	System.out.println("Gravado!");

	con.close();

} catch (SQLException e) {
	 e.printStackTrace();
}
1 curtida

Um bom exemplo de query:

try {
            Vector vCadastros = new Vector();
            conn = ConnectionManager.getConexao();
            stmt = conn.createStatement();
            rs = stmt.executeQuery(SELECT_ALL_QUERY);

            while (rs.next()) {

            	int id = rs.getInt("id");
                String nome = rs.getString("nome");
                String dataNasc = rs.getString("dataNasc");
                String sexo = rs.getString("sexo");
                double rg = rs.getFloat("rg");

 Cadastro p = new Cadastro(id, nome, dataNasc, sexo, rg);
                vCadastros.add(p);
            }
            CatalogoCadastros catalogo = new CatalogoCadastros(vCadastros);
            return catalogo;
catch{

(...)

Quando vc precisar de exemplos java em outras ocasiões, um bom site é o

[]´s
Rodrigo

Boas, realmente este tópico ajuda-me um pouco. Mas não vai ao encontro das minhas espectativas.
O que eu queria era ter de evitar a parte de preparar o stmt.

// preenche os valores  
    stmt.setString(1, ?xxx?);  
    stmt.setString(2, ?contato@xxx.com.br?);  
    stmt.setString(3, ?R. xxxx 12?);  

o código que tenho é este e serve de base a todas as minhas outras classes.

package ConnectionDataBase;

/**
 * @author Tiago Agostinho
 * @version V 2.0
 * */
import java.sql.*;

public class sqlQuerys {

    private Statement stmt = null;
    private ResultSet rs = null;
    private int res;
    private ConectBD con;

    /**
     * @param DB - Nome da Base de Dados
     * @param user - Username de acesso a Base de Dados
     * @param pass - Password de acesso a Base de Dados
     * */
    public sqlQuerys(String DB, String user, String pass){
        con = new ConectBD(DB, user, pass);
    }

    /**
     * @param sql - Recebe a String sql para fazer o insert na Base de Dados
     * @return Retorna o numero de linhas inseridas
     * @throws
     * */
    public boolean insert(String sql, String[] arg1) throws SQLException {
    	
    	PreparedStatement stmt = con.getConection().prepareStatement(sql, arg1);
    	
    	boolean res = stmt.execute();
    	stmt.close();
    	
    	return res;
    	//Obter um statement
        //Statement stmt = con.getConection().createStatement();

        //executar o comando de Update seguido de um select
        //res = stmt.executeUpdate(sql);
    }

    /**
     * @param sql - Recebe a String sql para fazer o delete na Base de Dados
     * @return Retorna o numero de linhas deletadas
     * @throws
     * */
    public int delete(String sql) throws SQLException {

        //Obter um statement
        Statement stmt = con.getConection().createStatement();

        //executar o comando de Update seguido de um select
        res = stmt.executeUpdate(sql);

        stmt.close();

        return res; // false

    }

    /**
     * @param sql - Recebe a String sql para fazer o select a Base de Dados
     * @return Retorna o ResultSet com os dados pretendidos
     * @throws
     * @see Also ResultSet
     * */
    public ResultSet select(String sql) throws SQLException {

        stmt = con.getConection().createStatement();

        rs = stmt.executeQuery(sql);

        return rs;
    }

    /**
     * @param sql - Recebe a String sql para fazer o update na Base de Dados
     * @return Retorna o numero de linhas que foram alteradas
     * @throws
     * */
    public int update(String sql) throws SQLException {
        //Obter um statement
        Statement stmt = con.getConection().createStatement();

        //executar o comando de Update seguido de um select
        int result = stmt.executeUpdate(sql);

        stmt.close();

        return result;
    }

    /**
     * return Retorna a conec��o � base de dados
     * @see Also Connection
     * */
    public Connection getConection() {
        return con.getConection();
    }

    /**
     * @throws
     * @since Liberta o Statement, permitindo optimiza��o de espa�o
     * @see Statement
     * */
    public void freeStatement() throws SQLException {
        stmt.close();
    }

    /**
     * @throws
     * @since Liberta o ResultSet, permitindo optimiza��o de espa�o
     * @see ResultSet
     * */
    public void freeResultSet() throws SQLException {
        rs.close();
    }

    /**
     * @throws
     * @param url - Recebe o URL de liga��o � base de dados
     * @since Abre a connec��o � base de dados, <br>
     * 		permitindo que a aplica��o comunique com a interface
     * */
    public void open() {
        con.open();
    }

    /**
     * @throws
     * @since Fecha a connec��o a base de dados,permitindo optimiza��o de espa�o
     * */
    public void close() {
        con.close();
    }

     public void testConect() {

        open();
        close();

    }
}

Use o Spring.

Leia o capitulo 2 da apostila FJ-21 da caelum que fala sobre JDBC a apostila é free
Todos os exemplos usam o preparedStatement
www.caelum.com.br a

[quote=tmagostinho]Boas, realmente este tópico ajuda-me um pouco. Mas não vai ao encontro das minhas espectativas.
O que eu queria era ter de evitar a parte de preparar o stmt.
[/quote]

Sua classe pode ser um Data Access Object. Porém, sua expectativa será meio frustrada, pois sempre-se deve preparar a statement se você está trabalhando direto com JDBC.

Você pode utilizar biblitecas como o Hibernate para uma solução mais “completa” de base de dados, ou algo como o Apache Commons-DBUtils para ajudar na parte da execução das queries.
5
Mas, LEMBRE-SE, sempre que trabalhar direto com base de dados, você tem de dar close em TUDO que abriu. Algo como, nos finally:

[code]try {

} catch (SQLException e) {
//tratar exception
} finally {

		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException sqle) {
				logger.debug("SQLE on close", sqle);
			}
		}
		if (ps != null) {
			try {
				ps.close();
			} catch (SQLException sqle) {
				logger.debug("SQLE on close", sqle);
			}
		}
		if (c != null) {
			try {
				c.close();
			} catch (SQLException sqle) {
				logger.debug("SQLE on close", sqle);
			}
		}
	}

}[/code]

Isso libera os recursos tanto no seu programa, quanto no servidor.

No seu código, seja educado: feche tudo o que abriu. Se não fechar, explicite bem o motivo de não fechar e o fato no seu java doc!!

Quero pedir desculpa pela minha ausência aqui no forum, mas por motivos diversos não foi possível estar cá!
Eu vou então ler a apostilha recomendada.
Espero então depois conseguir optimizar a pesquisa pois está a começar a ficar muito lento. :S

Mais uma vez obrigado pela vossa atenção!