【问题标题】:TideSDK DatabaseTideSDK 数据库
【发布时间】:2013-02-07 18:04:23
【问题描述】:

我是 TideSDK 的新手,正在努力让本地数据库正常工作。

首先,这是正确的使用方法吗?我希望用户加载游戏,放入一些东西(本地数据库)而不发送到服务器,退出游戏。然后稍后再回来(即使在关闭他的电脑或清除他的互联网之后),加载游戏并且所有本地数据库的东西仍然存在,然后他可以将其发送到服务器。 (我应该改用本地文件吗?)

我得到的错误是:

db.execute("INSERT INTO Games(id, player, timeText) VALUES(1, 1, 0)"); // Putting a zero time in

说是sql语句不正确或者数据库不存在。

理想情况下,我也想用准备好的语句来做 sqlite,但我想从更简单的开始。

这是 HelloWorld 示例的 mod:

https://github.com/TideSDK/TideSDK-HelloWorld

我修改后的代码:

app.js

function DoSqlCall() {
    var lastTime;

    //Open the database first
    var db = Ti.Database.openFile(Ti.Filesystem.getFile(
                          Ti.Filesystem.getApplicationDataDirectory(), 'customdatabase.db'));
   //Create a table and insert values into it
   db.execute("CREATE TABLE IF NOT EXISTS Games(id INTEGER, player INTEGER, timeText TEXT)");

   alert("Hello 1");

   var rows = db.execute("SELECT * FROM Games WHERE 'id' = 1 AND 'player' = 1");
   if(rows.isValidRow()) {
       lastTime = rows.fieldByName('timeText');
       alert("lastTime: " + lastTime.toString());
      //rows.next();
   } else {
       db.execute("INSERT INTO Games(id, player, timeText) VALUES(1, 1, 0)"); // Putting a zero time in
       alert("Put in zero time");
       lastTime = 0;
   }
   //Release memory once you are done with the resultset and the database
   rows.close();
   db.close();
};

// create and set menu
var menu = Ti.UI.createMenu(),
fileItem = Ti.UI.createMenuItem('File'),
exitItem = fileItem.addItem('Exit', function() {
  if (confirm('Are you sure you want to quit?')) {
    Ti.App.exit();
  }
});

menu.appendItem(fileItem);
Ti.UI.setMenu(menu);

index.html

<!DOCTYPE html>
<html>
<head>
  <title>Hello World</title>
  <style type="text/css">
    body {background: #fff;}
  </style>
</head>
<body>
  <h1>Hello World</h1>
  <button id="m_Send" type="button" onclick="DoSqlCall()">Send</button>
  <script type="text/javascript" src="app.js"></script> 
</body>
</html>

【问题讨论】:

  • 所以,我创建了一个新项目并复制并粘贴了您的代码,但没有看到此错误。你在什么系统上运行?
  • 感谢您的回复大卫。我在笔记本电脑上运行 Vista。你有任何错误吗?您的数据库是否正在创建并填充 id=1、player=1 的 0 时间,并且您的应用程序是否第二次运行? (即警报框是否触发,因为我没有得到一个?)

标签: ajax sqlite tidesdk


【解决方案1】:

在你的 SQL 语句中你有这个:

db.execute("INSERT INTO Games(id, player, timeText) VALUES(1, 1, 0)");

您为 timeText 字段传递一个整数,但是,您已将此字段定义为 TEXT 字段。我建议你试试这个:

db.execute("INSERT INTO Games(id, player, timeText) VALUES(1, 1, '0')");

在这里,我正在为第三个字段传递一个字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 2013-09-30
    • 2015-08-09
    • 2015-05-10
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多