uni-app sqlite数据库只能执行select查询操作,不能执行insert操作

发布于 1周前 作者 gougou168 来自 Uni-App

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生成

3 回复

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操作,请检查以下几点:

  1. 数据库文件路径:确保数据库文件路径正确,uni-app通常使用相对路径。
  2. SQL语句语法:确保SQL语句语法正确,特别是占位符的使用。
  3. 错误处理:仔细检查fail回调中的错误信息,它通常会提供问题的关键线索。
  4. 权限问题:虽然uni-app通常处理权限问题,但在某些平台上(如小程序),你可能需要额外处理权限请求。

如果以上都确认无误,但问题依旧存在,请提供更详细的错误信息以便进一步分析。

回到顶部