HSQLDB Mehrere PreparedStatements ausführen

Supra

Bekanntes Mitglied
Gibt es eine möglichkeit mehrere ( unterschiedliche!) abfragen (PreparedStatements) auszuführen, ohne den großen aufwand? In meinen Falle müsste ich ja jetzt 4 mal
Java:
.excuteUpdate();
und 4 mal eine
Java:
.close(...)
funktion benutzen. Das geht doch sicherlich einfacher oder? habe schon was von addbatch gehört, aber noch kein Gutes beispiel gesehen.
 
Zuletzt bearbeitet:
Üblicherweise solltest du einen JDBC-Treiber mit Pooled-Connection verwenden.

Dann closed() du zwar eine Verbindung, aber wird diese intern "nur" an den Pool zurück gegeben und kann gleich wieder benutzt werden ohne den langsamen Aufbau einer Verbindung zur DB.

Der Vorteil von Prepared-Statements ist ja, dass du einen SQL-Befehl hast und dieses über verschiedene Parameter "fütterst".

Und letztendlich kommt da natürlich ein Resultset zurück, das du verarbeiten musst. Daher findest du auch keine Beispiele im Netz, wo via Batching Abfragen ausgeführt werden. Gute Beispiele sind hier beim Einfügen/Löschen/Update von Datensätzen, wo halt Prepared-Statements gut gebraucht werden können.

Aber vier verschiedene Abfragen gibt halt auch vier verschiedene Resultsets...

Wenn dich der Code-Aufwand stört, nutze eine Bibliothek, die dieses weitestgehend übernimmt.
 
Hall Supra,

ja die Möglichkeit gibt es und zwar hat die Klasse PreparedStatement die methode

Java:
.addBatch()

damit wird dein fertiges PreparedStatement in einem Batch gespeichert

nachdem du mehrer statements in dem Batch gespeichert hast musst du nur noch die

methode

Java:
.executeBatch()

aufrufen , merke es wird ein IntegerArray zurück gegeben.

kleines beispielprogramm:

die Methode die abgebildet wird ist jediglich dazu da , Daten aus einer Datei in die Datenbank Tabelle D zuschreiben.

Java:
private static void insertDataD(Connection con) {
		// Quellcode erstellen
		File f1 = new File("Department.txt");
		
		String sql1 = "Insert into D values(?,?,?)";
		
		try{
		PreparedStatement preparedStatement = con.prepareStatement(sql1);
		int[] x = null;
		
		
				try {
					FileReader fr = new FileReader(f1);
					BufferedReader br = new BufferedReader(fr);
					String zeile;
					while((zeile = br.readLine())!=null){
						String[] parts = zeile.split(";");
						
						preparedStatement.setInt(1, Integer.parseInt(parts[0]));
						preparedStatement.setString(2, parts[1]);
						preparedStatement.setString(3, parts[2]);
						preparedStatement.addBatch();
						
						
						
					}
					
					
					br.close();
					fr.close();
					
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					System.out.println("insertDataD fehlgeschlafen Datei nicht gefunden " +e.getMessage());
				} catch(IOException e){
					
				}
		x  = preparedStatement.executeBatch();
		System.out.println("Daten in D eingefüllt");
		
		
		
		
		
		
		}catch(SQLException sqle){
			System.out.println("Fehler insertDataD sql" + sqle.getMessage());
		}
		
		
		
	}


Gruß Snow
 

Neue Themen


Zurück
Oben