各位大哥, 求教 uniapp操作sqlite 打开连接没报错,但在项目 里没有生成db文件, 执行SQL就报错
"message": "android.database.sqlite.SQLiteException: unknown error (Sqlite code 0 SQLITE_OK): Queries can be performed using SQLiteDatabase query or rawQuery methods only., (OS error - 2:No such file or directory),https://ask.dcloud.net.cn/article/282 !
关于代码 操作封装
/** 数据库是否打开--打开了就返回true,否则返回false
- @param {Object} name 数据库名称
- @param {Object} path 数据库地址,uniapp推荐以下划线为开头
*/
function isOpen(name, path) {
return plus.sqlite.isOpenDatabase({name,path})
}
/** 创建数据库或者打开
- @param {Object} name 数据库名称
- @param {Object} path 数据库地址,uniapp推荐以下划线为开头
*/
function openSqlite(name, path) {
return new Promise((resolve, reject) => {
//这plus.sqlite只在手机上运行
plus.sqlite.openDatabase({
name: name, //数据库名称
path: path, //数据库地址,uniapp推荐以下划线为开头
success(e) {
resolve(e); //成功回调
},
fail(e) {
reject(e); //失败回调
}
})
})
}
//在该数据库里创建表格/添加数据
//数据库不能存对象,数组 需要转json后再存
/** 执行sql命令 对数据库 执行增删改等操作的SQL语句
- @param {Object} name 数据库名称
- @param {Object} sql sql命令
*/
function executeSql(name, sql) {
return new Promise((resolve, reject) => {
plus.sqlite.executeSql({
name: name,
sql: sql,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
}
})
})
}
/** 执行查询的SQL语句
- @param {Object} name 数据库名称
- @param {Object} sql sql命令
*/
function selectSql(name, sql) {
if (name !== undefined) {
return new Promise((resolve, reject) => {
plus.sqlite.selectSql({
name: name,
sql: sql,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
}
})
})
} else {
return new Promise((resolve, reject) => {
reject("错误查询")
});
}
}
/** 关闭数据库
- @param {Object} name 数据库名称
*/
function closeSQL(name) {
return new Promise((resolve, reject) => {
plus.sqlite.closeDatabase({
name: name,
success(e) {
resolve(e);
},
fail(e) {
reject(e);
}
})
})
}
/** - 执行事务
- @param {Object} name 数据库名称
- @param {Object} operationc begin(开始事务)、commit(提交)、rollback(回滚)
*/
function transactionDB(name,operationc) {
return new Promise((resolve, reject) => {
plus.sqlite.transaction({
name: name,
operation: operation,
success: function(e){
resolve(operation,'成功!')
},
fail: function(e){
console.log('transaction failed: '+JSON.stringify(e));
reject(operation,'失败!')
}
});
})
}
export default {
isOpen,
openSqlite,
selectSql,
executeSql,
closeSQL,
transactionDB
}
引入执行
import sqlite from '@/utils/sqlite'
onLoad() {
let name="test";
let path="_doc/test.db";
sqlite.openSqlite(name,path).then((resRun) => {
console.log(resRun);
}).catch((err) => {
uni.showToast({
title: '打开sqlite失败',
icon:'error',
duration: 2000, //提示的延迟时间,单位毫秒,默认:1500
mask:false,
// image:'./image.png',//自定义图标的本地路径
});
console.error('打开sqlite失败', err);
return
});
let sqlCreateTable ="CREATE TABLE IF NOT EXISTS msg_list(id INTEGER PRIMARY KEY autoincrement,phone INTEGER,msgId INTEGER,sender INTEGER,nickname VARCHAR(50),picture VARCHAR(400), msgType INTEGER,sendType INTEGER,dataUrl VARCHAR(500),message VARCHAR(4000),status INTEGER,sendTime TEXT,sendTimeUnix INTEGER);";
sqlite.executeSql(name,sqlCreateTable).then((resRun) => {
console.log(resRun);
}).catch((err) => {
uni.showToast({
title: '执行建表sqlite失败',
icon:'error',
duration: 2000, //提示的延迟时间,单位毫秒,默认:1500
mask:false,
// image:'./image.png',//自定义图标的本地路径
});
console.error('执行建表sqlite失败', err);
return
});
let tableSql="SELECT * FROM sqlite_master WHERE TYPE='table'";
console.log(tableSql);
sqlite.executeSql(name,tableSql).then((result) => {
console.log(result);
let res=JSON.stringify(result);
console.log(res);
}).catch((errs) => {
uni.showToast({
title: '查询全表失败',
icon:'error',
duration: 2000, //提示的延迟时间,单位毫秒,默认:1500
mask:false,
// image:'./image.png',//自定义图标的本地路径
});
console.log(errs);
});
}
0 个回复