Böses deleteRow()

Status
Nicht offen für weitere Antworten.

Waldelf

Mitglied
Hallo allerseits und Tach erstmal!

deleteRow will nicht und ich kann den Fehler nicht finden. Alles andere geht.
Es handelt sich um eine Oracle-DB und den Thin Treiber.

Code:
Statement st = dbCon.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE );
rsData = st.executeQuery("select bla bla bla...");
if ((rsData.next()) ) {
if (rowId>0) {rsData.absolute(rowId);}
...
if (navigator.equals("doDelete")) {
	rsData.deleteRow();
}
...

Als Fehlermedung bekomme ich:
"Ungültiger Vorgang bei schreibgeschützter Ergebnismenge: deleteRow"
Wieso schreibgeschützt, ich habe doch CONCUR_UPDATABLE gesetzt und der User hat auch Schreibrechte?

Ich möchte kein Delete SQL ausführen sondern den aktuellen Datensatz löschen, es soll auch bei Tabellen ohne PK funktionieren.

Hat jemand eine Idee?

Danke
nic
 

foobar

Top Contributor
ch möchte kein Delete SQL ausführen sondern den aktuellen Datensatz löschen, es soll auch bei Tabellen ohne PK funktionieren.
Warum nicht? Die Bedingungen die du im Selectstatement verwendest kannst du doch auch im DELETE verwenden. Wo liegt das Problem?
 

Waldelf

Mitglied
Das geht nicht bei Tabelle ohne PK.

Mein ziel ist eine universelle Klasse für ein editierbares DBGrid mit HTML-Ausgabe zu bauen. Die Tabelle ohne PK sind da die Spielverderber.

Ich suche keinen Workaround, sondern möchte das deleteRowe verstehen und benutzen.
 

vas

Mitglied
... fast zwei Jahre später ...



Hallo!


Ich möchte nur eine kleine Desktoptop-Datenbankanwendung mit Java DB (Derby) unter Win XP erstellen, und versuche mich jetzt seit Stunden (genauer: Tagen) an einer simplen Demoapplikation. Die Struktur der Datenbank ist gegeben (mit Netbeans 6.0 erstellt). Die Verbindung mit dem embeddedDriver funktioniert endlich, Einfügen neuer Sätze und Navigation in den Sätzen des ResultSet ebenfalls.


Was jetzt nicht klappt, ist das Löschen von Sätzen aus dem ResultSet. Der Satz-Zeiger sollte eigentlich laut Dokumentation auf den prevoius-Satz zurückspringen, macht er aber nicht (ermittelt über int ResultSet.getRow()), sein Wert bleibt konstant. Wenn ich von dem gelöschten Satz mit ResultSet.next() bzw prevoius() weggehe, funktioniert das zwar. Wenn ich dann aber wieder in Richtung des "gelöschten" Satzes navigiere und ihn erreiche kommt die Fehlermeldung:

java.sql.SQLException: Das ResultSet ist nicht geöffnet. Die Operation 'next' ist unzulässig. Prüfen Sie, ob das automatische Festschreiben inaktiviert ist.


Teile des Codes

Code:
stmtX = cncDemo.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
                                              ResultSet.CONCUR_UPDATABLE);
...

sSQL = "SELECT * FROM TabelleX";
rsX = stmtX.executeQuery(sSQL);
rsX.next();                             // 1. Datensatz

...

rsX.deleteRow();                    // ???
...


Ich bin wohl nicht der Einzige, der Probleme mit dem ResultSet.deleteRow() hat. Irgendwelche Tipps?



vas
 

Waldelf

Mitglied
He ließ ja jemand meine Posts? Cool!

hast Du einen Primärschlüssel auf der Tabelle?

Nein? Dann ist es das gleiche Problem wie bei mir damals.

Ich habe bisher keine Lösung gefunen, habe es aber auch nicht weiter verfolgt.

Viel Erfolg!
 

vas

Mitglied
@ waldelf, als braver Forumsuser guck ich natürlich, ob schon ein Thema zu meinem Problem existiert!

Na ja, das deleteRow() scheint immer noch böse zu sein. Das ist nix gut!

vas
 

TonyToronto

Mitglied
Vielleicht hilft Euch das ja weiter.
Hatte ein ähnliches Problem.
Fehlermeldung "Ungültiger Vorgang bei schreibgeschützter Ergebnismenge:", obwohl ResultSet.CONCUR_UPDATABLE gesetzt war.
Habe dann statt "Select * " die Spaltennamen direkt hingeschrieben.
Danach war das ResultSet tatsächlich updatable.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Resultset DELETEROW Problem Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben