gpt4 book ai didi

android - 钛合金中的 SQLite 更新查询

转载 作者:行者123 更新时间:2023-11-29 12:37:32 25 4
gpt4 key购买 nike

您好,Titanium 开发人员。

我是钛合金开发新手,但不是 Javascript 开发新手。我的 Titanium Alloy 应用程序中的 SQLite 更新查询遇到问题并寻求您的帮助。

我的 Controller js文件如下。

var items = [];
var db = Ti.Database.open('listDB');
//db.file.setRemoteBackup(false);

db.execute('CREATE TABLE IF NOT EXISTS liststatus(id INTEGER PRIMARY KEY, name TEXT, value INTEGER);');
var my_result_set = db.execute('SELECT * FROM liststatus');
var records = my_result_set.rowCount;

Ti.API.info(records);
if(records == 0){
db.execute('INSERT INTO liststatus(id, name, value) VALUES (1, "Node #1", 0)');
db.execute('INSERT INTO liststatus(id, name, value) VALUES (2, "Node #2", 0)');
db.execute('INSERT INTO liststatus(id, name, value) VALUES (3, "Node #3", 1)');
}

var rows = db.execute('SELECT * FROM liststatus');

while (rows.isValidRow())
{
if(rows.fieldByName('value') == 1){
var truVal = "true";
}else{
var truVal = "false";
}
items.push({"id": rows.fieldByName('id'), "label":{text: rows.fieldByName('name')},"switchVal":{value: truVal}, "template": "title_only"});
rows.next();
};

$.dynamicListView.sections[0].setItems(items);

var itemsUpdate = [];

function outputState(e){
var section = $.dynamicListView.sections[e.sectionIndex];
var item = section.getItemAt(e.itemIndex);
//itemsUpdate.push({"id": item.id, "value": e.value});
var val = e.value;
var itemId = item.id;
//db.execute('UPDATE liststatus SET value=? WHERE id=?',1,1);
db.execute('UPDATE liststatus SET value=? WHERE id=?',val,itemId);
}
rows.close();
db.close();

我的 View xml 看起来像这样。

<Alloy>
<Window class="container" id="dbWin">
<!--<Toolbar top="0" platform="ios">
<Items>
<Button id="button" onClick="saveData">Save</Button>
</Items>
</Toolbar>-->
<ListView id="dynamicListView">
<Templates>
<ItemTemplate name="title_only">
<View layout="horizontal">
<Label class="label" bindId="label"/>
<Switch bindId="switchVal" onChange="outputState" />
</View>
</ItemTemplate>
</Templates>
<ListSection/>
</ListView>
</Window>
</Alloy>

问题是当切换开关改变时,更新查询根本不会触发。我该如何解决这个问题?我不在这里做什么?非常感谢您的帮助!

问候。

雪茄

最佳答案

我不知道为什么它没有触发,但我会先将 Ti.Api.info 添加到该函数并查看它是否被调用。

现在,您的代码中有一些基本错误(与 javascript 而不是 Titanium 相关的错误)可能会导致问题和内存泄漏。

  1. 您正在函数范围( Controller 范围)之外创建 db 变量。因为它是在函数内部使用的,所以 js 引擎将保留对它的引用 - 这样会将它保存在内存中 - 因此存在内存泄漏。
  2. 你执行一些代码,然后关闭你的数据库。当您调用该函数时,您的数据库连接应该已经关闭 - 我会在 Titanium 控制台中查找有关该更新执行的错误。

您应该做的是在函数范围内创建、打开然后关闭数据库的新实例。

希望对你有帮助

关于android - 钛合金中的 SQLite 更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com