updateXXX() nur mit Primärschlüssel?

Status
Nicht offen für weitere Antworten.

netz-rack.c

Mitglied
Hallo,

ich habe ein Result Set das durch mehrere Joins erstellt wurde. Jetzt versuche ich ein Update an mit updateInt() zu machen. Leider führt das sofort zu einer innerException (das ganze läuft n seinem eigenen Thread, daher (?) bekomme ich auch keine Fehlermeldungen, es funktionier nur nicht).
Natürlich rufe ich rs.updateRow(); am Ende auf.

Beim Debuggen mit Eclipse fiel mir auf, dass, obwohl ich das Result Set mit ResultSet.CONCUR_UPDATABLE erstellt habe, der Wert updateable auf false steht.

Hier einmal der Queltext des Update:

Code:
private void updateWerk(Werk tWerk) throws SQLException{
			int count = 0;
			
			ResultSet rs = getResultFromDB(tWerk.getId(), true);
			
			if(!rs.next())
				throw new SQLException("Updateversuch bei nichtvohandenem Werk!!!");
			
						
			if(!rs.getString("titel").equals(tWerk.getTitel())){
				rs.updateString("titel", tWerk.getTitel());
				count ++;
			}
			
			...
			
			if(rs.getInt("inventar") != tWerk.getInventar()){
				rs.updateInt("inventar", tWerk.getInventar());
				count ++;
			}
			
			
			if(count > 0)
				rs.updateRow();

Die Funktion die das Statement bereitstellt ist in die Umgebende Klasse ausgelagert, da die anderen (lesende / erzeugende) Klassen auch auf das Statement zugreifen können:

Code:
private ResultSet getResultFromDB(int Werk_id, boolean updatable) throws SQLException{
		
		int updateStat;
		if(updatable)
			updateStat = ResultSet.CONCUR_UPDATABLE;
		else
			updateStat = ResultSet.CONCUR_READ_ONLY;
				
		Statement s = Util.getBDB().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, updateStat);
		
		ResultSet rs = s.executeQuery("" +
				" SELECT" +
				"  w.jahr ," +
				"  w.titel ," +
				"  w.breite ," +
				"  w.beschreibung ," +
				"  w.versicherungswert ," +
				"  w.hoehe," +
				"  w.kuenstler_id," +
				"  w.standort_id," +
				"  w.besitzer_id," +
				"  w.werktechnik_id," +
				"  w.stdabb_id," +
				"  w.inventar," +
				"  f.data" +

				" FROM" +
				"  "+DB_SCHEMA+".werk AS w" +
				" LEFT JOIN" +
				"  "+DB_SCHEMA+".abbildung AS a ON w.stdabb_id = a.abb_id" +
				" NATURAL LEFT JOIN" +
				"  "+DB_SCHEMA+".vorhandene_versionen AS v" +
				" LEFT JOIN" +
				"  "+DB_SCHEMA+".foto AS f USING(foto_id)" +

				" WHERE" +
				"  w.werk_id = "+ Werk_id +

				"  ORDER BY" +
				"  abs(f.hoehe-300)+abs(f.breite-300)" +

				" LIMIT 1" );
		return rs;
	}


In der Postgresql-JDBC Dokumentation (Wikibook) habe ich gelesen, dass ich einen Primärschlüssel brauche, damit das ResultSet updateble ist. Ist das ein Weg? Wenn ja wie??


Irgendwie steh ich auf dem Schlauch. Vlt könnt ihr mir runterhelfen ? :)

MfG
Carsten
 
G

Guest

Gast
Falls das ResultSet nicht updatable ist, sollte beim Aufruf einer der Update-Methoden eine Exception kommen.
Sind alle Primary-Key-Felder in der Abfrage dabei? Wenn nicht, dann füge die noch ein.
 

netz-rack.c

Mitglied
Das Problem ist, ich erhalte durch die Verschahtellung in einen SwingWorker Thread keine Fehlermeldung. Nur Eclipse hält an mit Local variable not available

Wenn es eine Fehlermeldung gibt, dann kommt sie irgndwie icht zu mir durch!
 
G

Guest

Gast
Fange die Exception einfach mal zum Test ab und gebe sie auf die Console aus, dann weisst du woran
es scheitert.
Code:
catch(SQLException e)
{
  e.printStackTrace();
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben