zu viele offene Cursor, die II.

Status
Nicht offen für weitere Antworten.

Evolver

Bekanntes Mitglied
Ich hatte schon mal ein Problem mit zu vielen offenen Cursor: http://www.java-forum.org/de/viewtopic.php?t=56892&highlight=

Ich dachte, das Problem sei so gelöst, da ich keine Probleme mehr hatte, nun sind sie aber wieder da. Also ich muss haufenweise Sachen in meine Oracle-DB einfügen, und benutze immer den folgenden Code:
Code:
	public static boolean executeSQLStatement(String pStatement, boolean pTrace)
	{
		try {
			if(mDBCon==null || mDBCon.isClosed()) return false;
			if(pTrace) System.out.println(pStatement);
			Statement tInsertionStatement = mDBCon.createStatement();
			tInsertionStatement.executeQuery(pStatement).close();
			tInsertionStatement.close();
		}	
		catch(SQLException pExc) {
			System.out.println("ERR: Fehler beim Datenbankzugriff.");
			pExc.printStackTrace();
			return false;
		}
		return true;
	}
Eigentlich schließe ich doch hier immer alles direkt wieder, was ich zuvor geöffnet habe. Übersehe ich hier etwas? Wo kommen die ganzen übrigen offenen Cursor her?
 
M

maki

Gast
Bekommst du diese Ausgabe oft?
ERR: Fehler beim Datenbankzugriff.
Du schliest as Statemnt nur, wenn die Ausführung erfolgreich war.

Ansonsten noch ein paar Anmerkungen (diese Dinge verursachen zwar nicht dein Problem, aber trotzdem):
Code:
if(mDBCon==null || mDBCon.isClosed()) return false; 
..
return false; 
..
Eigentlich sollte hier eine Exception geworfen werden, zumindest wenn man OO Programmiert.

Code:
if(pTrace) System.out.println(pStatement);
Es gibt mehr als genug Logging Frameworks, alle davon sind einfach zu erlernen, die meisten davon sind besser als alles was du selbst schreiben kannst, zB log4j.

Code:
pStatement
..
pTrace
..
mDBCon
Das verstösst gegen die Java Code Conventions, anders gesagt: So schreibt man nicht in Java ;)
 

semi

Top Contributor
Verwende auch executeUpdate, nicht executeQuery, wenn du Update-Statements ausführst.
Ansonsten immer nach folgendem Schema vorgehen
Code:
try
{
   // Connection holen
   // Statement erzeugen
   // Update(s) ausführen
}
catch(SQLException e)
{
   // Fehler loggen und, wenn machbar, Fehlerbehandlung
   // sonst Fehler als eigene Exception mit mehr Details werfen. 
}
finally
{
   // Statement schliessen, wenn geöffnet und nicht null
   // Connection schliessen, wenn geöffnet und nicht null
}
 

Evolver

Bekanntes Mitglied
@maki:
Was stört dich an pStatement, pTrace und mDBCon ?

Zum Problem:
Ja es stimmt, Statements werden nur geschlossen wenn die Ausführung erfolgreich war. Das muss ich ändern. Aber in meine Test war die Ausführung vorher immer richtig (es wurdem mir kein Fehler ausgegeben, die DB-Einträge sind vorhanden), also sollte alles geschlossen worden sein.
Edit: Ich denke ich habe den Fehler gefunden. An anderer Stelle hatte ich noch Abfragen, der Statement nicht geschlossen wurde. Muss ich nur noch teste, aber ich bin zuversichtlich.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Wie mit zu viele Daten umgehen? Datenbankprogrammierung 2
K Viele verschiedenen SQL Abfragen Datenbankprogrammierung 2
I MySQL Hibernate zu viele Queries Datenbankprogrammierung 2
M Warum ist es suboptimal viele Indexe auf eine Datenbanktabelle zu setzen? Datenbankprogrammierung 4
J viele @Lob (Strings) mit JPA Datenbankprogrammierung 2
O Viele Verbindungen-Exception bei insert Daten zur MySQL-Datenbank Datenbankprogrammierung 2
J In viele verschiedene Datenbanken einfügen Datenbankprogrammierung 3
ARadauer viele datensätze. Datenbankprogrammierung 3
C Programm baut zu viele MySQL Verbindungen auf Datenbankprogrammierung 4
M JDBC: Viele Datensätze in Tabelle einfügen: Wie? Datenbankprogrammierung 7
H Wie viele SQL-Statements gehen in ein Batch Datenbankprogrammierung 2
A Viele Abfragen auf einmal: Performance Datenbankprogrammierung 2
S Viele Klassen sollen eine Connection benutzen Datenbankprogrammierung 3
A Maximale Anzahl offener Cursor überschritten Datenbankprogrammierung 5
S SQLite Selectanfrage lieft datensatz aber cursor ist leer Datenbankprogrammierung 2
Y java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state Datenbankprogrammierung 2
K DB2 Mit Cursor auf die DB Datenbankprogrammierung 19
A Maximale Anzahl offener Cursor überschritten Datenbankprogrammierung 4
C Stored Procedure - Cursor Datenbankprogrammierung 2
R SQL Exception: Cursor position not valid Datenbankprogrammierung 7
S Datenbank zugriff optimieren - zugriff ohne cursor? Datenbankprogrammierung 7
E Maximale Anzahl offener Cursor Datenbankprogrammierung 9
L Invalid cursor state Datenbankprogrammierung 9
A Maximale Anzahl offener Cursor erreicht Datenbankprogrammierung 3
J Derby Cursor Problem Datenbankprogrammierung 2
märliprinz JDBC Cursor Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben