База данных TideSDK

Я новичок в TideSDK и пытаюсь заставить работать локальную базу данных.

Прежде всего, правильно ли это использовать? Я ожидаю, что пользователь загрузит игру, вставит что-то (локальную базу данных) без отправки на сервер, выйдет из игры. Затем вернитесь к нему позже (даже после выключения его компьютера или очистки его интернета), загрузите игру, и все содержимое локальной базы данных все еще будет там, и тогда он может отправить его на сервер. (Должен ли я вместо этого использовать локальный файл?)

Ошибка, которую я получаю, связана с:

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

Он говорит, что это неправильный оператор sql или база данных не существует.

В идеале я бы тоже хотел сделать sqlite с готовыми операторами, но хотелось начать проще.

Это мод примера HelloWorld:

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>

person Rewind    schedule 07.02.2013    source источник
comment
Итак, я создал новый проект, скопировал и вставил ваш код и не вижу этой ошибки. На какой системе вы работаете?   -  person David M.    schedule 09.02.2013
comment
Спасибо за ваш ответ Дэвид. Я использую Vista на ноутбуке. У тебя вообще какие-то ошибки? Создается ли ваша база данных и заполняется ли она временем 0 для id=1, player=1, и запускается ли ваше приложение во второй раз? (То есть срабатывают окна предупреждений, потому что я не получаю ни одного?)   -  person Rewind    schedule 09.02.2013


Ответы (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')");

Здесь я передаю строку для третьего поля.

person cohoman    schedule 27.02.2013