MySQL Löschen von Rows mit JDBC

JDE4D

Mitglied
Java:
public static void remCandidate(String RUBCardID, String serviceID) {
        if (!existsRubID(RUBCardID, serviceID)) {
            try {
                statement = connect.createStatement();
                preparedStatement = connect.prepareStatement("SELECT * FROM dienstberechtigung WHERE Person = ? AND Dienst = ? AND Rolle = ?");
                preparedStatement.setString(1, RUBCardID);
                preparedStatement.setString(2, serviceID);
                preparedStatement.setString(3, "Candidate");

                resultSet = preparedStatement.executeQuery();

                if (resultSet.getConcurrency() == ResultSet.CONCUR_READ_ONLY) {
                    System.out.println("ResultSet non-updatable.");
                } else {
                    System.out.println("ResultSet updatable.");
                }
                while (resultSet.next()) {
                    System.out.println(resultSet.getString("Person"));
                    resultSet.deleteRow();
                }
            } catch (SQLException e) {
                System.out.println(e);
            }
        } else {
        }
    }

Ich weiss nicht wo das problem liegt.. bekomme keinelei Exception zurück... Es tut sich einfach nichts in der DB.

Verbindung steht, ich kann in der Tabelle von einer anderen Methode was reinschreiben aber das löschen scheint nicht zu klappen.

Einer ne idee?
 

Peter W. Marth

Aktives Mitglied
Hallo,

man sollte zunächst sicherstellen, dass das ResultSet upgedatet werden kann:

A default ResultSet object is not updatable and has a cursor that moves forward only. Thus, you can iterate through it only once and only from the first row to the last row. It is possible to produce ResultSet objects that are scrollable and/or updatable. The following code fragment, in which con is a valid Connection object, illustrates how to make a result set that is scrollable and insensitive to updates by others, and that is updatable. See ResultSet fields for other options.

Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
// rs will be scrollable, will not show changes made by others,
// and will be updatable

(Quelle: ResultSet (Java Platform SE 6))

Auch kann es sein, dass einfach ein commit fehlt, falls bei der JDBC-Connection kein Autocommit eingestellt ist.
 
S

SlaterB

Gast
du überprüfst OB, setzt aber nicht wie vorgeschlagen die Einstellung, DAMIT es Updatable ist,
bemerkst du den Unterschied?

wenn alles nicht geht dann musst du die Ids oder sonst was genaues merken und später ein normales DELETE per SQL durchführen
 

JDE4D

Mitglied
So sieht der Code aus:
Java:
public static void remCandidate(String RUBCardID, String serviceID) {
            if (existsRubID(RUBCardID, serviceID)) {
                try {
                    statement = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
                    preparedStatement = connect.prepareStatement("SELECT * FROM dienstberechtigung WHERE Person = ? AND Dienst = ? AND Rolle = ?");
                    preparedStatement.setString(1, RUBCardID);
                    preparedStatement.setString(2, serviceID);
                    preparedStatement.setString(3, "Candidate");

                    resultSet = preparedStatement.executeQuery();

                    if (resultSet.getConcurrency() == ResultSet.CONCUR_READ_ONLY) {
                        System.out.println("ResultSet non-updatable.");
                    } else {
                        System.out.println("ResultSet updatable.");
                    }
                    while (resultSet.next()) {
                        System.out.println(resultSet.getString("Person"));
                        resultSet.deleteRow();
                    }
                } catch (SQLException e) {
                    System.out.println(e);
                }
            } else {
            }
        }

bekomme jetzt diesen Error :

com.mysql.jdbc.NotUpdatable: Result Set not updatable.This result set must come from a statement that was created with a result set type of ResultSet.CONCUR_UPDATABLE, the query must select only one table, can not use functions and must select all primary keys from that table. See the JDBC 2.1 API Specification, section 5.6 for more details.This result set must come from a statement that was created with a result set type of ResultSet.CONCUR_UPDATABLE, the query must select only one table, can not use functions and must select all primary keys from that table. See the JDBC 2.1 API Specification, section 5.6 for more details.
 
S

SlaterB

Gast
und vorher wirklich nichts?
erstaunlich, du hast doch nur die Zeile 5 geändert, und die spielt letztlich keine Rolle,
du verwendest das PrepatedStatement von Zeile 6, also solltest du auf diese Zeile mehr Wert legen
 

JDE4D

Mitglied
was muss ich dort ändern? Hab versucht das updatable dort zu setzen aber das mag er nicht. Ich arbeite seit eine Woche mit MySQL und JDBC..
 
S

SlaterB

Gast
welchen Code hast du mit welcher Fehlermeldung?
grob in die API geschaut musst du die Parameter nur exakt herübernehmen, aber in die API kannst du auch selber schauen,

und provozierter Kommentar:
eine Woche an die Wand starren hilft nix, lieber 10 Min. strukturiert vorgehen, z.B. jetzt schauen was Connection an Methoden bietet um PreparedStatement zu erzeugen, mit welchen Parametern, welche Werte sind dort für was geeignet usw.
 

JDE4D

Mitglied
Java:
public static void remCandidate(String RUBCardID, String serviceID) {
            if (!existsRubID(RUBCardID, serviceID)) {
                try {
                    //statement = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
                    preparedStatement = connect.prepareStatement("SELECT * FROM dienstberechtigung WHERE Person = ? AND Dienst = ? AND Rolle = ?", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                    preparedStatement.setString(1, RUBCardID);
                    preparedStatement.setString(2, serviceID);
                    preparedStatement.setString(3, "Candidate");

                    resultSet = preparedStatement.executeQuery();

                    if (resultSet.getConcurrency() == ResultSet.CONCUR_READ_ONLY) {
                        System.out.println("ResultSet non-updatable.");
                    } else {
                        System.out.println("ResultSet updatable.");
                    }
                    while (resultSet.next()) {
                        System.out.println(resultSet.getString("Person"));
                        resultSet.deleteRow();
                    }
                } catch (SQLException e) {
                    System.out.println(e);
                }
            } else {
            }
        }

Wie du siehst müsste jetzt das Resultset updatable sein, ist es aber anscheinend nicht:

com.mysql.jdbc.NotUpdatable: Result Set not updatable (referenced table has no primary keys).This result set must come from a statement that was created with a result set type of ResultSet.CONCUR_UPDATABLE, the query must select only one table, can not use functions and must select all primary keys from that table. See the JDBC 2.1 API Specification, section 5.6 for more details.

;(
 
S

SlaterB

Gast
die geänderte Fehlermeldung gibt anscheinend auch den genauen Grund: keine Primary Key,

wie in meinem ersten Posting gesagt kann man letztendlich evtl. auch Pech haben, dass der Treiber das grundsätzlich nicht unterstützt,
die Alternative hatte ich da genannt:
> wenn alles nicht geht dann musst du die Ids oder sonst was genaues merken und später ein normales DELETE per SQL durchführen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S gesamte Tabelle löschen Datenbankprogrammierung 2
F SQLite Datensatz löschen Datenbankprogrammierung 13
R PostgreSQL JPA - Löschen und orphanRemoval Datenbankprogrammierung 6
B Mit Button einen Datensatz löschen Datenbankprogrammierung 2
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
B Fortlaufende Nummer - Was tun bei löschen? Datenbankprogrammierung 6
R eclipselink - referenzierte Entity löschen Datenbankprogrammierung 0
P Indizes / Fremdschlüssel löschen Datenbankprogrammierung 2
H Oracle Aus Datenbank löschen Datenbankprogrammierung 6
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
A Ausgewählten Jtable Eintrag aus Db löschen Datenbankprogrammierung 9
reibi Derby/JavaDB Derby DB löschen Datenbankprogrammierung 5
P JPA- Entities bleiben nach dem Löschen (unsichtbar?) in der Datenbank Datenbankprogrammierung 6
J Datensätze löschen Datenbankprogrammierung 6
O Löschen vieler Datensätze mit Hibernate Datenbankprogrammierung 11
C Hibernate Datensatz löschen Datenbankprogrammierung 2
U Nur den ersten Datensatz löschen wenn mehrere gleiche da sind Datenbankprogrammierung 2
M Datenbankeintrag bleibt nach Löschen in JSP vorhanden Datenbankprogrammierung 8
D Mit Trigger Tupel löschen verhindern Datenbankprogrammierung 3
L MySQL Einträge löschen schlägt fehl Datenbankprogrammierung 2
F hibernate_seqeunce reseten (löschen) Datenbankprogrammierung 2
M HSQLDB 2.0 - wie tmp-Verzeichnis löschen Datenbankprogrammierung 2
turmaline [Hibernate] @OneToOne: Löschen einer referenzierten Instanz Datenbankprogrammierung 2
G Oracle Zeile löschen Datenbankprogrammierung 2
C SQL String zwei Tabellen vergleichen und gleiche Zeile löschen Datenbankprogrammierung 25
Java.getSkill() Datensatz / Tupel automatisch nach xy Tagen / Stunden löschen Datenbankprogrammierung 7
D SQL : Objekte individuell löschen können Datenbankprogrammierung 5
R JPA, Spring, löschen einer Entity Datenbankprogrammierung 2
H MySQL Einträge löschen Datenbankprogrammierung 5
M Datensatz aus Datenbank löschen Datenbankprogrammierung 6
Antoras Zeile aus DB löschen und ID runterzählen Datenbankprogrammierung 8
C Objekte aus Datenbank löschen Datenbankprogrammierung 6
F Löschen einer Zeile Datenbankprogrammierung 4
G Mit Java-Programm Datenbank löschen/neu anlegen Datenbankprogrammierung 5
G Löschen eines Eintrages verbunden mit JList Datenbankprogrammierung 5
E SQL-Frage (Löschen aller Datensätze) Datenbankprogrammierung 9
P Tabellen löschen Datenbankprogrammierung 4
O Size ResultSet betrachtete Zeilen "löschen" Datenbankprogrammierung 5
G MySQL Zeile löschen und gleich Optimieren Datenbankprogrammierung 6
T [jdbc] einen Eintrag aus mehreren Tabellen löschen (Batch) Datenbankprogrammierung 3
G mySQL: kaskadierendes Löschen Datenbankprogrammierung 7
M Oracle String aus Column splitten und x Rows daraus erstellen Datenbankprogrammierung 1
S MySQL Rows zählen? Datenbankprogrammierung 5
M Designfrage zu Rows die sich auf einen Datensatz derselben Tabelle beziehen Datenbankprogrammierung 7
M Ausgabe der Rows mit höchstem Wert X einer Gruppe y,z ? Datenbankprogrammierung 2
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
D Asynchrone Aufrufe mit jdbc Datenbankprogrammierung 5
Edin JDBC Hilfe Datenbankprogrammierung 2
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Husamoli345 JSF-JDBC Verbindung Crud Datenbankprogrammierung 15
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
J JDBC anschaulich präsentieren Datenbankprogrammierung 2
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
ralfb1105 Oracle JDBC Debugging Datenbankprogrammierung 8
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
Thallius MySQL jdbc schließt Verbindung nach vielen Request von selber Datenbankprogrammierung 8
B MySQL JDBC Kommentarfilter Datenbankprogrammierung 4
Aruetiise MySQL Name JDBC Drive finden Datenbankprogrammierung 4
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
Thallius MySQL Merkwürdiges JDBC Verhalten bei VPN Verbindung. Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
F MySQL JDBC Problem Datenbankprogrammierung 5
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
looparda SQLite Active JDBC Abstraktion Datenbankprogrammierung 2
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
J RESTServie + JDBC + No suitable driver found for jdbc Datenbankprogrammierung 4
KaffeeFan JDBC/ODBC-Bridge entfernt Datenbankprogrammierung 4
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
J Fehlende DatenbankView nach einbeziehen von JDBC Datenbankprogrammierung 3
A Mit JDBC auf postgreSQL Datenbank zugreifen Datenbankprogrammierung 5
C PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL Datenbankprogrammierung 2
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
S JDBC mit Postgres DB connecten Datenbankprogrammierung 3
D JDBC - Verständnisfrage Datenbankprogrammierung 2
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
L Conversion-Error bei JDBC Date Literals Datenbankprogrammierung 3
X MySQL DB-verbindung ohne JDBC/ODBC Datenbankprogrammierung 1
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
U JDBC prepaird Statements Datenbankprogrammierung 4
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
R Transaktionen von mehreren Anwendungen aus - JDBC Datenbankprogrammierung 3
N MySQL com.microsoft.sqlserver.jdbc.SQLServerException: Die Verbindung wurde geschlossen. Datenbankprogrammierung 1
N JDBC: rollback() bei Exception geht nicht!? Datenbankprogrammierung 1
C Dateipfad des jdbc Treibers Datenbankprogrammierung 2
G JDBC Connect nur über SID fehlerfrei möglich Datenbankprogrammierung 2
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T JDBC Fehler Datenbankprogrammierung 2
J JDBC via Singleton Datenbankprogrammierung 12
Z PostgreSQL JDBC mit Postgresql Datenbankprogrammierung 2
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben