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());
…
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.
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();
}
}
[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:
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