钛工作室,JavaScript和SQL错误…我想不通

Titanium Studio, JavaScript and SQL Error... Cant figure it out

本文关键字:错误 想不通 SQL 工作室 JavaScript      更新时间:2023-09-26
var url = "http://api.reddit.com/";
var dataArray = [];
var working = function(){
var getData = JSON.parse(this.responseText); 
var titles = getData.data.children;
for(var i=0, j=titles.length; i<j; i++)
{
    var title = titles[i].data.title;
    dataArray.push({
        title: title,
        favorite: 0
    });
    }
    save(dataArray);
}; //working

var save = function(arg){
    console.log(arg);
    var db = Ti.Database.open("newData");
db.execute('CREATE TABLE IF NOT EXISTS redditTitles (id INTEGER PRIMARY KEY, name       TEXT, favorite INTEGER)');
db.execute('INSERT INTO redditTitles (name, favorite) VALUES (?, ?)',  arg.title, arg.favorite);
var rowID = db.lastInsertRowId;
//newRow.id = rowID;
//rows.close();
db.close(); 
gather();
};
var dataContent = [];
var gather = function(){    
var db = Ti.Database.open("newData");
var dbRows = db.execute("SELECT name, favorite FROM redditTitles"); // Returns a Result Set object
while(dbRows.isValidRow()){
    dataContent.push({
        title: dbRows.fieldByName("name"),
        fav: dbRows.fieldByName("favorite")
    });
    console.log("dataContent: "+ dataContent.title);
    dbRows.next();
}
dbRows.close();
db.close();
console.log(dataContent);
userInterAPI();
};
var error = function(){
alert("Please check your network connection and try again.");
};

var client = Ti.Network.createHTTPClient({
onload: working,
onerror: error,
timeout: 5000

});

client.open("GET", url);
client.send();

所以基本上我和我的老师一直在挠头试图弄清楚为什么参数会显示所有的数据,但在数据保存后,我们去reconsole注销它,它会显示为空。不知道为什么。谁来帮帮我!

您只保存一个项目(不正确-这就是为什么未定义的原因)。如果你想保存所有内容,你必须遍历整个数组。

var save = function(arg) {
    console.log(arg);
    var db = Ti.Database.open("newData");
    db.execute('CREATE TABLE IF NOT EXISTS redditTitles (id INTEGER PRIMARY KEY, name       TEXT, favorite INTEGER)');
    db.execute("BEGIN"); // Transaction
    arg.forEach(function(item) {
        db.execute('INSERT INTO redditTitles (name, favorite) VALUES (?, ?)',  item.title, item.favorite);
        //var rowID = db.lastInsertRowId;
    });
    db.execute("COMMIT");
    db.close(); 
    gather();
};

在名为gather的函数中-如果你想看到选定的标题,你应该使用:

console.log(dbRows.fieldByName("name"))

或者(这是你想要使用的):

console.log(dataContent[dataContent.length - 1].title)

不是

console.log(dataContent.title); // dataContent is an Array .

*当然你最好避免在每次迭代中使用dataContent.length。这只是一个例子