HSQLDB Inserts/Updates sind nach Neustart der Anwendung

golliwogg

Mitglied
Hallo,

bin Neuling in Java und DB und plage mich mit einem seltsamen Effekt beim Herumspielen mit DML: warum werden trotz Autocommit und einem zusätzlich von mir explizit gesetzten Commit die Änderungen nur während der Programmlaufzeit übernommen? Wenn ich mit dem HSQL DB Manager arbeite passiert das nicht. Hier der Code-Auszug:

Java:
		try {
			Statement stmt = conn.createStatement();
			String query = "SELECT * FROM \"test\"";
			ResultSet rs = stmt.executeQuery(query);
			while (rs.next()) {
				System.out.println(rs.getInt("tst_id") + "\t"
						+ rs.getString("tst_name") + "\t");
			}
			rs.close();
			stmt.close();

			String update = "UPDATE \"test\" SET \"tst_name\"=? WHERE \"tst_id\"=?";
			PreparedStatement stmtIU = conn.prepareStatement(update);
			stmtIU.setString(1, "Otto Sheuffele");
			stmtIU.setInt(2, 2);
			stmtIU.executeUpdate();
			conn.commit();
			stmtIU.close();
	
			// Kontrolle:
			stmt = conn.createStatement();
			query = "SELECT * FROM \"test\"";
			rs = stmt.executeQuery(query);
			while (rs.next()) {
				System.out.println(rs.getInt("tst_id") + "\t"
						+ rs.getString("tst_name") + "\t");
			}
			rs.close();
			stmt.close();	
			
		} catch (SQLException e) {
			System.err.println("SQL-Fehler!");
			System.err.println(e);
			System.exit(-1);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

Das Select am Schluss beweist, dass das Update ordnungsgemäß ausgeführt wurde. Lasse ich das Programm nochmal laufen, dann sind aber die alten Daten wieder da!

Vielen Dank für jeden Tipp & schönen Gruß, Volker
 
Habe herausgefunden, dass die Änderungen erst mit einem Shutdown in die DB geschrieben werden. Davor stecken sie wohl noch im Cache der Anwendung drin.

Java:
		if (conn != null) {
			try {
				PreparedStatement stmt=conn.prepareStatement("shutdown");
				stmt.executeUpdate();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		System.exit(0);
 

Zurück
Oben