Oppure

Loading
11/02/10 10:14
symonx80
Ciao,
ho un semplice programma java che esegue una connessione ad un db oracle e effettua delle select su di esso.
Il programma dopo un poò che in runtime si interrompe con il seguente errore

java.sql.SQLException: Resultset esaurito

e non ne capisco il motivo.

Uso sempre lo stesso oggetto Connection . Uso un oggetto Statement stmt che chiudo ogni volta che termino di lavorare sulla query e resultSet differenti per ogni query, resulSet che chiudo insieme all'oggetto Statement al termine delle operazioni.
Devo scorrere un migliaio direcord ma dopo circa 300 l'elaborazione si interompe con quel messaggio.
Dove sbaglio?


Allego il codice

public static void main(String [] args){

		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		PreparedStatement prep = null;
		
		ResultSet rsRecuperaUtente = null;
		ResultSet rsDatiRagSociale = null;
		ResultSet rsDatiConsumo = null;
		ResultSet rsImportoConsumo = null;
		ResultSet rsDatiTestata = null;
		ResultSet rsDatiDettaglio = null;
		
		PrintStream ps = null;
		

		
		//Connessione al database Oracle
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		
			// Create a connection to the database
			String serverName = "##########";
			String portNumber = "1521";
			String sid = "####";
			String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
			String username = "###";
			String password = "###";
			con = DriverManager.getConnection(url, username, password);


			//apro il file su cui andare a srivere
			..........................
			.....................................


			stmt = con.createStatement();
			rs = stmt.executeQuery("SELECT U23C_BOL FROM KK_TESUTF2");
			int contaBollette = 0;
			
			while (rs!=null && rs.next()) {
				
    			String numBolletta = rs.getString("U23C_BOL");
    			ps.print("................................
    			contaBollette++;
    			
    			
    			stmt = con.createStatement();
    			rsRecuperaUtente = stmt.executeQuery("select u32c_ute from KK_TESUTF2 where u23c_bol='" + numBolletta +"'");
    			rsRecuperaUtente.next();
    			int codUtente = rsRecuperaUtente.getInt("u32c_ute");
    			stmt.close();
    			rsRecuperaUtente.close();
    			
    			
    			stmt = con.createStatement();
    			rsDatiRagSociale = stmt.executeQuery("select ac_rg_cli from ce_an_clie where ac_c_cli='" + codUtente + "'");
    			rsDatiRagSociale.next();
    			ps.print.........................
    			stmt.close();
    			rsDatiRagSociale.close();
    			
    			stmt = con.createStatement();
    			rsDatiTestata  = stmt.executeQuery("select * from KK_TESUTF2 where u23c_bol='" + numBolletta +"' ");
    			rsDatiTestata.next();
    			ps.print(rsDatiTestata.getString("U92DE_VIA") +  "	" + rsDatiTestata.getString("U13C_N_CIV") + "	");
    			ps.print(rsDatiTestata.getString("U92C_CAP") +  "	" + rsDatiTestata.getString("U92C_S_CAP")+  "	" + rsDatiTestata.getString("U92DE_LOCA"));
    			String dataIn = ............
    			String dataFn = .................
    			String dataEmis = .....................
    			ps.print................................................................
    			ps.println("");
    			stmt.close();
    			rsDatiTestata.close();
    			
    			stmt = con.createStatement();
    			rsDatiConsumo = stmt.executeQuery("select (U21Q_L_ATU - U21Q_L_PRE) from ut_bl_cont where u21c_bol = '" + numBolletta +"'");
    			rsDatiConsumo.next();
    			ps.print("....................................................
    			stmt.close();
    			rsDatiConsumo.close();
    			
    			stmt = con.createStatement();
    			rsImportoConsumo = stmt.executeQuery("SELECT U22C_BOL, U22C_IVA, U22C_A_IVA,  SUM(U22VALONUM_E), U22IMIMPOS_E FROM KK_DETUTF2 WHERE U22C_BOL='" + numBolletta + "' and U18DE_VCE like 'IMPORTO GAS%' group by U22C_BOL, U22C_IVA, U22C_A_IVA, U22IMIMPOS_E");
        			if (rsImportoConsumo!=null) {
    				rsImportoConsumo.next();
    				double impConsumo = rsImportoConsumo.getDouble(1);
    			}	
    			
    			stmt.close();
    			rsImportoConsumo.close();


			}

		
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			ps.close();
		}
	}

Ultima modifica effettuata da symonx80 11/02/10 10:16
aaa
11/02/10 18:27
netarrow
Il metodo next ritorna un boolean, dovresti quindi fare un controllo per verificare se ci sono o non ci sono altre righe da poter leggere.

Se tu vai avanti a prescindere ti lancia un'eccezione.
aaa
16/02/10 11:40
symonx80
Si grazie, infatti con un while al posto dell'if ho risolto per il meglio
aaa