SQLite UPDATE Daten (gelöst)
-
Hallo,
ich möchte die Daten einer bestimmten Datenzeile ändern.
Dazu suche ich das entsprechende query-Kommando unter C++.
Das query-Kommando für eine Spalte funktioniert:strm << "UPDATE KUNDE SET SCHULD=" << schuld << " WHERE ID=" << kdnr;
Das query-Kommando für alle Spalten funktioniert nicht:
strm << "UPDATE BESTELL SET KDNAME,ARTNR,ARTBEZ,ARTANZ,ARTPREIS,GESAMT,SCHULD" << "'" << kdname << "'," << artnr << ",'" << artbez << "'," << artanz << "," << artpreis << "," << gesamtpreis << "," << kdschuld << " WHERE ID=" << kdnr;
MfG
Juergen B.
-
Schau dir mal die Syntax für UPDATE genau an (du mußt die Spalten einzeln zuweisen).
PS: Benutze besser "prepared statements", da dies einfacher zu benutzen ist (und du damit auch z.B. SQL-Injection vermeidest).
-
Hallo,
so funktioniert das Update:
int updateOrderData(int bestellnr, int kdnr, string kdname, int artnr, string artbez, int kdanz, float artpreis, float gesamtpreis, float kdschuld) { std::stringstream strm; strm << "UPDATE BESTELL SET BESTELLNR=" << bestellnr << "," << "ARTNR=" << artnr << "," << "ARTBEZ=" << "'" << artbez << "'," \ << "ARTANZ=" << kdanz << "," << "ARTPREIS=" << artpreis << "," << "SCHULD=" << kdschuld << "," << "GESAMT=" << gesamtpreis << " WHERE ID=" << kdnr; string s = strm.str(); char *str = &s[0]; cout << "query" << str << endl; sqlite3_stmt *statement; int result = 0; const char *query = str; if (sqlite3_prepare(orderfile, query, strlen(query), &statement, 0) == SQLITE_OK) { int res = sqlite3_step(statement); result = res; sqlite3_finalize(statement); } return result; }
MfG
Juergen B.
-
Statt
char *str = &s[0]; const char *query = str; ... query, strlen(query), ...
nimm besser
sqlite3_prepare(orderfile, s.c_str(), s.size(), &statement, 0)
-
Hallo,
danke für den letzten Hinweis, habe ich verwendet.
MfG
Juergen B.
-
Schau dir mal SQL Injection an. Und prepared statements mit Platzhaltern, die das Problem löst.