无法使用 SQLite 在 ionic1 中创建多个表
Posted
技术标签:
【中文标题】无法使用 SQLite 在 ionic1 中创建多个表【英文标题】:Can't create multiple tables in ionic1 using SQLite 【发布时间】:2018-01-12 15:15:30 【问题描述】:我正在使用 Ionic & Cordova 构建一个移动应用程序,我需要将数据存储在本地数据库中的几个表中,所以我使用的是 SQLite。
在我的 app.js 中有这个:
var db = null;
var weatherApp = angular.module('weather', ['ionic', 'ngCordova']);
weatherApp.run(function($ionicPlatform, $cordovaSQLite, Cities)
$ionicPlatform.ready(function()
if(window.cordova)
db = $cordovaSQLite.openDB(name: 'weather.db', location: 'default');
create table for storing favourites
$cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS favourites (id integer primary key, name text, openWeatherId integer)');
create table for storing the current location of the device
$cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS location (id integer primary key, openWeatherId integer');
//also tried
// db.transaction(function (tx)
// //create table for storing favourites
// tx.executeSql(db, 'CREATE TABLE IF NOT EXISTS favourites (id integer primary key, name text, openWeatherId integer)');
// );
// db.transaction(function (tx)
// //create table for storing the current location of the device
// tx.executeSql(db, 'CREATE TABLE IF NOT EXISTS location (id integer primary key, openWeatherId integer');
// );
$cordovaSQLite.execute(db, 'SELECT tbl_name FROM sqlite_master WHERE type = "table"').then(function (res)
var tables = [];
if (res.rows.length > 0)
for (var i = 0; i < res.rows.length; i++)
if (res.rows.item(i).tbl_name !== "android_metadata")
tables.push(res.rows.item(i).tbl_name);
console.log(tables);
// gives:
// Array(1)
// 0 : "favourites"
else
console.log('no tables in db!');
, function (error)
console.log(error);
);
);
);
当我在物理 android 设备上运行这个(cordova run android)时,只创建了 1 个表,收藏夹,其他位置没有。
任何想法为什么?谢谢!
【问题讨论】:
刚刚尝试切换 2 个创建语句的顺序,但奇怪的是,仍然只创建了收藏夹。哇!? 你注意到第二个sql查询结束时的错误了吗?您需要关闭括号:openWeatherId integer'); -> openWeatherId 整数)'); 谢谢 Gustavo - 现在这是一个愚蠢的错误!请作为答案提交,我会将其标记为正确:) 完成。 4 只眼睛看到超过 2 :] 【参考方案1】:第二个 SQL 查询中有错字:
$cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS location (id integer primary key, openWeatherId integer');
关闭括号解决了问题:
$cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS location (id integer primary key, openWeatherId integer)');
【讨论】:
以上是关于无法使用 SQLite 在 ionic1 中创建多个表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 asmack 在 android 中创建多用户聊天应用程序