【HarmonyOS】【ArkUI】【デモ】リレーショナルデータベースの基本的な使い方

HarmonyOSでは、リレーショナルデータベースの追加、削除、変更は非常に一般的な技術です。今日は、データの追加、削除、変更について詳しく説明するデモを作成します。開発の前に、「リレーショナルデータベース」と「結果セット」。この開発ドキュメントは、「Apiの使用」、「デモの実装」、「操作効果」の3つのステップで説明されています。

1.APIの使用法

1.1データベースを作成する

image.png

import dataRdb from '@ohos.data.rdb'
const STORE_CONFIG = {name: "RdbTest.db" }
const SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)"
let promise = dataRdb.getRdbStore(STORE_CONFIG, 1);
promise.then(async (rdbStore) => {
    rdbStore.executeSql(SQL_CREATE_TABLE, null)
}).catch((err) => {
    expect(null).assertFail();
})

 

1.2データの挿入

image.png

const valueBucket = {
    "NAME": "Lisa",
    "AGE": 18,
    "SALARY": 100.5,
    "CODES": new Uint8Array([1, 2, 3, 4, 5]),
}
rdbStore.insert("EMPLOYEE", valueBucket, function (err, ret) {
    expect(1).assertEqual(ret)
console.log(TAG + "insert first done: " + ret)})

 

1.3データの削除

image.png

let predicates = new dataRdb.RdbPredicates("EMPLOYEE")
predicates.equalTo("NAME", "Lisa")
rdbStore.delete(predicates, function (err, rows) {
    console.log(TAG + "delete rows: " + rows)})

 

1.4データの変更

image.png

const valueBucket = {
    "NAME": "Rose",
    "AGE": 22,
    "SALARY": 200.5,
    "CODES": new Uint8Array([1, 2, 3, 4, 5]),
}
let predicates = new dataRdb.RdbPredicates("EMPLOYEE")
predicates.equalTo("NAME", "Lisa")
rdbStore.update(valueBucket, predicates, function (err, ret) {
    console.log(TAG + "updated row count: " + ret)})

 

1.5クエリデータ

image.png

let predicates = new dataRdb.RdbPredicates("EMPLOYEE")
predicates.equalTo("NAME", "Rose")
rdbStore.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"], function (err, resultSet) {
    console.log(TAG + "resultSet column names:" + resultSet.columnNames)
console.log(TAG + "resultSet column count:" + resultSet.columnCount)})

 

1.6結果セットの処理

image.png

resultSet.goToFirstRow()
const id = resultSet.getLong(resultSet.getColumnIndex("ID"))
const name = resultSet.getString(resultSet.getColumnIndex("NAME"))
const age = resultSet.getLong(resultSet.getColumnIndex("AGE"))
const salary = resultSet.getDouble(resultSet.getColumnIndex("SALARY"))

 

 

2.デモの実装

「データベースの作成」、「データの挿入」、「データのクエリ」、「データの変更」、「データの削除」の5つのテキストを記述し、対応するクリックイベントを順番に実装します。すべてのコードは次のとおりです。

import dataRdb from '@ohos.data.rdb'

@Entry
@Component
struct MyRdb {
  rdb: dataRdb.RdbStore;
  @State name: string= "Lisa"


  private CreateRdbStore() {
    var that=this;
    dataRdb.getRdbStore({  name: "XiLeiRgb.db" }, 1, function (err, rdbStore) {
      if (err) {
        console.log('获取失败' + err)
      } else {
        const SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER, SALARY REAL, CODES BLOB)"
        rdbStore.executeSql(SQL_CREATE_TABLE, null)
        console.log('创建成功')
        that.rdb=rdbStore;
      }
    })

  }

  private insertData() {
    const valueBucket = {
      "NAME": "Lisa",
      "AGE": 18,
      "SALARY": 100.5,
      "CODES": new Uint8Array([1, 2, 3, 4, 5]),
    }
    let promise = this.rdb.insert("EMPLOYEE", valueBucket)
    promise.then(async (ret) => {
      console.log( "插入成功==>>insert first done: " + ret)
      this.name="Lisa";
    }).catch((err) => {

    })


  }

  private SelectData() {
    let predicates = new dataRdb.RdbPredicates("EMPLOYEE")
    predicates.equalTo("NAME", this.name)
    console.log("查询条件====>"+this.name)
    this.rdb.query(predicates, ["ID", "NAME", "AGE", "SALARY", "CODES"], function (err, resultSet) {
      console.log("查询成功==>>resultSet column names:" + resultSet.columnNames)
      console.log("查询成功==>>resultSet column count:" + resultSet.columnCount)
      if(resultSet.rowCount>0){
        resultSet.goToFirstRow()
        const id = resultSet.getLong(resultSet.getColumnIndex("ID"))
        const name = resultSet.getString(resultSet.getColumnIndex("NAME"))
        const age = resultSet.getLong(resultSet.getColumnIndex("AGE"))
        const salary = resultSet.getDouble(resultSet.getColumnIndex("SALARY"))
        console.log( "id===>" + id+"===name==>"+name+"==age==>"+age+"==salary==>"+JSON.toString(salary))
      }else{
        console.log("暂无数据")
      }


    })

  }

  private updateData() {
    var that=this;

    let valueBucket = {
      "NAME": "Rose",
      "AGE": 22,
      "SALARY": 200.5,
      "CODES": new Uint8Array([1, 2, 3, 4, 5]),
    }
    let predicates = new dataRdb.RdbPredicates("EMPLOYEE")
    predicates.equalTo("NAME", this.name)
    that.rdb.update(valueBucket, predicates, function (err, ret) {
      console.log("修改成功==>>updated row count: " + ret)
      that.name = "Rose";
    })

  }

  private deleteData() {
    let that=this
    let predicates = new dataRdb.RdbPredicates("EMPLOYEE")
    predicates.equalTo("NAME", this.name)
    that.rdb.delete(predicates, function (err, rows) {
      console.log("删除成功===>>delete rows: " + rows)
    })
  }

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Text('创建数据库')
        .fontSize(50)
        .onClick(this.CreateRdbStore.bind(this))
        .fontWeight(FontWeight.Bold)
      Text('插入数据')
        .fontSize(50)
        .onClick(this.insertData.bind(this))
        .backgroundColor(Color.Red)
        .fontWeight(FontWeight.Bold)
      Text('查询数据')
        .fontSize(50)
        .onClick(this.SelectData.bind(this))
        .backgroundColor(Color.White)
        .fontWeight(FontWeight.Bold)
      Text('修改数据')
        .fontSize(50)
        .onClick(this.updateData.bind(this))
        .backgroundColor(Color.Red)
        .fontWeight(FontWeight.Bold)
      Text('删除数据')
        .fontSize(50)
        .onClick(this.deleteData.bind(this))
        .backgroundColor(Color.White)
        .fontWeight(FontWeight.Bold)


    }
    .width('100%')
    .height('100%')
  }
}

 

インターフェース効果は以下の通りです

image.png

 

3.操作効果

「データベースの作成」、「データの挿入」、「データの照会」、「データの変更」、「データの照会」、「データの削除」、「データの照会」をクリックすると、効果は次のようになります。

image.png

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/4478396/blog/5513995