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:
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:
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
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