Получить значение от столбца Titanium Appcelerator DB

StackOverflow https://stackoverflow.com/questions/8322717

  •  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);

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top