鸿蒙原生开发-关系型数据库提交数据时的一个小坑

954 阅读1分钟

首先:创建一个数据表模板

CREATE TABLE IF NOT EXISTS ${this.tableName} (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      title TEXT NOT NULL,
      content TEXT NOT NULL,
      date_added INTEGER NOT NULL
    )

得到一个字段如下的表

image.png

接下来调用上传数据库数据的api

1.定义数据字段接口

因为insert方法中没有代码提升容易出错,所以我们选择定义一个接口并在insert方法中用as强制确定类型,这样就有代码提示了

interface NoteItem {
  id: number | null // 新增时设置 id 为空值 null,用于自增 id
  title: string
  content: string
  date_added: number
}

2获取操作数据库的对象

const store = await this.getStoreInstance()

3调用insert上传数据

const id = await store.insert(this.tableName, {
  id: null, // 新增时设置 id 为空值 null,用于自增 id
  title: '关键的问题',
  content: '333',
  date_added: Date.now()
} as NoteItem)

但是这样会报一个错误:

image.png 这个错误信息表明在你的代码中存在类型不匹配的问题。具体来说,它指出你试图将一个类型为 NoteItem 的参数赋值给了一个类型为 ValuesBucket 的参数,但是这两种类型不兼容。

这是内置的ValuesBucket类型:

image.png

那如何又想有代码提示又解决这个错误呢,我的方案是:

使用 interface NoteItem extends ValuesBucketNoteItem 接口扩展为 ValuesBucket 接口,这样 NoteItem 就拥有了 ValuesBucket 的所有属性。然后,你在 NoteItem 中添加了自己的属性 idtitlecontentdate_added,这样就创建了一个包含了所有属性的新接口 NoteItem

代码如下:

interface NoteItem extends ValuesBucket {
  id: number | null // 新增时设置 id 为空值 null,用于自增 id
  title: string
  content: string
  date_added: number
}