从Titanium Appcelerator db列获取价值

时间:2011-11-30 07:56:48

标签: sql titanium-mobile

我到处寻找,但我似乎无法找到我正在尝试做的事情。它应该相当简单......

我有一个像这样设置的数据库表:

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 :(得分:0)

我不确定问题究竟是什么,但以下内容对我有用。注意“?”变量替换语法确保为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);

我认为这应该可以解决您的问题。如果这对您不起作用,请告诉我。