2011-11-30 33 views
1

我到處都看了看,但我似乎無法找到我正在嘗試做的事情。它應該是相當簡單的...從Titanium Appcelerator 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) 

這一切都在變「主人」是傳過來的字符串click事件偵聽器。

這是我的錯誤:

message = "Attempted to access unknown result column 25"; 

我沒有與SQL太多的經驗,所以我不知道我在做什麼正確的,什麼我做錯了。任何幫助表示讚賞!

謝謝。

+0

關於我可以嘗試的任何想法? – gjunkie

回答

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

如果你沒有找到該行的錯誤,很可能你的數據是沒有得到在第一時間正確地插入。下面是我插入我的測試行玩家「富」:

db.execute('insert into playersTable (name, "50", "25") values (?,?,?)', 'foo', 0, 0); 

我認爲這應該可以解決您的問題。讓我知道如果這不適合你。

+0

嗨DocDude,謝謝你的真棒回答!我不知道?語法不適用於列名稱。我敢肯定,我遇到的很多問題都可能歸因於此。這個答案似乎對我來說工作得很好! – gjunkie