HarmonyOS 鸿蒙Next 关于ArkUI下使用关系型数据库时的插入报错问题

HarmonyOS 鸿蒙Next 关于ArkUI下使用关系型数据库时的插入报错问题 最近在学习ArkUI中的dataability使用,我参照官方文档中关系型数据库开发指导的示例代码作插入数据的测试时遇到了如下报错,但始终找不到问题出现的原因

10-10 19:33:35.892 28707-28768/com.example.demo1010 I 03B00/JSApp: app Log: DataAbility insert start
10-10 19:33:35.901 28707-28784/com.example.demo1010 E 01100/AceDataAbility: insert exception: java.lang.NumberFormatException: For input string: ""
10-10 19:33:35.902 28707-28784/com.example.demo1010 E 01400/DataAbilityHelperPlugin: IllegalArgumentException
10-10 19:33:35.903 28707-28790/com.example.demo1010 I 03B00/JSApp: app Log: DataAbility insert error:{"code":200,"data":"For input string: \""}

下面是插入数据的函数和调用此函数附件的代码,dataability的代码跟文档中一致

function insertBook(name: string, introduction: string): Promise<number> {
    let valueBucket = { "name": name, "introduction": introduction }
    return DAHelper.insert(
        uri,
        valueBucket
    )
}
Button("insert new book")
  .onClick(() => {
    insertBook("bookName", "bookInfo")
      .then(() => {
        console.info("DataAbility insert success")
      })
      .catch(err => {
        console.info("DataAbility insert error:" + JSON.stringify(err))
      })
  })

有大佬知道怎样解决吗?


更多关于HarmonyOS 鸿蒙Next 关于ArkUI下使用关系型数据库时的插入报错问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

15 回复

楼主您好,查看日志是代码出现字符串转数字的转换错误。关系型数据库的用法可以参看codelabs https://gitee.com/openharmony/codelabs/tree/master/Data/JSRelationshipData

更多关于HarmonyOS 鸿蒙Next 关于ArkUI下使用关系型数据库时的插入报错问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我看了这个codelabs是用rdbStore来操作数据库的,之前我也用过这种方式,没有报错,但是用DataAbilityHelper就不行了,

楼主你好,请提供下系统、SDK版本和能复现的代码,这边帮您看下。

系统:win11
工具:Dev eco 3.0.0.991
SDK:8

期待HarmonyOS能在未来推出更多针对企业用户的解决方案。

楼主,我也遇到For input string: ""的问题,请问你解决没有?

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

您好,可以先参考一下1楼技术回复哈,谢谢,

我现在用了Stage模型,用不到DataAbility,你试试用Stage模型做做看,

//DataAbility import dataAbility from ‘@ohos.data.dataAbility’; import dataRdb from ‘@ohos.data.rdb’; import featureAbility from ‘@ohos.ability.featureAbility’;

const TABLE_NAME = “book” const STORE_CONFIG = { name: “book.db” } const SQL_CREATE_TABLE = “CREATE TABLE IF NOT EXISTS book(” + “id INTEGER PRIMARY KEY AUTOINCREMENT,” + “name TEXT NOT NULL,” + “introduction TEXT NOT NULL)” let rdbStore: dataRdb.RdbStore = undefined

export default { onInitialized(abilityInfo) { console.info("DataAbility onInitialized, abilityInfo: " + abilityInfo.bundleName) dataRdb.getRdbStore(featureAbility.getContext(), STORE_CONFIG, 1) .then(store => { console.info(“DataAbility getRdbStore success”) store.executeSql(SQL_CREATE_TABLE) console.info(“DataAbility createTable success”) rdbStore = store }) .catch(err => { console.info(“DataAbility getRdbStore error:” + err) }) }, insert(uri, valueBucket, callback) { console.info(“DataAbility insert start”) rdbStore.insert(TABLE_NAME, valueBucket, callback) }, delete(uri, predicates, callback) { console.info(“DataAbility delete start”) let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) rdbStore.delete(rdbPredicates, callback) }, update(uri, valueBucket, predicates, callback) { console.info(“DataAbility update start”) let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) rdbStore.update(valueBucket, rdbPredicates, callback) }, query(uri, columns, predicates, callback) { console.info(“DataAbility query start”) let rdbPredicates = dataAbility.createRdbPredicates(TABLE_NAME, predicates) rdbStore.query(rdbPredicates, columns, callback) } };

//ui页面文件
@Entry
@Component
struct Index {
  @State message: string = 'Hello World'
  books: Array<Book>

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button("insert new book")
          .onClick(() => {
            insertBook("bookName", "bookInfo")
              .then(() => {
                console.info("DataAbility insert success")
              })
              .catch(err => {
                console.info("DataAbility insert error:" + JSON.stringify(err))
              })
          })
        Button("query all books")
          .onClick(()=>{
            this.books = queryAllBooks()
            console.info("DataAbility query result: " + JSON.stringify(this.books))
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

//使用DAHelper操作数据库的ts文件 let uri = “dataability:///com.example.demo1010.DataAbility” let columns = [‘id’, ‘name’, ‘introduction’] let DAHelper = featureAbility.acquireDataAbilityHelper(uri)

function insertBook(name: string, introduction: string): Promise<number> { let valueBucket = { “name”: name, “introduction”: introduction } return DAHelper.insert( uri, valueBucket ) }

function queryAllBooks(): Array<Book> { let predicates = new rdb.RdbPredicates(“book”) let books = new Array<Book>() DAHelper.query(uri, columns, predicates) .then(result=>{ result.goToFirstRow() while(!result.isEnded) { const id = result.getLong(result.getColumnIndex(‘id’)) const name = result.getString(result.getColumnIndex(‘name’)) const introduction = result.getString(result.getColumnIndex(‘introduction’)) books.push(new Book(id, name, introduction)) result.goToNextRow() } result.close() }) .catch(error=>{ console.info("DataAbility queryAllBooks error: " + JSON.stringify(error)) }) return books }

export { uri, DAHelper, insertBook, queryAllBooks }

针对HarmonyOS鸿蒙Next在ArkUI下使用关系型数据库时遇到的插入报错问题,可能的原因及解决方案如下:

  1. 数据类型不匹配:检查插入的数据类型是否与数据库表定义的类型一致。例如,如果表字段定义为整数类型,而插入的数据为字符串,则会导致报错。

  2. 字段缺失:确保插入数据时提供了所有必填字段。如果表定义了某些字段为必填,但插入操作未提供这些字段的值,也会导致报错。

  3. 主键冲突:如果表设置了主键或唯一索引,确保插入的数据不会与现有数据产生冲突。例如,尝试插入已存在的主键值会导致报错。

  4. SQL语法错误:检查SQL插入语句的语法是否正确。错误的语法,如拼写错误、遗漏关键字等,都会引发报错。

  5. 数据库连接问题:确保数据库连接正常。如果数据库服务未启动或连接配置错误,插入操作也会失败。

  6. 权限问题:检查应用是否具有访问和操作数据库的权限。权限不足同样会导致操作失败。

针对上述问题,逐一排查并修正。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部