起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4231|回复: 9

[处理中5] 3.8 版本如何将sqlite 的 db 文件打包到app中?

[复制链接]

20

主题

149

帖子

410

积分

中级会员

Rank: 3Rank: 3

积分
410
QQ
发表于 2019-6-5 10:13:03 | 显示全部楼层 |阅读模式
http://bbs.wex5.com/forum.php?mod=viewthread&tid=86140&extra=page%3D1               


原来的做法是将 *.db 文件放到/Native/templates/advanced/www 目录下面的。升级到 3.8 之后不起作用了。使用以下代码,可以打开数据库,但是找不到 数据库表
  1. this.database = window.sqlitePlugin.openDatabase({
  2.         name : 'dbname.db',
  3.         createFromLocation : 1
  4. });
复制代码

目前是将表结构和数据保存在*.sql文件中,然后app 初次启动的时候执行一遍,这样没有问题。

20

主题

149

帖子

410

积分

中级会员

Rank: 3Rank: 3

积分
410
QQ
 楼主| 发表于 2019-6-5 10:21:10 | 显示全部楼层
http://bbs.wex5.com/forum.php?mo ... page%3D1&page=2
这个帖子也讨论了 3.8 版本的 sqlite插件无法将 db 文件打包到app中,现在情况怎么样了。有没有人有解决方案?
回复 支持 反对

使用道具 举报

20

主题

149

帖子

410

积分

中级会员

Rank: 3Rank: 3

积分
410
QQ
 楼主| 发表于 2019-6-5 11:29:34 | 显示全部楼层
目前我的解决办法:将 3.6 版本的 sqlite 插件 com.brodysoft.sqlitePlugin  复制拷贝到 3.8 版本Plugins下面。不使用 3.8 版本里面的 sqlite 插件 cordova-sqlite-storage。

  1. try {
  2.                         var x5AppAgents = /x5app\/([0-9.]*)/.exec(navigator.userAgent);
  3.                         var x5Version = "notInApp";
  4.                         if (x5AppAgents && x5AppAgents.length > 1) {
  5.                                 x5Version = x5AppAgents[1];
  6.                         }

  7.                         if (localStorage && localStorage.getItem(x5Version + 'introPage') === null) {
  8.                                 window.sqlitePlugin.deleteDatabase({
  9.                                         name : "CRMAPP_DB.db",
  10.                                         location : 1
  11.                                 }, function(succ) {
  12.                                         //alert('success...');
  13.                                 }, function(err) {
  14.                                         //alert(err);
  15.                                 });
  16.                         }
  17.                 } catch (e) {
  18.                         console.log("删除sqlite mop.db异常: " + e);
  19.                 }

  20.                 var self = this;
  21.                 document.addEventListener('deviceready', function() {
  22.                         self.database = window.sqlitePlugin.openDatabase({
  23.                                 name : 'CRMAPP_DB.db',
  24.                                 createFromLocation:1
  25.                         });
  26.                        
  27.                 });
复制代码
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35910
发表于 2019-6-10 14:11:14 | 显示全部楼层
已作为缺陷提交内部产品组
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

9

主题

71

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
QQ
发表于 2019-7-10 10:26:23 | 显示全部楼层
Fancye 发表于 2019-6-5 11:29
目前我的解决办法:将 3.6 版本的 sqlite 插件 com.brodysoft.sqlitePlugin  复制拷贝到 3.8 版本Plugins下 ...

你好,我想请问一下,使用sqlite一定要用打包服务器打包吗?
回复 支持 反对

使用道具 举报

20

主题

149

帖子

410

积分

中级会员

Rank: 3Rank: 3

积分
410
QQ
 楼主| 发表于 2019-7-10 16:57:24 | 显示全部楼层
mmmonkeyyy 发表于 2019-7-10 10:26
你好,我想请问一下,使用sqlite一定要用打包服务器打包吗?

或者你提前准备sql脚本文件,app启动之后再执行sql脚本,去初始化sqlite数据库
回复 支持 反对

使用道具 举报

9

主题

71

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
QQ
发表于 2019-7-11 09:16:23 | 显示全部楼层
Fancye 发表于 2019-7-10 16:57
或者你提前准备sql脚本文件,app启动之后再执行sql脚本,去初始化sqlite数据库 ...

感谢回复。之前没有弄个sqlite,所以不懂。请问你说的这个sql脚本就是执行数据库的操作语句吗?他应该建立到项目中吗?打包的时候选择整个项目就能直接打进去了吗?因为wex5有的文档太老了,我也不知道到底怎么执行,也不知道大家的方案后来有没有成功。我之前打包demo就没有执行成功。
回复 支持 反对

使用道具 举报

20

主题

149

帖子

410

积分

中级会员

Rank: 3Rank: 3

积分
410
QQ
 楼主| 发表于 2019-7-11 11:02:23 | 显示全部楼层
跟打包没有关系,在App启动的时候,去执行sql脚本。可以查看这个示例:UI2/demo/sqlite/simpleData/index.w
页面中有引用 demoDB.js 文件,其中 DemoDB.prototype.initData 这个函数,判断sqlite中是否存在业务表,如果不存在,那么执行sql脚本去初始化数据库。
代码片段如下:
  1. /**
  2.          * 这里给出一个自动判断并初始化数据库的方案
  3.          */
  4.         DemoDB.prototype.initData = function(onSuccess) {
  5.                 var db = this.getDatabase();
  6.                 // 检查表是否已存在
  7.                 var sqlCheckExists = "SELECT count(*) AS cnt FROM sqlite_master WHERE type = 'table' AND UPPER(name) in ('DEMO_REGION', 'DEMO_TEST') ";
  8.                 SqliteUtil.executeSql(db, sqlCheckExists, null, function(res) {
  9.                         if (res.rows.item(0).cnt < 2) {
  10.                                 // 如果不存在则获取初始化脚本
  11.                                 require(["text!$UI/demo/sqlite/demoDB.sql"], function(data) {
  12.                                         executeSqlFile(data);
  13.                                 });
  14.                         } else {
  15.                                 doSuccess();
  16.                         }
  17.                 });
  18.                 // 执行初始化脚本
  19.                 function executeSqlFile(content) {
  20.                         var sqls = content.split(";");
  21.                         SqliteUtil.executeBatch(db, sqls, null, function() {
  22.                                 doSuccess();
  23.                         })
  24.                 }
  25.                 function doSuccess() {
  26.                         if ($.isFunction(onSuccess)) {
  27.                                 onSuccess.call(this);
  28.                         }
  29.                 }
  30.         };
复制代码
回复 支持 反对

使用道具 举报

20

主题

149

帖子

410

积分

中级会员

Rank: 3Rank: 3

积分
410
QQ
 楼主| 发表于 2019-7-11 16:14:28 | 显示全部楼层
jishuang 发表于 2019-6-10 14:11
已作为缺陷提交内部产品组

内部产品组测试的如何了?最近将mac os 升级到 10.14.5,wex5升级到 3.8, xcode升级到 10.2.1
然后发现:旧版本的sqlite插件(3.6自带) com.brodysoft.sqlitePlugin 打包会报错,新版本的sqlite插件(3.8自带)打包不会出错,但是取不到sqlite数据


部分错误信息如下:
  1. The following build commands failed:
  2.               CompileC /Users/computech/Library/Developer/Xcode/DerivedData/千里眼演示-hdbxkrztohyaduakohlaxqgijcih/Build/Intermediates.noindex/ArchiveIntermediates/千里眼演示/IntermediateBuildFilesPath/千里眼演示.build/Release-iphoneos/千里眼演示.build/Objects-normal/armv7/SQLitePlugin.o 千里眼演示/Plugins/com.brodysoft.sqlitePlugin/SQLitePlugin.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler
  3.       (1 failure)
  4.       Error: Error code 65 for command: xcodebuild with args: -xcconfig,/Users/computech/Desktop/WeX5_V3.8-mac/model/Native/千里眼(240.11)/build/src/platforms/ios/cordova/build-release.xcconfig,-workspace,千里眼演示.xcworkspace,-scheme,千里眼演示,-configuration,Release,-destination,generic/platform=iOS,-archivePath,千里眼演示.xcarchive,archive,CONFIGURATION_BUILD_DIR=/Users/computech/Desktop/WeX5_V3.8-mac/model/Native/千里眼(240.11)/build/src/platforms/ios/build/device,SHARED_PRECOMPS_DIR=/Users/computech/Desktop/WeX5_V3.8-mac/model/Native/千里眼(240.11)/build/src/platforms/ios/build/sharedpch,-UseModernBuildSystem=0
  5.    ****ERROR****: 子任务 "exec" 执行失败。
  6.    ****ERROR****: 任务 "buildIOS" 执行失败。
复制代码



回复 支持 反对

使用道具 举报

20

主题

149

帖子

410

积分

中级会员

Rank: 3Rank: 3

积分
410
QQ
 楼主| 发表于 2019-7-17 18:04:52 | 显示全部楼层
3.8版本的 cordova-sqlite-storage 如何将db文件打包的时候复制到移动设备
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-18 22:01 , Processed in 0.065340 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表