使用SQLite offline storage API来存储应用的设置
2014-09-01 10:26
246 查看
在前面的一篇文章中,我们已经使用了一种方法U1db来存储我们的应用的设置。这里我们使用另外的一种方法来做同样的事。在这篇文章中,我们使用SQLite的API来存储我们想要存储的东西。事实上这个方法早已经被coreapps里的weather, rss reader及music应用所使用。开发者可以查看https://launchpad.net/ubuntu-phone-coreapps/来更详细地了解如何使用这个方法在实际的例子里存储设置的。下面我们来详细的解释如何这么做
这样我们就可以使用SQLite API接口来进行数据库的操作了。
另外很重要的一点,我们必须使用如下的方法定义一个应用的名称:
这样做的目的是为了能够在应用的自己可以访问的目录里创建一个数据库文件。如果不这样做,数据库文件可能会被创建到其他的地方而导致不能被本应用访问。
下面我们来创建数据库方法来创建,修改,并存储设置:
我们来运行该应用:
在手机上的数据库文件:
源码可以在如下地址下载:
bzr branch lp:~liu-xiao-guo/debiantrial/settings
1)创建一个基本的应用
我们使用Qt Create来创建一个“App with Simple UI”的简单template应用。导入如下的库:import QtQuick.LocalStorage 2.0
这样我们就可以使用SQLite API接口来进行数据库的操作了。
另外很重要的一点,我们必须使用如下的方法定义一个应用的名称:
MainView { // objectName for functional testing purposes (autopilot-qt5) objectName: "mainView" // Note! applicationName needs to match the "name" field of the click manifest applicationName: "com.ubuntu.developer.liu-xiao-guo.settings" ... }
这样做的目的是为了能够在应用的自己可以访问的目录里创建一个数据库文件。如果不这样做,数据库文件可能会被创建到其他的地方而导致不能被本应用访问。
下面我们来创建数据库方法来创建,修改,并存储设置:
function openDB() { if(db !== null) return; // db = LocalStorage.openDatabaseSync(identifier, version, description, estimated_size, callback(db)) db = LocalStorage.openDatabaseSync("example-app", "0.1", "Simple example app", 100000); try { db.transaction(function(tx){ tx.executeSql('CREATE TABLE IF NOT EXISTS settings(key TEXT UNIQUE, value TEXT)'); var table = tx.executeSql("SELECT * FROM settings"); // Seed the table with default values if (table.rows.length == 0) { tx.executeSql('INSERT INTO settings VALUES(?, ?)', ["distro", "Ubuntu"]); tx.executeSql('INSERT INTO settings VALUES(?, ?)', ["foo", "Bar"]); console.log('Settings table added'); }; }); } catch (err) { console.log("Error creating table in database: " + err); }; } function saveSetting(key, value) { openDB(); db.transaction( function(tx){ tx.executeSql('INSERT OR REPLACE INTO settings VALUES(?, ?)', [key, value]); }); } function getSetting(key) { openDB(); var res = ""; db.transaction(function(tx) { var rs = tx.executeSql('SELECT value FROM settings WHERE key=?;', [key]); res = rs.rows.item(0).value; }); return res; }
2)创建UI来修改,存储设置
Page { id: app title: i18n.tr("Settings") Column { anchors.fill: parent anchors.margins: units.gu(5) spacing: units.gu(2) OptionSelector { id: distroToggle text: i18n.tr("Favorite Distro") model: [i18n.tr("Ubuntu"), i18n.tr("Debian")] } OptionSelector { id: fooToggle text: i18n.tr("Foo") model: [i18n.tr("Bar"), i18n.tr("Baz")] } Button { text: i18n.tr("Save settings") onClicked: { var distro = (distroToggle.selectedIndex === 0) ? "Ubuntu" : "Debian"; console.log("Saved " + distro); saveSetting("distro", distro); var foo = (fooToggle.selectedIndex === 0) ? "Bar" : "Baz"; console.log("Saved " + foo); saveSetting("foo", foo); } } } Component.onCompleted: { var distro = getSetting('distro'); distroToggle.selectedIndex = (distro === "Debian") ? 1 : 0; var foo = getSetting('foo'); fooToggle.selectedIndex = (foo === "Baz") ? 1 : 0; } }
我们来运行该应用:
在手机上的数据库文件:
源码可以在如下地址下载:
bzr branch lp:~liu-xiao-guo/debiantrial/settings
相关文章推荐
- H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)
- 使用Qt.labs.settings来存储应用的设置
- H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)
- H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)
- 使用Xamarin + C#开发应用 -- 使用sqlite做本地存储
- 使用Qt.labs.settings来存储应用的设置
- H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)
- Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)
- H5本地存储详细使用教程(localStorage + JSON数据存储应用框架)
- 使用O3D javascript API构建一个O3D应用
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- Flex中利用ExternalInterface API从JavaScript中获取内容并在Flex应用中使用的例子
- 详解Java的JDBC API的存储过程与SQL转义语法的使用
- C++ 使用API设置文件属性 隐藏
- 使用iis设置虚拟主机(如何用同一端口ip对应不同web应用)
- IBM FASTT StorageManager的使用(DS4000系列存储管理软件)
- eaccelerator 应用之“使用共享内存存储Session”
- 使用 IsolatedStorageFileStream 存储信息
- 使用 UDDI V3 API 构建安全的 UDDI 应用
- 应用SetProp等API设置HWND的属性表