2010-04-01 6 views
6

In einigen Bücher und Online sehe ich diese Methode Anrufe werden nach einer Datenbank erstellt wird:Android SQLite-Datenbank locale, Locking und Version

db.setLocale(Locale.getDefault()); 
db.setLockingEnabled(true); 
db.setVersion(DB_VERSION); 

Warum wird das gemacht? So weit ich kann sagen, nach dem Erstellen einer neuen Datenbank, das System fügt eine Tabelle namens android_metadata mit einem Feld mit dem Namen Gebietsschema und diese Tabelle hat eine Zeile mit dem Gebietsschema Feld auf "en_US" festgelegt. Jetzt nehme ich an, dass die Spalte diesen Wert hat, weil ich ein US-Telefon verwende, und wenn ich ein Telefon von einer anderen Region benutzte, dann würde das Gebietsschemafeld entsprechend eingestellt werden. Kann das jemand bestätigen? Ich vermute, dass die setLocale-Methode nur im Fall nützlich wäre, wenn Sie eine vordefinierte Datenbank auf einem Telefon installieren und dann das Gebietsschema ändern möchten, um dem Gebietsschema des Telefons zu entsprechen. Ton richtig?

Die Dokumentation für setLockingEnabled sagt, dass es standardmäßig True ist, also gibt es keine Notwendigkeit, diesen Aufruf zu machen, richtig?

Schließlich, was ist mit dem Aufruf von setVersion? Ich kann keine Tabelle finden, die diese Informationen enthält, so dass ich angenommen habe, dass die Datenbankdatei selbst die Versionsnummer irgendwo speichert. Wenn ich also eine Datenbank erstelle, bei der Sie bereits die Nummer im Aufruf des SQLiteOpenHelper-Konstruktors angeben müssen, gibt es keinen Punkt beim Aufrufen von setVersion. Noch einmal, vielleicht existiert diese Methode für den Fall der Installation einer vorgefertigten Datenbank auf einem Gerät und Sie wünschen dann , um die Datenbankversion zu ändern (obwohl ich nicht daran denken kann, wenn das Sinn machen würde).

Vielen Dank für einen Einblick!

Antwort

3

Sie verwenden setLocale(), wenn Sie bestimmte Inhalte in verschiedenen Sprachen haben und eine benutzerdefinierte Reihenfolge festlegen möchten. Android SDK können Sie anrufen, um von

select........ order by display_name COLLATE LOCALIZED ASC 

mit der Betonung liegt hier auf COLLATE LOCALIZED ist. Dadurch wird die Spalte mit dem Gebietsschemaalphabet angeordnet.

+1

Ich bekomme, wie die Locale Sachen funktioniert. Ich verstehe einfach nicht, warum ich diese Zeilen in Büchern und Online-Artikeln sehe, in denen die Verwendung einer SQLite-Datenbank für Android diskutiert wird. Es ist so, als würden die Autoren alle den gleichen Code ausschneiden und einfügen, ohne zu wissen, ob er tatsächlich notwendig ist oder nicht! Soweit ich das beurteilen kann, ist dieser Code nicht notwendig und wollte das nur bestätigen. – gdoten

+0

Angenommen, Sie haben eine Datenbank, die Text mit Akzent enthält, müssen Sie die richtige Reihenfolge finden, um die richtigen Ergebnisse zu erhalten, zB: 'wie, állat, dig, egg, éden, elfenbein, arbeit ', sonst enden Sie am Ende mit diesen akzentuierten Sachen – Pentium10

+0

Ja. In einer neu erstellten Datenbank ist das Gebietsschema jedoch bereits festgelegt. Warum sollten Sie also ein Gebietsschema erstellen, auf das es bereits festgelegt ist? Das Gleiche gilt für die Sperr- und Versionsaufrufe - die Datenbank hat diese bereits eingestellt, so dass es keinen Sinn macht, diese Anrufe zu tätigen. – gdoten