1

私はいたるところを見回しましたが、私がやろうとしていることを正確に見つけることができないようです。かなりシンプルなはずです...

私は次のように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の値が割り当てられた2つのボタンがあります。各ボタンには「値」キーがあり、ここで値を割り当てます。私は3つのことを達成しようとしています。ボタンが押されたときに、対応する値の列を見つけます。この列の値を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の経験があまりないので、何が正しく、何が間違っているのかわかりません。どんな助けでも大歓迎です!

ありがとう。

4

1 に答える 1

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

これで問題は解決すると思います。これがうまくいかない場合はお知らせください。

于 2011-12-02T18:49:59.627 に答える