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の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)
これはすべて、変数「所有者」が文字列として渡されるクリックイベントリスナーです。
これは私が得るエラーです:
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