sqlite UPDATE wirkt nicht aus Java

rwolf

Bekanntes Mitglied
hi all,
versuche seit gestern, einen UPdate-befehl mit Prepared-Statement
zum Wirken zu bringen : vergeblich !
ps.execute bringt keine Fehlermeldung !

INSERT macht keine Probleme, UPDATE im Browser -SQLITE-Editor-Plugin funzt ja auch !

neuester (?) sqlite-Treiber 3.7.2 eingebunden bei Netbeans

jetzt fällt mir nix mehr ein !

Java:
        Connection write_con = dbsqif.get_own_con();
        if(!(write_con instanceof Connection))
        {
            mps.msgbox("no connection to "+mps.con_dat.toString() );
            return 0;
        }
.
.
            write_con.setAutoCommit(true);
            ps = write_con.prepareStatement(sql);
...
...

                    }
                    try
                    {    
                        ps.execute();
                        ps.close();
                    }
                    catch (Exception e)
                    {
                        System.err.println("tbm data-write update error : "+e.getMessage());
                        e.printStackTrace();
                    }    
                    System.out.println("tbm data-write Daten geschrieben lfdnr :!"+keyval);
                //#}
                mps.show_msg_dialog("base_table_manager data-write","Daten geschrieben"); 
.
.
.
write_con.close();
danke schon mal für Interesse und ggf. Hilfe bzw. Tipps
 
Zuletzt bearbeitet von einem Moderator:
Nimm mal [c]ps.executeUpdate()[/c] statt [c]ps.execute()[/c] und lass Dir den Rückgabewert ausgeben.

BTW: Der not-instanceof-Check oben könnte auch einfach ein not-null-Check sein.

Ebenius
 
nein wenn er 0 zurück gibt, dann wurden 0 reihen verändert

[JAPI]PreparedStatement#executeUpdate()[/JAPI]

[EDIT]Ergo ich würde mir das updateQuery nochmal ansehen[/EDIT]
 
wäre doch ne eindeutige fehlermeldung da..

aber ok :
UPDATE tabelle SET ifeld1=?,cfeld2=? WHERE keyfield = ?

dann ps.setInt(1,ifeld1_value); ps.setString(2,cfeld2_value) usw.

die alternative syntax mit

Update tabelle (feld1,feld2) VAlues (feld1_val,feld2_val) WHERE keyfield = ?

funktionierte bei sqllite nicht, sql-error !

also den hätte ich dann schon mitgekriegt
 
Lass Dir mal den Wert ausgeben, denn Du [c]ps.set…(3, …)[/c] als keyfield setzt. Dort liegt der Fehler, denn die WHERE-Clause matched einfach nicht. Eine Fehlermeldung kann es dafür nicht geben, denn keine Zeile zu treffen ist genau so legitim wie eine Zeile, einige Zeilen oder alle Zeilen zu treffen.

Die Form mit VALUES gibt's in SQL nur beim INSERT, nicht aber beim UPDATE.

Ebenius
 

Neue Themen


Zurück
Oben