# sqlite UPDATE wirkt nicht aus Java



## rwolf (22. Aug 2012)

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 !


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


----------



## Ebenius (22. Aug 2012)

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


----------



## rwolf (22. Aug 2012)

danke für antwort, ebenius !

hab geändert auf executeUpdate und result gelesen, kommt result = 0
keineWirkung sonst


----------



## rwolf (22. Aug 2012)

geändert auf executeUpdate() , result
gelesen, ist 0,was wohl heisst, fehlerlos !

sonst KEINE Wirkung !


----------



## Flown (22. Aug 2012)

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]


----------



## Ebenius (22. Aug 2012)

Wie sieht denn der Inhalt von [c]sql[/c] aus?

Ebenius


----------



## rwolf (23. Aug 2012)

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


----------



## Ebenius (23. Aug 2012)

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


----------

