Bom dia,
Estou precisando de uma ajuda para criar um “insert” com “PreparedStatement”.
Tenho a classe de conexão abaixo e nela adicionei um método PreparedStatement para executar a String sql enviada.
package util;
import java.sql.Connection;
//import java.sql.DriverManager;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class ConexaoUtil {
private Connection conexao;
public ConexaoUtil() {
conexao = abreConexao();
}
private Connection abreConexao() {
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/bdxxx");
return ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Não foi possivel abrir a conexao", e);
}
}
public PreparedStatement prepareStatement(String sql) throws SQLException {
PreparedStatement preparedStatement = conexao.prepareStatement(sql);
preparedStatement.executeUpdate();
return preparedStatement;
}
public void fechaConexao() {
try {
conexao.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Na outra classe que deveria chamar o método preparaStatment que criei com os dados, não estou conseguindo executar.
package servletsBiblioteca;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import dto.BibliotecaDto;
import util.ConexaoUtil;
public class Biblioteca {
public void insert(BibliotecaDto biblioteca) {
ConexaoUtil c = new ConexaoUtil();
try{
PreparedStatement st = c.prepareStatement("insert into leyes " +
"(data," +
"jerarquia," +
"nbr_ley," +
"fecha_ley," +
"pais," +
"ambito," +
"idioma," +
"vigencia," +
"texto_descriptivo," +
"texto_complementario," +
"notas," +
"dt_cadastro," +
"nm_cadastro)values " +
"(?,?,?,?,?,?,?,?,?,?,?,?,?)");
st.setDate(1, c.toSqlDate(biblioteca.getDt_cadastro()));
st.setString(2,biblioteca.getJerarquia());
st.setInt(3,biblioteca.getNbr_ley());
st.setDate(4,c.toSqlDate(biblioteca.getFecha_ley()));
st.setInt(5,biblioteca.getId_pais());
st.setString(6,biblioteca.getAmbito());
st.setString(7,biblioteca.getIdioma());
st.setString(8,biblioteca.getVigencia());
st.setString(9,biblioteca.getTexto_descriptivo());
st.setString(10,biblioteca.getTexto_complementario());
st.setString(11,biblioteca.getNotas());
st.setDate(12,c.toSqlDate(biblioteca.getDt_cadastro()));
st.setInt(13,biblioteca.getNm_cadastro());
} catch (Throwable e) {
e.printStackTrace();
} finally {
c.fechaConexao();
}
}
}
Quando eu chamo o método “c.prepareStatement” sempre pede para eu alterar para int.
Acredito que não está certo, o que estou fazendo de errado?
Alguém poderia me dar uma ajuda para corrigir meus erros?
Marcos