Получить значение от столбца Titanium Appcelerator DB
-
26-10-2019 - |
Вопрос
Я оглянулся везде, но, кажется, не могу найти именно то, что пытаюсь сделать. Это должно быть довольно просто ...
У меня есть таблица DB, установленная так:
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)
Это все в прослушивателе событий, где переменная «владелец» передается как строка.
Это ошибка, которую я получаю:
message = "Attempted to access unknown result column 25";
У меня нет слишком большого опыта с SQL, поэтому я не уверен, что я делаю правильно и что делаю не так. Любая помощь ценится!
Спасибо.
Решение
Я не уверен, в чем именно проблема, но следующее работает для меня. Обратите внимание, что "?" Синтаксис замены переменной гарантирует, что значения указаны правильно для 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);
Я думаю, что это должно решить вашу проблему. Дайте мне знать, если это не сработает для вас.