| 

.NET C# Java Javascript Exception

3
Servus.
Hab schon ein wenig im Internet gesucht zu dem Thema und auch einiges gefunden, nur um dann zu merken, dass ich eigentlich alles richtig machen müsste.
Folgendes Problem:
Ich hab Umlaute in meinen Einträgen die in die Datenbank sollen und die werden leider nicht richtig übernommen, was dazu führt, dass das SQL-Statement nicht korrekt ist und die Einträge nicht in der Datenbank landen.
Hier mal der Sourcecode:

const char *sqlQuery = [[NSString stringWithFormat:@"INSERT INTO %@ %@ VALUES %@",k_db_tableName, s_keysToInsert, s_valuesToInsert] UTF8String];
Log2(@"sqlQuery: %s", sqlQuery);
sqlite3_stmt *compiledQuery;
if(sqlite3_prepare_v2(database, sqlQuery, -1, &compiledQuery, NULL) == SQLITE_OK)
{ // Loop through the results and add them to the feeds array
if(sqlite3_step(compiledQuery) == SQLITE_ROW)
{
// Log2(@"result of insertion into Table = %@", [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledQuery, 1)])
}
}


Wie man sieht konvertiere ich den String bevor ich ihn dem sqlite3_stmt zuweise brav nach UTF-8.

Ein Testlauf hat dann leider ergeben, dass mir objective-c aus den Umlauten sehr komische Zeichen macht.

Da kommt dann statt: 'rückseitig' auf einmal 'r√ºckseitig' bei raus.

Hat irgend wer ne Idee woran das liegen könnte?
Ich kann gerne auch noch mehr sourcecode posten, wenns was helfen sollte.

Vielen Dank schon mal im Vorraus.
Da Mav.


--------Edit---------
Noch als zusätzliche Info.
Ich habe sämtliche Felder in der Datenbank als varchar(255) definiert, da ich nur mit Sicherheit sagen kann, dass ein nicht allzulanger String abgespeichert wird. Da ich die Datenbank zur Laufzeit des Programms anlege und ich keine Möglichkeit bzw lust habe die Daten alle vorher zu prüfen wird das auch erstmal so bleiben. Es sei denn dass darin mein Problem begründet liegt.

-------Noch ein Edit-------
Hab grade beim testen noch rausgefunden, dass meine Strings, die ich in die Datenbank einfügen will scheinbar bereits utf8-codiert in meiner App rumschwirren (Ich lade sie mit nem XMLParser aus nem XML in ein Dictionary.) Wenn ich mir das Dictionary ausgeben lasse, sind alle Umlaute korrekt codiert. Das 'ü' in 'rückseitig' steht dann als '\U00f' dort.
Ich bin langsam echt am verzweifeln mit dem Zeug.

Kann es evtl daran liegen, dass die
s_keysToInsert
und
s_valuesToInsert
keine Strings sind sondern MutableStrings?
25.11.2011
Maverick1st 332 1 7
2 Antworten
0
Ob string oder mutablestring spielt m.E. keine Rolle, die sind voneinander abgeleitet. Entscheidend ist der innere Typ. Ich weiß ehrlich gesagt nicht genau wo dein Fehler liegen könnte. Ein Tip: Versuch mal sqlite3_bind_text zu verwenden anstatt deine Statements als String zu formatieren. Dazu müsstest du die Schleife ein bisschen umbauen. Anstatt des Werts schreibt man ein "?" in den Text und weist den Wert dann mit so etwas wie

sqlite3_bind_text(insertResultFieldStmt, index, [irgendeinWert UTF8String], -1, SQLITE_TRANSIENT);

zu. Vielleicht hilft dir das weiter.
Daniel
26.11.2011
puls200 3,8k 7
Werd ich morgen mal versuchen. Vielen Dank für den Hinweis.
Maverick1st 07.12.2011
0
So, Bin endlich zum testen gekommen, ob dein Vorschlag hinhaut Daniel.
Leider krieg ich da noch mehr Fehler als vorher. Aber ich bin dahinter gekommen, wieso ich die Einträge verliere.
Ich hab schlicht und einfach versucht, Werte in Spalten zu schreiben, die nicht da waren, weil ich davon ausgegangen bin, dass die Daten aus dem XML das ich bekomme immer gleich viele sind.

Wieder mal gelernt, dass man sich in der Informatik auf nix verlassen sollte. :)

Problem ist auf jeden Fall gelöst.
14.12.2011
Maverick1st 332 1 7

Stelle deine Sql-Frage jetzt!