1 ResultSet
(結(jié)果集)
ResultSet
(結(jié)果集)是OpenHarmony關(guān)系型數(shù)據(jù)庫(kù)提供查詢數(shù)據(jù)表返回結(jié)果的方法,提供了多種靈活的數(shù)據(jù)訪問(wèn)方式,以便于開(kāi)發(fā)者獲取各項(xiàng)數(shù)據(jù),ResultSet
屬性如表1-1所示,ResultSet
方法如表1-2所示。
表1-1 ResultSet
屬性
名稱(chēng) | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
columnNames | Array | 是 | 結(jié)果集中所有列的名稱(chēng) |
columnCount | number | 是 | 結(jié)果集中的列數(shù) |
rowCount | number | 是 | 結(jié)果集中的行數(shù) |
rowIndex | number | 是 | 結(jié)果集當(dāng)前行的索引 |
isAtFirstRow | boolean | 是 | 結(jié)果集是否位于第一行 |
isAtLastRow | boolean | 是 | 結(jié)果集是否位于最后一行 |
isEnded | boolean | 是 | 結(jié)果集是否位于最后一行之后 |
isStarted | boolean | 是 | 指針是否移動(dòng)過(guò) |
isClosed | boolean | 是 | 當(dāng)前結(jié)果集是否關(guān)閉 |
表1-2 ResultSet
方法
名稱(chēng) | 描述 |
---|---|
getColumnIndex(columnName: string): number | 根據(jù)指定的列名獲取列索引columnName: 結(jié)果集中指定列的名稱(chēng) number: 返回指定列的索引 |
getColumnName(columnIndex: number): string | 根據(jù)指定的列索引獲取列名columnIndex: 結(jié)果集中指定列的索引string: 返回指定列的名稱(chēng) |
goTo(offset: number): boolean | 向前或向后轉(zhuǎn)至結(jié)果集的指定行,相對(duì)于當(dāng)前行位置偏移offset: 表示相對(duì)于當(dāng)前行位置偏移量boolean:操作成功,則為true,否則為false |
goToRow(position: number): boolean | 轉(zhuǎn)到結(jié)果集的指定行position: 表示要移動(dòng)到的指定位置boolean: 操作成功,則為true,否則為false |
goToFirstRow(): boolean | 轉(zhuǎn)到結(jié)果集的第一行boolean: 操作成功,則為true,否則為false |
goToLastRow(): boolean | 轉(zhuǎn)到結(jié)果集的最后一行boolean: 操作成功,則為true,否則為false |
goToNextRow(): boolean | 轉(zhuǎn)到結(jié)果集的下一行boolean: 操作成功,則為true,否則為false |
goToPreviousRow(): boolean | 轉(zhuǎn)到結(jié)果集上一行boolean: 操作成功,則為true,否則為false |
getBlob(columnIndex: number): Uint8Array | 以字節(jié)數(shù)組的形式獲取當(dāng)前行中指定列的值指定的列索引,從0開(kāi)始Uint8Array: 以字節(jié)數(shù)組的形式返回指定列的值 |
getString(columnIndex: number): string | 以字符串形式獲取當(dāng)前行中指定列的值columnIndex: 指定的列索引,從0開(kāi)始string: 以字符串形式返回指定列的值 |
getLong(columnIndex: number): number | 以Long形式獲取當(dāng)前行中指定列的值columnIndex: 指定的列索引,從0開(kāi)始number: 以Long形式返回指定列的值。該接口支持的數(shù)據(jù)范圍是:Number.MIN_SAFE_INTEGER~Number.MAX_SAFE_INTEGER,若超出該范圍,則建議使用getDouble |
getDouble(columnIndex: number): number | 以double形式獲取當(dāng)前行中指定列的值columnIndex: 指定的列索引,從0開(kāi)始number: 以double形式返回指定列的值 |
isColumnNull(columnIndex: number): boolean | 檢查當(dāng)前行中指定列的值是否為nullcolumnIndex: 指定的列索引,從0開(kāi)始boolean: 當(dāng)前行中指定列的值為null,則返回true,否則為false |
close(): void | 關(guān)閉結(jié)果集 |
2 流程
3 步驟
3.1 獲取ResultSet
結(jié)果集
通過(guò)RdbStore
實(shí)例的query()
或querySql()
方法獲得ResultSet
結(jié)果集。
let predicates = new relationalStore.RdbPredicates(this.tableName);
let result = await this.rdbStore.query(predicates, columns);
3.2 自定義返回結(jié)果類(lèi)
自定義TableResultSet
類(lèi)用于前臺(tái)展示。
export class TableResultSet {
private total: number; // 總條數(shù)
private data: any; // 數(shù)據(jù)表數(shù)據(jù)
setTotal(total: number) {
this.total = total;
}
setData(data: any) {
this.data = data;
}
}
3.3 結(jié)果集轉(zhuǎn)返回結(jié)果
ResultSet
并不能直接用來(lái)展示,通過(guò)ResultSet
提供的各類(lèi)方法獲取需要的信息。
private resultToObject(result: relationalStore.ResultSet) {
let trs = new TableResultSet();
trs.setData(result.rowCount);
let data: Array<any> = [];
let count = result.rowCount;
if (count === 0 || typeof count === 'string') {
trs.setData([]);
} else {
// 從數(shù)據(jù)第一行開(kāi)始讀取
result.goToFirstRow();
for (let j = 0; j < count; j++) {
let temp: any = {};
for (let i = 0; i < this.fields.length; i++) {
let field = this.fields[i];
if (field.type === 'INTEGER' || field.type === 'integer') {
temp[field.name] = result.getLong(result.getColumnIndex(field.name));
} else if (field.type === 'REAL' || field.type === 'real') {
temp[field.name] = result.getDouble(result.getColumnIndex(field.name));
} else if (field.type === 'TEXT' || field.type === 'text') {
temp[field.name] = result.getString(result.getColumnIndex(field.name));
} else if (field.type === 'BLOB' || field.type === 'blob') {
temp[field.name] = result.getBlob(result.getColumnIndex(field.name));
}
}
data.push(temp);
result.goToNextRow();
}
trs.setData(data);
}
return trs;
}
4 呈現(xiàn)結(jié)果
- 使用斷點(diǎn)調(diào)試方式
- 使用日志調(diào)試方式
Log.info(TAG, `Query of ${this.tableName} table data succeeded. data: ` + JSON.stringify(result));
- 頁(yè)面顯示
// 顯示表名稱(chēng)
Text(TableConstants.T_ACCOUNT_NAME)
.fontSize(18)
.fontWeight(700)
.width('90%').height(54)
Column({space: 5}) {
if (this.result !== null) {
// 顯示表字段
GridRow({
columns: TableConstants.T_ACCOUNT_FIELDS.length,
direction: GridRowDirection.Row
}) {
ForEach(this.result.fields, (field) => {
GridCol() {
Text(field)
.width("100%").height(54)
.fontSize(16)
.textAlign(TextAlign.Center)
}
.colStyle()
})
}
.width('90%').height(54)
.backgroundColor(0xE5E5E5)
// 顯示表數(shù)據(jù)
ForEach(this.result.data, (item) => {
GridRow({
columns: TableConstants.T_ACCOUNT_FIELDS.length,
direction: GridRowDirection.Row
}) {
ForEach(TableConstants.T_ACCOUNT_FIELDS, (field) => {
GridCol() {
this.Label(item[field.name].toString())
}
.colStyle()
})
}
.width('90%').height(54)
.backgroundColor(0xF5F5F5)
}, temp => temp.toString())
}
}
.width('100%')
-
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3794瀏覽量
64355 -
關(guān)系型數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
0文章
7瀏覽量
2331 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3713瀏覽量
16252
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論