Tenho mais de 15 mil registro para incluir no meu banco, isso todos os dias…criei uma rotina para fazer isso, mais acho que esta demorando de mais, vcs sabem uma forma q o desempenho seja melhor?
[code]private void insertDestiny(List<CreditLimit> ls)throws SQLException{
oracleConn = mngt.getConnection(DB_NAME.ORACLE_DEV);
PreparedStatement pstmt = null;
for(int i=0; i < ls.size(); i++){
CreditLimit vo = ls.get(i);
String teste = INSERT_ALL + "" + vo.getAscCode() + ',' + vo.getCreditLimit() + ")";
pstmt = oracleConn.prepareStatement(teste);
pstmt.addBatch();
pstmt.executeBatch();
}
pstmt.close();
oracleConn.close();
}[/code]
Você está utilizando os objetos certos da maneira errada.
Veja aqui um exemplo de como poderia fazer:
http://www.guj.com.br/16204-como-inserir-varios-registros-no-mysql-em-um-so-insert#answer-22046
Duas coisas que deve notar:
- Não concatene os valores na query, use parâmetros e ? na query
- Não adianta usar addBatch e executeBatch em seguida, agrupe em grupos vários addBatch, para depois executar.
[code]
//Use parâmetros nas suas queries. Isso evita injeção de dependências, ter que formatar dados e erros
//caso tenha um apóstrofe nos meios dos dados
private static final INSERT INTO TB_CM_CREDIT_LIMIT_EXP (ASC_CODE,CREDIT_LIMIT_EXP) VALUES (?,?)";
//Define o tamanho do batch - de quantos em quantos registros chamaremos o executeBatch()
private static final int BATCH_SIZE = 50;
private void insertDestiny(List<CreditLimit> ls)throws SQLException{
//Use o try with resources para garantir que a conexão e o statement serão fechados
try (
Connection oracleConn = mngt.getConnection(DB_NAME.ORACLE_DEV);
PreparedStatement pstmt = oracleConn.prepareStatement(teste)
) {
int batch = 0;
//Com for each fica mais legível, e não terá impacto
//de performance se lista for um LinkedList
for(CreditLimit vo : ls){
//É assim que se define os parâmetros
pstmt.setInt(1, vo.getAscCode());
pstmt.setDouble(2, vo.getCreditLimit());
pstmt.addBatch();
//Chamamos execute batch a cada BATCH_LIMIT registros inseridos
if (++batch == BATCH_LIMIT) {
pstmt.executeBatch();
batch = 0;
}
}
//Para garantir que os últimos registros também serão adicionados
pstmt.executeBatch();
}
}[/code]