Fechar conexão com o banco Oracle

Pessoal tenho um pequeno app que conecta no Oracle, faz um laço for e vai inserindo dados no banco, após ele faz um close() para fechar a conexão. O DBA da minha empresa está reclamando que enquanto estou executando o app fico com muitas conexões no banco, se eu abrir e fechar a cada conexão no laço for o app fica muito lento, tem algum meio de por exemplo montar vários insert´s e fazer um commit de uma só vez no final para evitar ficar com muitas conexões no banco?

vc deve estar abrindo um monte de conexões!!! posta o codigo ae!!

Velho, use a execucao a execucao em batch fornecido pelo preparedstatement.

 for(int i=0;i<100;i++){
   ps.addBatch(sql);
 }
   ps.executeBatch();

Alberto

Olha o meu código ae:

package controleweb;

import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import jxl.Cell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;



/**
 *
 * @author petter
 */
public class Recebidos {
    
    private static Connection conn;
    private static int i = 0;
    private static String stringa1;
    private static String stringb2;
    private static double douc3;
    private static String stringd4;
    private static String stringe5;
    private static String stringf6;
    private static String stringg7;
    private static String stringh8;
    private static String stringi9;
    private static String stringj10;
    private static String stringl11;
    private static int intm12;
    private static int resultado;
    private static String normalizeIP;
    private static int rs2;
    private static int rs3;
    
    public static String normalizeIP (String ip) throws UnknownHostException {
         InetAddress addr = InetAddress.getByName (ip);
         return addr.getHostAddress();
     }
  
    /**
     * Creates a new instance of Enviados
     */
    public static void main(String[] args ) throws IOException, BiffException, 
                                                   ClassNotFoundException, SQLException {
     
     //Dados para a conexão ao banco de dados
      String driverName = "oracle.jdbc.driver.OracleDriver";
      String serverName = "server"; 
      String username = "user"; 
      String password = "senha"; 
      String url = "jdbc:oracle:thin:@"+serverName ;
        
      //Conexão com o banco de dados        
      Class.forName(driverName);
      Connection conn = DriverManager.getConnection(url, username, password);
      
      //Pega o último valor do campo ID para auto-incremento
      Statement stm = conn.createStatement();
      ResultSet rs = stm.executeQuery("select max(ECO_ID) eco_id from email_controle");
      while(rs.next()){
       rs2 = rs.getInt("eco_id");
      }
      
      /* pega o arquivo do Excel */
      Workbook workbook = Workbook.getWorkbook(new File("recebidos.xls"));  
      
      /* pega a primeira planilha dentro do arquivo XLS */
      Sheet sheet = workbook.getSheet(0); 
     
      //Pega a quantidade de linhas da planilha
      int linhas = sheet.getRows();
      
      //Laço para fazer o looping para gravar todas as linhas da planilha
      for(i = 0; i < linhas; i++){
      
      /*Abre novamente a conexão*/
      Class.forName(driverName);
      conn = DriverManager.getConnection(url, username, password);
      
      //Inicia o processamento das linhas com tratamento de exceção.
      try{
      /* pega os valores das células como se numa matriz */
      Cell a1 = sheet.getCell(0,i);
      Cell b2 = sheet.getCell(1,i);
      Cell c3 = sheet.getCell(2,i);
      Cell d4 = sheet.getCell(3,i);
      Cell e5 = sheet.getCell(4,i);
      Cell f6 = sheet.getCell(5,i);
      Cell g7 = sheet.getCell(6,i);
      Cell h8 = sheet.getCell(7,i);
      Cell i9 = sheet.getCell(8,i);
      Cell j10 = sheet.getCell(9,i);
      Cell l11 = sheet.getCell(10,i);

      /* pega os conteúdos das células */
      stringa1 = a1.getContents();
      stringb2 = b2.getContents();
      
      NumberCell nc = (NumberCell) c3;
      douc3 = nc.getValue();
      int intc3;
      intc3 = (int)douc3;
      
      stringd4 = d4.getContents();
      normalizeIP = normalizeIP (stringd4);
      
      stringe5 = e5.getContents();
      stringf6 = f6.getContents();
      stringg7 = g7.getContents();
      stringh8 = h8.getContents();
      stringi9 = i9.getContents();
      stringj10 = j10.getContents();
      stringl11 = l11.getContents();
      intm12 = 2;
      
      //Incrementa o número da ID conforme o último registro pesquisado
      if(rs2 < 1){
           rs2 = 1;
       }else{
           rs2 = rs2 + 1;
           
       System.out.println("Registro atual em gravação: " + i);
       }
      
     /*Executa o insert para inserir os dados no banco de testes MySQL*/     
     PreparedStatement ps = conn.prepareStatement("INSERT INTO EMAIL_CONTROLE(ECO_ID, ECO_DATA," +
          "                                                       ECO_HORA, ECO_TAM, ECO_DE," +
          "                                                       ECO_PARA, ECO_CC, " +
          "                                                       ECO_ASSUNTO, ECO_ANEXO, ECT_ID," +
          "                                                       ECO_IP) "+
          "            VALUES( ? , to_date( ? ,'DD/MM/YYYY'), ? , ? , ? , ? , ? , ? , ? , ? , ? )");
     
     ps.setInt(1, rs2);
     ps.setString(2, stringa1);
     ps.setString(3, stringb2);
     ps.setInt(4, intc3);
     ps.setString(5, stringg7);
     ps.setString(6, stringh8);
     ps.setString(7, stringi9);
     ps.setString(8, stringj10);
     ps.setString(9, stringl11);
     ps.setInt(10, intm12);
     ps.setString(11, normalizeIP);
     ps.addBatch();
     
     //Executa o INSERT.
     ps.executeBatch();
         
     //Exception para tratar o limite de cursores abertos.
     }catch(java.sql.BatchUpdateException bue){
          bue.printStackTrace();
          System.out.println("Limite de cursores máximos atingido. Limpando...");
          conn.close();
          conn = DriverManager.getConnection(url, username, password);
     
     //Exception para tratar campos com dados inválidos.
     }catch(java.lang.ClassCastException cce){
         cce.printStackTrace();
         System.out.println("O campo " + i + " está com o formato inválido!");
         System.out.println("Exceção gerada, passando para o próximo registro.");
     }
     
     //Fecha o laço For
     }
     conn.close();
     workbook.close();
     
     rs3 = rs2 + i;
     
     //Gera mensagens com dados sobre a atualização do banco
     if(linhas == i){
         System.out.println("*************************************************************");
         System.out.println("****** Atualização de utilização de e-mail (recebidos) ******");
         System.out.println("*************************************************************");
         System.out.println("Banco de dados atualizado referente ao dia " + stringa1 + ".");
         System.out.println("Total de registros gravados: " + linhas + ".");
         System.out.println("Registros ID gravados de " + rs2 + " até " + rs3);
         System.out.println("Aplicativo finalizado !");
         System.out.println("");
     }
    }    
}

aqui esta o problema:

//Laço para fazer o looping para gravar todas as linhas da planilha
       for(i = 0; i < linhas; i++){
       
       /*Abre novamente a conexão*/
       Class.forName(driverName);   <== Praque abrir outra conexao???
       conn = DriverManager.getConnection(url, username, password);

pra que vc esta abrindo outra conexao a cada loop???

no “maximo” vc poderia criar uma conn2 do lado de fora do loop e usar ela para fazer o insert, mas nem isso precisaria, usa a primeira conn que tu abriu la em cima experimenta fazer assim:

for(i = 0; i < linhas; i++){
       
       /*Abre novamente a conexão*/
//       Class.forName(driverName);
//       conn = DriverManager.getConnection(url, username, password);   remove isso dai
//       
       //Inicia o processamento das linhas com tratamento de exceção.
       try{

Vixi que mancada a minha, esse trecho era para ter sido removido, agora está tudo explicado. Valeu.