blog | V.Jirovský

Použití SQLite ve WinRT

Protože ve WinRT není zabudovaná databáze jako SQL CE, jednou z mála použitelných je SQLite. Při použití SQLite s nejrozšířenější knihovnou sqlite-net v WinRT aplikaci v ČR podmínkách můžete narazit.

Proč vlastně? Křestní jména.

Ve Windows 8 Microsoft Account (dříve Windows Live ID) vytváří profil v tvaru %systemdrive%\Users\%Křestní jméno%. WinRT vám nedovolí po vzoru IsolatedStorage ukládat soubory z aplikace (z důvodů bezpečnosti) jinam než do složky %systemdrive%\Users\%username%\AppData\Local\Packages\%app% A sqlite-net má bohůžel problém s přístupem k databázový souborům, které mají v cestě Unicode znaky.

Výsledek je, že nemůžete uložit soubor jinam, než je složka uživatele, ale do složky uživatele se zase nemůže dostat SQLite.

Jak tento deadlock rozseknout?

  1. Použitím SQLiteConnection konstruktoru s sqlite flagy, např.:

    new SQLite.SQLiteConnection(Path.Combine(ApplicationData.Current.LocalFolder.Path, "database.db"), SQLite.SQLiteOpenFlags.Create | SQLite.SQLiteOpenFlags.ReadWrite, true);

    Tento konstruktor totiž používá správné funkce na otevírání souborů. Toto řešení funguje bohužel jenom na synchronní připojení.

  2. Úpravou SQLiteConnection konstruktorů – nahradit všechny výskyty open_v2 za funkci open16.

Zdroje:

Detaily k tomuto problém a další informace najdete na:

Kategorie: Programování, Windows 8

Tagy: , , , ,

Twitter kanál

  • Fňuk, @wedoscom mi kvůli odstávce vynuluje můj roční uptime na VPS. Není to nejvážnější porušení SLA co jste kdy viděli? :-)
  • V Praze se objevilo nějak moc Simpsoních hospod. Chtělo by je to ozkoušet, že @elfineer?
    http://t.co/9Hh7IheJ3a
  • Při úklidu zjišťuju, že většinu poznámek "to se mi bude hodit při psaní" jsem stejně při psaní nenašel a tudíž nemá smysl je příště dělat.

O blogu

Píše Václav Jirovský (vjirovsky.cz), student FIT ČVUT, IT administrátor, vývojář a bůhví co ještě.