从钛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);
我认为这应该解决您的问题。让我知道这是否对您不起作用。
不隶属于 StackOverflow