无法使用 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 中创建多个表的主要内容,如果未能解决你的问题,请参考以下文章

ionic1 sqlite的添加使用

如何在 Django 中创建多选框?

如何使用 asmack 在 android 中创建多用户聊天应用程序

如何使用 schema.graphql 在放大数据存储中创建多对多关系

如何在无状态会话 bean 中创建多线程?

使用嵌套字段在MongoDB / Mongoose中创建多对多关系?