worklight直接更新后websql不能drop和create table
Posted
技术标签:
【中文标题】worklight直接更新后websql不能drop和create table【英文标题】:Websql can not drop and create table after worklight direct update 【发布时间】:2014-12-08 11:06:04 【问题描述】:我们正在使用 Worklight 框架 6.1.0.2 20141016-1539 构建混合应用程序。 在 main.js 的 wlCommonInit 方法中,我们使用如下代码设置表模式:
db = openDatabase('mydb', '1.0', 'Test DB', 10 * 1024 * 1024);
db.transaction(function (tx)
....
tx.executeSql("CREATE TABLE IF NOT EXISTS CAR_OFFLINE_DATA (COMPANY_CODE TEXT, SLIP_NO TEXT, DELIVERY_AREA_CODE TEXT, DELIVERY_DATE TEXT, DELIVERY_ATTRIBUTE TEXT, DELIVERY_TYPE_CODE TEXT, CAR_CODE TEXT, CREATETIME DATE DEFAULT CURRENT_TIMESTAMP,UPDATETIME DATE)");
....
,dao.db_error);
为了满足我们在下一个补丁中的新要求,我们的数据模型必须改变。 因此,我们创建新表来替换用于相同目的的 CAR_OFFLINE_DATA 表。 然后我们将使用 worklight 直接更新来修补应用程序。
这是我们在下一个补丁中所做的。 我们删除了以前版本中的表,并创建了一个名称相似的表,只是它有额外的列:
db = openDatabase('mydb', '1.0', 'Test DB', 10 * 1024 * 1024);
db.transaction(function (tx)
tx.executeSql("DROP TABLE IF EXISTS CAR_OFFLINE_DATA");//SQL 1 rebuild this table
....
tx.executeSql("CREATE TABLE IF NOT EXISTS CAR_OFFLINE_DATA_V2 (SEQID integer primary key autoincrement ,COMPANY_CODE TEXT, SLIP_NO TEXT, DELIVERY_AREA_CODE TEXT, DELIVERY_DATE TEXT, DELIVERY_ATTRIBUTE TEXT, DELIVERY_TYPE_CODE TEXT, CAR_CODE TEXT, CREATETIME DATE DEFAULT CURRENT_TIMESTAMP,UPDATETIME DATE)");
//SQL 2
....
,dao.db_error);
,
在我们直接更新应用后,奇怪的事情发生了。 desktop safari 和 chrome 的调试工具显示,表 CAR_OFFLINE_DATA 没有被 web sql 删除,并且 CAR_OFFLINE_DATA_V2 也不存在。 任何与下面的 CAR_OFFLINE_DATA_V2 相关的 sql 执行都失败,并警告他们无法使用不存在的表准备语句。 但是如果我们为每一个sql执行附加成功回调函数,那么每次启动应用程序时肯定会调用这些函数。
db.transaction(function(tx)
var sql = "DELETE FROM CAR_OFFLINE_DATA_V2 WHERE CREATETIME < datetime('now','-2 day')";
tx.executeSql(sql);
,dao.db_error);
我想知道为什么我们不能在 worklight 直接更新后在应用程序中删除并创建 web sql 表? 是因为直接更新机制吗?还是仅仅因为一些与 websql 相关的问题?
感谢您的任何建议或意见。
【问题讨论】:
您是否验证了此代码在没有直接更新的情况下是否有效?也就是说,安装应用>使用应用>安装更新的应用>>验证表已删除并创建新表。 另外,您在哪个环境中进行测试? ios模拟器?安卓模拟器? 是的,这个问题只有在直接更新后才会出现。如果我们使用新打包的 .ipa 或 .apk 为用户修补最新版本,那么一切都会好起来的,但我们的老板不喜欢用这种方式分发更新。我们在 iphone 5S 真机、zenfone 5 和安卓模拟器上测试了这个应用,但都失败了。 是的,我明白了。我正在尝试隔离问题...您能否提供一个能够重现此问题的测试用例应用程序以便我们对其进行调试? 好的,我会尽力帮助您在我们紧密耦合的应用程序中隔离这个问题。即使我们退出应用程序,在后台将其删除,然后在直接更新后重新启动它,也会发生此问题。 【参考方案1】:最终断定该错误与 Worklight 无关。
我们发现是语法错误导致 web-sql 事务 失败,回滚改变表模式的sql。
【讨论】:
以上是关于worklight直接更新后websql不能drop和create table的主要内容,如果未能解决你的问题,请参考以下文章