uni-app sqlite数据库只能执行select查询操作,不能执行insert操作
uni-app sqlite数据库只能执行select查询操作,不能执行insert操作
uniapp 手机端调试
uniapp 手机端调试。
sqlite v3版本的数据库,是用SQLiteStudio(3.1.1)生成的。
在代码中使用plus.sqlite.xxx的API接口进行数据库操作。
executeSql failed: {“code”:-1404,“message”:“android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database (Sqlite code 8 SQLITE_READONLY), (OS error - 11:Try again”}
项目 | 信息 |
---|---|
开发环境 | SQLiteStudio(3.1.1) |
版本号 | sqlite v3 |
项目创建方式 | 使用SQLiteStudio生成 |
plus.sqlite.openDatabase的第二个参数path,不能使用绝对路径file://xxxx,必须使用 _doc/xxx 相对路径,才能对数据库进行写入操作,path参数使用绝对路径后,数据库只能读不能写。
我也遇到这个问题了,把db文件放入到了代码目录结构static目录下,如果当如到_doc目录,打包成apk时,想带着创建号的db文件,db文件在代码目录结构中放到那里呢?
在uni-app中使用SQLite数据库时,通常是可以执行包括INSERT
在内的多种SQL操作的。如果你遇到只能执行SELECT
查询操作而不能执行INSERT
操作的问题,可能是由于权限配置、数据库连接或SQL语句错误等原因造成的。以下是一个简单的示例,展示如何在uni-app中执行INSERT
操作。
首先,确保你已经在manifest.json
中配置了SQLite的权限(通常uni-app已经默认支持,但检查总是好的):
// manifest.json
{
"mp-weixin": { // 或其他平台配置
"requiredPrivateInfos": ["chooseAddress", "getUserInfo"] // 根据需要添加,通常与SQLite无直接关系
}
}
然后,在你的uni-app项目中,使用以下代码来执行INSERT
操作:
// 在页面的onLoad或其他合适的位置调用以下函数
function insertData() {
const db = uni.getDatabaseManager(); // 获取数据库管理器
db.open({
name: 'test.db', // 数据库名称
success: function () {
const db = uni.getDatabase(); // 获取数据库实例
db.execute({
sql: 'CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)', // 创建表(如果不存在)
success: function () {
db.execute({
sql: 'INSERT INTO users (name, age) VALUES (?, ?)', // 插入数据
args: ['Alice', 30], // 参数列表,与SQL语句中的?对应
success: function (res) {
console.log('Insert success:', res);
},
fail: function (err) {
console.error('Insert failed:', err);
}
});
},
fail: function (err) {
console.error('Create table failed:', err);
}
});
},
fail: function (err) {
console.error('Open database failed:', err);
}
});
}
上述代码展示了如何打开一个名为test.db
的数据库,创建一个名为users
的表(如果不存在),并向其中插入一条记录。
如果你仍然无法执行INSERT
操作,请检查以下几点:
- 数据库文件路径:确保数据库文件路径正确,uni-app通常使用相对路径。
- SQL语句语法:确保SQL语句语法正确,特别是占位符的使用。
- 错误处理:仔细检查
fail
回调中的错误信息,它通常会提供问题的关键线索。 - 权限问题:虽然uni-app通常处理权限问题,但在某些平台上(如小程序),你可能需要额外处理权限请求。
如果以上都确认无误,但问题依旧存在,请提供更详细的错误信息以便进一步分析。