Получить значение из столбца db Titanium Appcelerator - PullRequest
1 голос
/ 30 ноября 2011

Я везде оглядывался, но не могу найти именно то, что пытался сделать.Это должно быть довольно просто ...

У меня есть таблица БД, настроенная так:

var db = Ti.Database.open('playerInfo.db');
db.execute('CREATE TABLE IF NOT EXISTS playersTable (id INTEGER PRIMARY KEY, name TEXT NOT NULL, "50" INTEGER, "25" INTEGER )');

У меня есть две кнопки с назначенными значениями 25 и 50 соответственно.Каждая кнопка имеет клавишу «значение», где я назначаю свои значения.Я пытаюсь выполнить три вещи: Когда нажата кнопка, найдите столбец соответствующего значения.увеличьте значение этого столбца на 1. Извлеките новое значение и сохраните его в журнале.

Вот так выглядит мой код при нажатии кнопки:

var rows = db.execute("SELECT '" + button.value + "' FROM playersTable WHERE name= '" + owner + "'");

var imagesString = rows.fieldByName(button.value);
Ti.API.debug(imagesString)

Это все вслушатель события щелчка, в котором переменная "owner" передается в виде строки.

Это ошибка, которую я получаю:

message = "Attempted to access unknown result column 25";

У меня нет большого опыта работы с sqlпоэтому я не уверен, что я делаю правильно и что я делаю неправильно.Любая помощь приветствуется!

Спасибо.

1 Ответ

0 голосов
/ 02 декабря 2011

Я не совсем точно знаю, в чем проблема, но у меня работает следующее. Обратите внимание, что "?" Синтаксис подстановки переменных гарантирует, что значения правильно указаны в MySQL:

button = e.source;
db = Titanium.Database.open('test');
var rows = db.execute("SELECT * FROM playersTable WHERE name= ?", "foo");
// Theoretically this should be returning a single row. For other results,
// we would loop through the result set using result.next, but here just check if
// we got a valid row.
if (rows.isValidRow()) {
    var imagesString = rows.fieldByName(button.value);
    var id = rows.fieldByName('id');
    imagesString = imagesString + 1;
    Ti.API.info("id = " + id + " val = " + imagesString);
    // The ? substitution syntax doesn't work for column names, so we 
    // still need to stick the button value into the query string.
    db.execute('UPDATE playersTable set "' + button.value +'"= ? where id = ?', imagesString, id);
}
else
{
    Ti.API.info("Row not found.");
}
db.close();

Если вы получите сообщение об ошибке «строка не найдена», возможно, ваши данные не будут правильно вставлены. Вот как я вставил свой тестовый ряд для игрока "foo":

db.execute('insert into playersTable (name, "50", "25") values (?,?,?)', 'foo', 0, 0);

Я думаю, это должно решить твою проблему. Дайте мне знать, если это не сработает для вас.

...