0

私は TideSDK を初めて使用し、ローカル データベースを機能させようとしています。

まず、これは正しい使い方ですか?ユーザーがゲームをロードし、サーバーに送信せずにいくつかのもの (ローカル データベース) を入れ、ゲームを終了することを期待しています。その後、後で戻ってきて(PCの電源を切ったり、インターネットをクリアしたりした後でも)、ゲームをロードすると、すべてのローカルデータベースがまだそこにあるので、サーバーに送信できます。(代わりにローカル ファイルを使用する必要がありますか?)

私が得ているエラーは次のとおりです。

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>
4

1 に答える 1

0

あなたの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')");

ここでは、3 番目のフィールドに文字列を渡しています。

于 2013-02-27T04:25:43.767 に答える