Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Java e Oracle

  1. #1

    Java e Oracle

    Salve,
    ho un piccolo problemino.
    Ho realizzato un'applicazione che deve fare circa 50000 operazioni di insert o update su oracle.
    L'applicazione funziona ma oracle non rilascia i cursori aperti e dopo un pò scoppia.
    Io ho alzato al massimo il parametro "open_cursors", ma non mi piace come soluzioni.

    C'è un modo per chiudere questo cursori senza chiudere la connessione con java ( conn.close() );

    Grazie

  2. #2
    i cursori vanno SEMPRE chiusi dopo averli usati, insieme ai ResultSet e ad eventuali statement.Basta invocare il close() sui vari oggetti.
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  3. #3
    Originariamente inviato da ivenuti
    i cursori vanno SEMPRE chiusi dopo averli usati, insieme ai ResultSet e ad eventuali statement.Basta invocare il close() sui vari oggetti.
    Operazioni che gia faccio, ma i cursoracci restano lì fin quando non faccio la close sulla connection!!!!

    E' questo il problema

  4. #4
    posta il codice. Secondo me non chiudi tutto, ma non resta che guardare la parte di codice "incriminata"...
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  5. #5
    Originariamente inviato da ivenuti
    posta il codice. Secondo me non chiudi tutto, ma non resta che guardare la parte di codice "incriminata"...
    Mi indicheresti come postare il codice formattato in maniera comprensible?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Originariamente inviato da Ginus
    Mi indicheresti come postare il codice formattato in maniera comprensible?
    Guarda il regolamento del forum

    Comunque per il codice mettilo tra i tag (code) e (/code) con le parentesi quadre al posto delle tonde. E copialo dal tuo IDE formattato, indentato, con indentazione a spazi e non a tabulazioni (proprio per fare i fini )
    al volante son nervoso

  7. #7
    codice:
    	while (rsExt.next())
    				{   java.sql.Timestamp da_data = PKG_TOOLS_REPORT.addHour(rsExt.getTimestamp(3),-8);
    					java.sql.Timestamp a_data  = PKG_TOOLS_REPORT.addHour(rsExt.getTimestamp(3),-1);
    					
    					
    					PreparedStatement cur_int = conn.prepareStatement("SELECT ulia.id_ul,mis.valore,mis.id_ems,u.simbolo FROM gmp_misure mis,gpi_base gp, ems,ulia,dim_time t,genesi gen,stakeholder st,fonte_data_set fds,data_set dts,ods_smr_sorgente ods,um_base u WHERE ems.id_ems=mis.id_ems and ulia.id_ul=mis.id_ul  and mis.id_ul = ? and mis.id_dim_time = t.id_dim_time and t.descrizione between ? and ? and ems.codice=? and mis. id_gpi_base= gp.id_gpi and gp.codice= ? and gen.id_genesi=mis.id_genesi  and gen.descrizione=? and fds.id_fonte = dts.id_fonte and dts.id_data_set = ods.id_dataset and ods.id_ods_smr= mis.id_fonte and st.codice=? and mis.id_um_base=u.id_um_base");
    					java.sql.Date z;
    					java.sql.Date y;
    					cur_int.setInt      (1,rsExt.getInt(1));
    					cur_int.setTimestamp(2,da_data);
    					cur_int.setTimestamp(3,a_data);
    					cur_int.setString   (4,par_ems);
    					cur_int.setString   (5,estr_cod_gpi);
    					cur_int.setString   (6,par_gen);
    					cur_int.setString   (7,par_fon);
    					
    					ResultSet rsInt = cur_int.executeQuery();
    					
    					double somma = 0;
    					int conta = 0;
    					int id_ems =0;
    					String valore ="";
    					while (rsInt.next())
    					{  
    						/*codice media mobile*/
    						if (funz_base.isNumber(rsInt.getString(2)))
    						{
    							valore = funz_base.normalizza(rsInt.getString(2),par_ems,rsInt.getString(4),3);
    							somma += Double.parseDouble(valore);
    							conta++;
    						}
    						id_ems = rsInt.getInt(3);
    					}// fine cursore interno
    					    
    					
    					if (conta != 0){
    						double media  = funz_base.arrotonda(somma/conta,3);
    						
    						String ok="";
    						if (((conta/range_mobile)*100)<75)
    							ok = "N";
    						else
    							ok = "Y";
    							
    				         PreparedStatement update = conn.prepareStatement("update GMP_MISURE set valore= ?,IS_VALID= ? where ID_GENESI= ? and ID_UL= ? and ID_DIM_TIME= ? and ID_EMS= ? and ID_GPI_BASE= ?");
    				         update.setString(1,Double.toString(media).replaceAll(",","."));
    				         update.setString(2,ok);
    				         update.setInt   (3,var_gens_ins);
    				         update.setInt   (4,rsExt.getInt(1));
    				         update.setInt   (5,rsExt.getInt(2));
    				         update.setInt   (6,id_ems);//ems id
    				         update.setInt   (7,var_ins_gpi);
    				         
    				         System.out.println("Update "+rsExt.getInt(1)+" data "+rsExt.getInt(2));
    				         
    	         			int up = update.executeUpdate() ;
    	         			update.close();
    	
    				         	if (up ==0){
    				         							System.out.println("Insert"+rsExt.getInt(1)+" data "+rsExt.getInt(2));
    				         							PreparedStatement insert = conn.prepareStatement ("INSERT INTO gmp_misure(id_gmp_misure,id_genesi,id_ul,uli_id_ul,id_dim_time,id_ems,id_fonte,id_um_base,ost_id,valore,id_gpi_base,id_dett_doc,vers_ope,is_valid) values(seq_gmp.nextval,?,?,null,?,?,?,?,null,?,?,null,null,?)");	
    				         							insert.setInt   (1,var_gens_ins);	
    				         							insert.setInt   (2,rsExt.getInt(1));
    				         							insert.setInt   (3,rsExt.getInt(2));
    				         							insert.setInt   (4,id_ems);//id ems
    				         							insert.setInt   (5,var_id_fonte);
    				         							insert.setInt   (6,var_num);
    				         							insert.setString(7,Double.toString(media).replaceAll(",","."));
    				         							insert.setInt   (8,var_ins_gpi);
    				         							insert.setString(9,ok);
    				         							
    				         							insert.executeQuery();
    				         							insert.close();
    				         				}
     
    				  	rsInt.close();
    					cur_int.close();
    					}
    				}// fine curr esterno
    				rsExt.close();
    				cur_ext.close();

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.