8***@qq.com
8***@qq.com
  • 发布:2020-10-14 16:39
  • 更新:2024-10-30 15:15
  • 阅读:5408

uniapp使用sqlite时在无法读取到已准备好数据的db文件中的数据

分类:uni-app

在项目根路径下放了一个_doc/testdb.db的sqlite数据库文件,然后通过下面截图中的方式去打开数据库访问数据,但是在执行查询的时候发现是没有表的。

查询数据库失败:{"code":-1404,"message":"android.database.sqlite.SQLiteException: no such table: user (Sqlite code 1): , while compiling: select * from user, (OS error - 2:No such file or directory),http://ask.dcloud.net.cn/article/282"} at pages/index/index.vue:84

2020-10-14 16:39 负责人:无 分享
已邀请:
y***@163.com

y***@163.com - test

解决了!
我是真机调试,注意看手机本地文件系统上生成的db大小,只有12k,明显是没有数据的,需要把你_doc下有数据的db拷贝到手机上对应文件夹下doc下,我的路径看下图

s***@qq.com

s***@qq.com

看我这这篇回复就够了

已经完美解决了! 首先要明白一点uniapp读取sqlite文件如果不存在他会自动写入一个空数据库,你当然找不到你的表。

下面一步一步教你如何用Navicat Premium 16创建一个本地sqlite数据库再用uniapp打包android应用在手机模拟器上
(已经创建好表的直接跳到4)

  1. 打开 Navicat Premium 16 创建sqlite链接。

    2.随便创建一个数据库再建一个表。

3.随便写一点数据

4.将数据库文件复制到项目路径的static目录下面(重点: 打包出来的文件路径是在_www下面而不是_doc,如果在_doc下面读取系统会自动给你写一个空数据库,数据库存在表肯定不存在啊,这里把我坑了几个小时。)

5.最好把原来打包的基座app删了,重新安装一下,打包完成利用模拟器自带的文件工具去看下安装好模拟器文件夹内数据库文件大小和你的创建的数据库大小是否一致!(重要,重要,重要,重要,重要,重要,重要,重要,重要)一般不是那个12kb就是对的。


6.文件存在,ok,回到模拟器和Hbuilderx编辑器。


使用连接数据库和查询的方法

    /* 打开数据库 */  
    function handleOpenSQL() {  
        plus.sqlite.openDatabase({  
            name: 'abc',/* 这里是链接名称而不是数据库名称 随便填,在使用数据库的时候要用到 */  
            path: '_www/static/suibian.db',  
            success(e) {  
                console.log(e);  

            },  
            fail(err) {  
                console.log(err);  
            }  
        });  
    }  

    /* 查询表 */  
    function handleSelectSQL() {  
        plus.sqlite.selectSql({  
            name: 'abc',/* 这里是链接名称而不是数据库名称 随便填,在使用数据库的时候要用到 */  
            sql: `select * FROM \"test\"`,/* 查询表名最好加引号 */  
            success(e) {  
                console.log(e);  
            },  
            fail(e) {  
                console.log(e);  
            }  
        })  
    }
  1. 查看控制台打印的结果,分别调用打开数据库和查询表的方法

连接数据库成功会返回一个空对象。而执行查询表的时候也能正常查询到了!

如果还是没有找到表可以试试下面的sql语句,只需把查询替换成如下
select * FROM sqlite_master where type='table'

   /* 查询所有表名称 */  
    function handleSelectSQL() {  
        plus.sqlite.selectSql({  
            name: 'abc',/* 这里是链接名称而不是数据库名称 随便填,在使用数据库的时候要用到 */  
            sql: `select * FROM sqlite_master where type='table'`,  
            success(e) {  
                console.log(e);  
            },  
            fail(e) {  
                console.log(e);  
            }  
        })  
    }

8.可以看到表名被打印出来了。

  • 8***@qq.com

    按照你说的做了 之后报这个android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database (code 8 SQLITE_READONLY),https://ask.dcloud.net.cn/article/282 说只能读取操作 不能新增 修改 怎么解决??

    2024-04-18 16:25

  • 1***@qq.com

    回复 8***@qq.com: 解决了吗?

    2024-09-06 10:51

2***@qq.com

2***@qq.com

路径错了-doc不是这个目录,是APP安装后的doc目录,转绝对路径试试

  • 8***@qq.com (作者)

    我代码中的那个_doc目录下的文件打包后会到什么目录下去?我想让项目中的db文件打包安装后在app的工程目录的doc下,项目工程应该怎么放?

    2020-10-16 10:23

  • y***@163.com

    数据库连接都开打了,明显不是路径的问题

    2020-11-11 08:54

[已删除]

[已删除]

承接前端H5、小程序、APP、PC端网站等外包,主要技术栈为vue、uni-app,有意请加微信:13070273424(我是前端。1. 我找有单子的服务端合作人。2. 整个项目外包给我,我这也有个小团队。3. 兼职,公司/团队偶尔丢点小项目或者页面调整等)

f***@qq.com

f***@qq.com

楼主问题解决了吗

Azikou

Azikou

问下 ios可以使用 plus.sqlite.openDatabase打开数据库么。

2***@qq.com

2***@qq.com

把db文件放到static里,static是只读的 ,没办法向数据库插入数据 ,这怎么弄

要回复问题请先登录注册