【问题标题】:Using database in phone gap在电话间隙中使用数据库
【发布时间】:2016-08-30 09:08:47
【问题描述】:

我即将深入研究一个新的移动项目,更具体地说是移动 TCG(交易卡游戏)Deckbuilder 应用程序。因为它即将成为我的第一个移动应用程序,所以我做了一些研究并遇到了 Phonegap。我已经完成了几个基于节点的 Web 应用程序,所以它似乎就在我的小巷里。

我开始搜索如何在手机上存储任何数据,发现有 3 种可能性:

  • MemoryStore (SQLLite?)
  • Lo​​calStorageStore
  • WebSqlStore

LocalStorageStore,对于我的应用程序的复杂性来说似乎是不可能的。所以它介于 MemoryStoreWebSqlStore 之间。

什么适合我的项目?你能做到多复杂?

所以我们的想法是拥有一个包含所有现有卡片的“大”json 文件:

{
  id: xx,
  name: 'name'
  manacost: xx,
  attack: xx,
  defence: xx,
  effects: [
    'lorem ipsum',
    'lorem ipsum'
  ],
  image: '/img/cards/xx.png'
}

所以为了节省一副套牌,我想我可以去:

  • 甲板名称
  • 卡片数组(想知道我是用 {id, amount} 保存它们还是计数它们。
  • 创建和更新

这不会太占用内存吗?再说一遍,什么数据库系统适合这个?

【问题讨论】:

    标签: android cordova


    【解决方案1】:

    您可以使用 SQLite 来保存您的数据。将数据保存为表格格式是非常正确的方法,这样您就可以使用 sql 查询获取所需的数据。当您当时使用大量数据时,有时很难使用 session 或 localStorage 来处理这个问题。所以我建议你使用 SQLite。正如我在下面的示例中提到的,您将了解创建数据库的想法。

     <!DOCTYPE HTML>
    <html>
    
       <head>
    
          <script type="text/javascript">
    
             var db = openDatabase('mydatabase', '1.0', 'My DB', 2 * 1024 * 1024);
    
             db.transaction(function (tx) {
                tx.executeSql('CREATE TABLE IF NOT EXISTS USER (id unique, name)');
                tx.executeSql('INSERT INTO USER (id, name) VALUES (1, "Ram")');
                tx.executeSql('INSERT INTO USER (id, name) VALUES (2, "Amay")');
    
             });
    
             db.transaction(function (tx) {
                tx.executeSql('SELECT * FROM USER WHERE id=?', [1], function (tx, results) {
                   var len = results.rows.length, i;
    
                   for (i = 0; i < len; i++){
                      var data = "<p><b>" + results.rows.item(i).name + "</b></p>";
                      document.querySelector('#custName').innerHTML +=  data;
                   }
                }, null);
             });
    
          </script>
    
       </head>
    
       <body>
          <div id="custName">USER NAME</div>
       </body>
    
    </html>
    

    【讨论】:

      【解决方案2】:

      最好的 SQLite 插件是这个:

      https://github.com/litehelpers/Cordova-sqlite-storage

      或此插件的特殊版本,可在此处找到:

      https://github.com/litehelpers/Cordova-sqlite-storage#other-versions

      如果你的应用基于 JSON,你应该看看 PouchDB,它是一个 NoSQL 数据库,你可以在 cordova s​​qlite 插件之上使用它:

      https://pouchdb.com

      【讨论】:

      • 这个想法是拥有一个大的 JSON 文件,其中包含应用程序中已经存在的所有卡片和资产。并使用 sqlite 或 json 存储来自用户的卡片组。 Pouchdb 似乎是一个非常有创意的 JS DB,我可能会将它用作某种“本地”脚本来更新我的应用程序数据。所以阅读你的评论,你会选择 sqlite 吗?
      • 是的,我更喜欢 SQLite,还有一种方法可以预填充您的数据。
      猜你喜欢
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2013-03-31
      • 2015-03-18
      • 1970-01-01
      相关资源
      最近更新 更多