鸿蒙OS开发文档 鸿蒙OS RdbStore

2024-02-25 开发教程 鸿蒙OS开发文档 匿名 4

RdbStore

public interface RdbStore

提供管理关系数据库 (RDB) 的方法。

此类提供用于创建、查询、更新和删除 RDB 的方法。

嵌套类摘要

修饰符和类型接口描述
static classRdbStore.ConflictResolution表示解决冲突的方法的类型。

字段摘要

修饰符和类型字段描述
static intMAX_BATCH_INSERT_SIZE

方法总结

修饰符和类型方法描述
voidaddAttach(String alias, String name, byte[] encryptKey)附加数据库。
booleanbackup(String destName)以指定名称备份数据库。
booleanbackup(String destName, byte[] destEncryptKey)使用指定的加密密钥以指定名称备份数据库。
ListLongbatchInsertOrThrowException(String tableName, ListValuesBucket initialValues, RdbStore.ConflictResolution conflictResolution)根据冲突处理策略将数据批量插入数据库。
voidbeginTransaction()以 EXCLUSIVE 模式开始事务。
voidbeginTransactionWithObserver(TransactionObserver transactionObserver)使用侦听器以独占模式开始事务。
StatementbuildStatement(String sql)将 SQL 语句编译成可重用的语句。
voidchangeEncryptKey(byte[] newEncryptKey)更改打开的加密数据库的加密密钥。
booleancheckIntegrity()检查主数据库和附加数据库的完整性。
voidclose()关闭一个 RDB。
voidconfigLocale(Locale locale)设置数据库区域设置。
longcount(String tableName, String whereClause, String[] whereArgs)查询RDB存储中满足指定条件的行数。
longcount(AbsRdbPredicates absRdbPredicates)获取数据满足 AbsRdbPredicates 的指定实例对象的行数。
intdelete(AbsRdbPredicates absRdbPredicates)根据 AbsRdbPredicates 的指定实例对象从数据库中删除数据。
voidendTransaction()结束交易。
voidexecuteSql(String sql)执行不返回值的 SQL 语句。
voidexecuteSql(String sql, Object[] sqlArgs)执行包含指定参数但不返回值的 SQL 语句。
StringgetPath()获取数据库文件的路径。
intgetVersion()获取数据库版本。
voidgiveConnectionTemporarily(long milliseconds)暂时断开与数据库的连接以允许其他线程使用数据库。
longinsert(String table, ValuesBucket initialValues)在目标表中插入一行数据。
longinsertOrThrowException(String table, ValuesBucket initialValues)在目标表中插入一行数据。
longinsertWithConflictResolution(String table, ValuesBucket initialValues, RdbStore.ConflictResolution conflictResolution)在目标表中插入一行数据并指定解决冲突的方法。
booleanisHoldingConnection()检查此线程是否拥有数据库连接。
booleanisInTransaction()检查当前线程是否正在进行事务。
booleanisMemoryRdb()检查数据库是否在内存中打开。
booleanisOpen()检查数据库是否打开。
booleanisReadOnly()检查数据库是否以只读模式打开。
ListPairString,StringlistAttached()查询附加数据库列表。
voidmarkAsCommit()将当前事务标记为提交。
ResultSetquery(AbsRdbPredicates absRdbPredicates, String[] columns)根据指定条件查询数据库中的数据。
ResultSetqueryByStep(AbsRdbPredicates absRdbPredicates, String[] columns)根据指定条件查询数据库中的数据。
ResultSetquerySql(String sql, String[] sqlArgs)执行一条 SQL 语句。
ResultSetquerySqlByStep(String sql, String[] sqlArgs)执行 SQL 语句并指定结果集。
ResultSetquerySqlWithHook(String sql, String[] sqlArgs, ResultSetHook resultSetHook)执行 SQL 语句并指定结果集。
ResultSetqueryWithHook(AbsRdbPredicates absRdbPredicates, String[] columns, ResultSetHook resultSetHook)根据指定条件查询数据库中的数据并指定结果集。
longreplace(String table, ValuesBucket initialValues)替换目标表中的一行数据。
longreplaceOrThrowException(String table, ValuesBucket initialValues)替换目标表中的一行数据。
booleanrestore(String srcName)从指定的未加密数据库文件恢复数据库。
booleanrestore(String srcName, byte[] srcEncryptKey, byte[] destEncryptKey)从指定的加密或未加密数据库文件恢复数据库。
voidsetVersion(int version)设置新数据库的版本。
StringtoString()获取数据库存储的描述。
intupdate(ValuesBucket values, AbsRdbPredicates absRdbPredicates)根据 AbsRdbPredicates 的指定实例对象更新数据库中的数据。
intupdateWithConflictResolution(ValuesBucket values, AbsRdbPredicates absRdbPredicates, RdbStore.ConflictResolution conflictResolution)更新目标表中的一行数据,并指定解决冲突的方法。

字段详细信息

MAX_BATCH_INSERT_SIZE

static final int MAX_BATCH_INSERT_SIZE

方法详情

insert

long insert(String table, ValuesBucket initialValues)

在目标表中插入一行数据。

参数:

参数名称参数描述
table表示目标表。
initialValues表示要插入到表中的数据行。 数据包含存储在 ValuesBucket 中的键值对。 键值对与表的列名相关联。

返回:

如果操作成功,则返回行 ID; 否则返回 -1。

insertOrThrowException

long insertOrThrowException(String table, ValuesBucket initialValues)

在目标表中插入一行数据。

参数:

参数名称参数描述
table表示目标表。
initialValues表示要插入到表中的数据行。 数据包含存储在 ValuesBucket 中的键值对。 键值对与表的列名相关联。

返回:

如果操作成功,则返回行 ID; 否则返回 -1。

Throws:

Throw名称Throw描述
RdbException如果发生 SQLite 数据库错误,则引发此异常。 您必须自己处理此异常。

batchInsertOrThrowException

ListLong batchInsertOrThrowException(String tableName, ListValuesBucket initialValues, RdbStore.ConflictResolution conflictResolution)

根据冲突处理策略将数据批量插入数据库。

如果冲突处理策略为空,将使用默认策略 ConflictResolution#ON_CONFLICT_NONE。 如果在数据插入过程中发生异常,操作会因冲突处理策略的类型而异。

  • ConflictResolution#ON_CONFLICT_ROLLBACK:如果发生数据冲突,数据库列为空,或者数据库列只有一个值,所有插入的数据将被回滚。
  • ConflictResolution#ON_CONFLICT_ABORT or ConflictResolution#ON_CONFLICT_FAIL:如果发生数据冲突,数据库列为空,或者数据库列只有一个值,插入的数据将被保留,并抛出异常。
  • ConflictResolution#ON_CONFLICT_IGNORE:如果发生数据冲突或数据库列为空,将忽略异常,返回值-1。数据插入将继续,直到所有数据都插入数据库。如果外键不存在或发生外键冲突,请参阅 ConflictResolution#ON_CONFLICT_ABORT。
  • ConflictResolution#ON_CONFLICT_REPLACE:如果发生数据冲突,或者数据库列有默认值或只有一个值,将替换冲突数据并继续插入数据,直到所有数据都插入数据库。如果数据库列没有默认值或发生外键冲突,请参阅 ConflictResolution#ON_CONFLICT_ABORT。

参数:

参数名称参数描述
tableName表示数据库的表名。
initialValues表示要插入数据库的数据。
conflictResolution表示冲突处理策略。

返回:

如果批量插入成功,则返回所有行的 ID。 如果使用 ConflictResolution#ON_CONFLICT_IGNORE 策略,则返回的列表可能包含 -1。

Throws:

Throw名称Throw描述
IllegalArgumentException如果表名为 null 或空字符串、initialValues 为 null 或空列表、initialValues 中的值为 null 或空字符串,或者 initialValues 中的值数量超过 RdbStore#MAX_BATCH_INSERT_SIZE,则抛出此异常。
RdbException如果数据插入数据库失败,则抛出此异常。

replace

long replace(String table, ValuesBucket initialValues)

替换目标表中的一行数据。

如果目标行不存在,则此方法插入一行。

参数:

参数名称参数描述
table表示目标表。
initialValues表示用于替换目标表中的数据行的数据行。 数据包含存储在 ValuesBucket 中的键值对。 键值对与表的列名相关联。

返回:

如果操作成功,则返回行 ID; 否则返回 -1。

replaceOrThrowException

long replaceOrThrowException(String table, ValuesBucket initialValues)

替换目标表中的一行数据。

如果目标行不存在,则此方法插入一行。

参数:

参数名称参数描述
table表示目标表。
initialValues表示用于替换目标表中的数据行的数据行。 数据包含存储在 ValuesBucket 中的键值对。 键值对与表的列名相关联。

返回:

如果操作成功,则返回行 ID; 否则返回 -1。

Throws:

Throw名称Throw描述
RdbException如果发生 SQLite 数据库错误,则引发此异常。 您必须自己处理此异常。

insertWithConflictResolution

long insertWithConflictResolution(String table, ValuesBucket initialValues, RdbStore.ConflictResolution conflictResolution)

在目标表中插入一行数据并指定解决冲突的方法。

参数:

参数名称参数描述
table表示目标表。
initialValues表示要插入到表中的数据行。 数据包含存储在 ValuesBucket 中的键值对。 键值对与表的列名相关联。
conflictResolution表示解决冲突的方法。

返回:

如果操作成功,则返回行 ID; 否则返回 -1。

delete

int delete(AbsRdbPredicates absRdbPredicates)

根据 AbsRdbPredicates 的指定实例对象从数据库中删除数据。

您可以传递 AbsRdbPredicates 的实例对象,例如 RdbPredicates 和 RawRdbPredicates 来指定删除条件。 如果传入 RdbPredicates 对象,可以调用 RdbPredicates#equalTo 等方法设置删除条件。 如果传递 RawRdbPredicates 对象,则只能设置数据库 tableName、whereClause 和 whereArgs。 whereArgs 是 whereClause 中占位符的值,必须与占位符的顺序相同。

参数:

参数名称参数描述
absRdbPredicates指示 AbsRdbPredicates 的实例对象指定的删除条件。

返回:

返回受影响的行数。

update

int update(ValuesBucket values, AbsRdbPredicates absRdbPredicates)

根据 AbsRdbPredicates 的指定实例对象更新数据库中的数据。

您可以传递RdbPredicates 和RawRdbPredicates 等AbsRdbPredicates 的实例对象来指定更新条件。 如果传递 RdbPredicates 对象,则可以调用 RdbPredicates#equalTo 等方法设置更新条件。 如果传递 RawRdbPredicates 对象,则只能设置数据库 tableName、whereClause 和 whereArgs。 whereArgs 是 whereClause 中占位符的值,必须与占位符的顺序相同。

参数:

参数名称参数描述
values表示数据库中要更新的数据行。 数据包含存储在 ValuesBucket 中的键值对。 键值对与数据库表的列名相关联。
absRdbPredicates通过 AbsRdbPredicates 的实例对象指示指定的更新条件。

返回:

返回受影响的行数。

updateWithConflictResolution

int updateWithConflictResolution(ValuesBucket values, AbsRdbPredicates absRdbPredicates, RdbStore.ConflictResolution conflictResolution)

更新目标表中的一行数据,并指定解决冲突的方法。

参数:

参数名称参数描述
values表示要插入到表中的数据行。 数据包含存储在 ValuesBucket 中的键值对。 键值对与表的列名相关联。
absRdbPredicates通过 RdbPredicates 的实例对象指示指定的更新条件。
conflictResolution表示解决冲突的方法。

返回:

返回受影响的行数。

query

ResultSet query(AbsRdbPredicates absRdbPredicates, String[] columns)

根据指定条件查询数据库中的数据。

参数:

参数名称参数描述
absRdbPredicates表示查询条件。
columns表示要查询的列。 如果值为 null,则查询适用于所有列。

返回:

如果操作成功,则返回一个 ResultSet 对象;

queryWithHook

ResultSet queryWithHook(AbsRdbPredicates absRdbPredicates, String[] columns, ResultSetHook resultSetHook)

根据指定条件查询数据库中的数据并指定结果集。

参数:

参数名称参数描述
absRdbPredicates表示查询条件。
resultSetHook指示要使用的结果集工厂。
columns表示要查询的列。 如果值为 null,则查询适用于所有列。

返回:

如果操作成功,则返回一个 ResultSet 对象;

querySql

ResultSet querySql(String sql, String[] sqlArgs)

执行一条 SQL 语句。

参数:

参数名称参数描述
sql指示要执行的 SQL 语句。
sqlArgs表示SQL语句中的参数值。 值是字符串。

返回:

如果操作成功,则返回一个 ResultSet 对象;

querySqlWithHook

ResultSet querySqlWithHook(String sql, String[] sqlArgs, ResultSetHook resultSetHook)

执行 SQL 语句并指定结果集。

参数:

参数名称参数描述
resultSetHook指示要使用的结果集工厂。
sql指示要执行的 SQL 语句。
sqlArgs表示SQL语句中的参数值。 值是字符串。

返回:

如果操作成功,则返回一个 ResultSet 对象;

queryByStep

ResultSet queryByStep(AbsRdbPredicates absRdbPredicates, String[] columns)

根据指定条件查询数据库中的数据。

参数:

参数名称参数描述
absRdbPredicates表示查询条件。
columns表示要查询的列。 如果值为 null,则查询适用于所有列。

返回:

如果操作成功,则返回一个 ResultSet 对象

querySqlByStep

ResultSet querySqlByStep(String sql, String[] sqlArgs)

执行 SQL 语句并指定结果集。

参数:

参数名称参数描述
sql指示要执行的 SQL 语句。
sqlArgs表示SQL语句中的参数值。 值是字符串。

返回:

如果操作成功,则返回一个 ResultSet 对象;

executeSql

void executeSql(String sql)

执行不返回值的 SQL 语句。

不要使用这种方法通过“PRAGMA journal_mode'value'”语句来改变数据库连接的journal_mode。

参数:

参数名称参数描述
sql指示要执行的 SQL 语句。

Throws:

Throw名称Throw描述
RdbException如果 SQL 语句无效,则引发此异常。 您必须自己处理此异常。

executeSql

void executeSql(String sql, Object[] sqlArgs)

执行包含指定参数但不返回值的 SQL 语句。

不要使用这种方法通过“PRAGMA journal_mode'value'”语句来改变数据库连接的journal_mode。

参数:

参数名称参数描述
sql指示要执行的 SQL 语句。
sqlArgs表示SQL语句中的参数值。 值是字符串。

Throws:

Throw名称Throw描述
RdbException如果 SQL 语句无效,则引发此异常。 您必须自己处理此异常。

buildStatement

Statement buildStatement(String sql)

将 SQL 语句编译成可重用的语句。

一个语句不能被两个线程同时使用。

参数:

参数名称参数描述
sql指示要编译的 SQL 语句。

返回:

返回一个 Statement 对象,它表示一个预编译的 SQL 语句。

count

long count(String tableName, String whereClause, String[] whereArgs)

查询RDB存储中满足指定条件的行数。

要获得可执行的SQL查询语句,将表名和条件子句连接成字符串select count(*) from tableName whereClause,并将字符串中的问号(?)替换为whereArgs中的值。 这样就可以调用Statement#executeAndGetLong执行SQL查询语句,获取满足指定条件的行数。 如果 whereClause 为 null 或为空,则返回表中的总行数。

参数:

参数名称参数描述
tableName表示数据库表的名称。 如果为 null 或为空,则抛出 IllegalArgumentException。
whereClause表示一个可选的条件子句,例如 id =? 和 name like?,其中id和name是数据库表的列。
whereArgs指示包含用于替换 whereClause 中问号 (?) 的值的数组。

返回:

返回 RDB 存储中满足指定条件的行数。

count

long count(AbsRdbPredicates absRdbPredicates)

获取数据满足 AbsRdbPredicates 的指定实例对象的行数。

参数:

参数名称参数描述
absRdbPredicates表示 AbsRdbPredicates 的实例对象指定的计数条件。

返回:

返回数据满足 AbsRdbPredicates 的指定实例对象的行数。

addAttach

void addAttach(String alias, String name, byte[] encryptKey)

附加数据库。

参数:

参数名称参数描述
alias指示要附加的数据库的别名。
name指示要附加的数据库的名称。
encryptKey指示用于加密要附加的数据库的密钥。

Throws:

Throw名称Throw描述
IllegalArgumentException如果别名为 null,则引发此异常。

listAttached

ListPairString,String listAttached()

查询附加数据库列表。

返回:

返回附加数据库的列表,包括它们的名称和路径。 主数据库也包含在列表中。

changeEncryptKey

void changeEncryptKey(byte[] newEncryptKey)

更改打开的加密数据库的加密密钥。

此方法仅适用于加密数据库,不能用于将其更改为未加密数据库。 在调用此方法之前,请确保数据库已打开并且没有事务正在使用数据库连接。

参数:

参数名称参数描述
newEncryptKey表示数据库的新加密密钥。

Throws:

Throw名称Throw描述
IllegalArgumentException如果新的加密密钥为 null 或空字符串,则引发此异常。
IllegalStateException如果数据库未打开或未加密,或者事务正在使用数据库连接,则引发此异常。
RdbException如果更改加密数据库的加密密钥失败,则抛出此异常。

getVersion

int getVersion()

获取数据库版本。

返回:

返回数据库版本。

setVersion

void setVersion(int version)

设置新数据库的版本。

参数:

参数名称参数描述
version指示要设置的数据库版本。

beginTransaction

void beginTransaction()

以 EXCLUSIVE 模式开始事务。

endTransaction() 方法用于结束事务。 如果在事务结束时没有使用 markAsCommit() 方法将事务标记为已提交,则所有更改都会回滚。

beginTransactionWithObserver

void beginTransactionWithObserver(TransactionObserver transactionObserver)

使用侦听器以独占模式开始事务。

endTransaction() 方法用于结束事务。 如果在事务结束时没有使用 markAsCommit() 方法将事务标记为已提交,则所有更改都会回滚。

参数:

参数名称参数描述
transactionObserver提供可以在事务启动、提交或回滚时调用的回调方法。

markAsCommit

void markAsCommit()

将当前事务标记为提交。

调用该方法后,在调用 endTransaction() 方法之前不要进行任何操作。 无论是否发生错误,事务都将被提交。

endTransaction

void endTransaction()

结束事务。

isInTransaction

boolean isInTransaction()

检查当前线程是否正在进行事务。

返回:

如果当前线程正在进行事务,则返回 true; 否则返回 false。

giveConnectionTemporarily

void giveConnectionTemporarily(long milliseconds)

暂时断开与数据库的连接以允许其他线程使用数据库。

该方法可用于提交当前事务并暂时断开与数据库的连接,以便其他线程可以使用数据库。 在指定的时间段后,将开始新的交易。 使用此方法时,请确保当前事务已启动,并且该事务未使用 markAsCommit() 方法标记为已提交; 否则,调用此方法将失败。 在调用此方法之前所做的任何更改都无法回滚。

参数:

参数名称参数描述
milliseconds指示当前连接从数据库中断的持续时间(毫秒)。

Throws:

Throw名称Throw描述
IllegalStateException如果当前线程不包含事务或包含嵌套事务,或者在调用此方法之前已使用 markAsCommit() 方法将事务标记为已提交,则抛出此异常。

isHoldingConnection

boolean isHoldingConnection()

检查此线程是否拥有数据库连接。

返回:

如果此线程拥有数据库连接,则返回 true; 否则返回 false。

isOpen

boolean isOpen()

检查数据库是否打开。

返回:

如果数据库已打开,则返回 true; 否则返回 false。

getPath

String getPath()

获取数据库文件的路径。

返回:

返回数据库文件的路径。

isReadOnly

boolean isReadOnly()

检查数据库是否以只读模式打开。

返回:

如果数据库以只读模式打开,则返回 true; 否则返回 false。

isMemoryRdb

boolean isMemoryRdb()

检查数据库是否在内存中打开。

返回:

如果数据库在内存中打开,则返回 true; 否则返回 false。

checkIntegrity

boolean checkIntegrity()

检查主数据库和附加数据库的完整性。

此方法调用 SQLite 数据库的完整性检查命令。

返回:

如果数据库是完整的,则返回 true; 否则返回 false。

close

void close()

关闭一个 RDB。

不能再使用封闭的 RDB。

backup

boolean backup(String destName)

以指定名称备份数据库。

生成的备份文件未加密。

参数:

参数名称参数描述
destName表示保存数据库备份的名称。 确保您的应用程序对该名称具有写入权限。

返回:

如果数据库备份成功返回true; 否则返回 false。

restore

boolean restore(String srcName)

从指定的未加密数据库文件恢复数据库。

调用该方法时,会删除原始数据并生成未加密的数据库。

参数:

参数名称参数描述
srcName表示保存未加密数据库文件的名称。 确保您的应用程序对该名称具有写入权限。

返回:

如果数据库恢复成功,则返回 true; 否则返回 false。

backup

boolean backup(String destName, byte[] destEncryptKey)

使用指定的加密密钥以指定名称备份数据库。

生成的备份已加密。 如果 destEncryptKey 为 null,则生成的备份未加密。 在这种情况下,此方法等效于 RdbStore#backup(String) 方法。

参数:

参数名称参数描述
destName表示保存数据库备份的名称。 确保您的应用程序对该名称具有写入权限。
destEncryptKey指示要备份的数据库的加密密钥。 它可以与当前数据库的不同。

返回:

如果数据库备份成功返回true; 否则返回 false。

restore

boolean restore(String srcName, byte[] srcEncryptKey, byte[] destEncryptKey)

从指定的加密或未加密数据库文件恢复数据库。

当被调用时,此方法会删除原始数据并生成一个加密或未加密的数据库,由您的应用程序定义。 如果 srcEncryptKey 和 destEncryptKey 都为 null,则此方法等效于 RdbStore#restore(String) 方法。

参数:

参数名称参数描述
srcName表示存储源数据库文件的名称。 确保您的应用程序对该名称具有写入权限。
srcEncryptKey表示源数据库的加密密钥。 如果数据库未加密,则将此参数的值设置为 null。
destEncryptKey表示恢复的数据库的加密密钥。如果希望数据库不加密,则将该参数的值设置为null。

返回:

如果数据库恢复成功,则返回 true; 否则返回 false。

configLocale

void configLocale(Locale locale)

设置数据库区域设置。

如果数据库是只读的或数据集在事务中,则此方法不可用。 数据库区域设置好后,可以使用 select from table where column=xxxx COLLATE LOCALES; 或按列 COLLATE LOCALES ASC 从测试订单中选择 ; 在本地对数据进行排序和查询。

参数:

参数名称参数描述
locale指示要设置的语言环境。

toString

String toString()

获取数据库存储的描述。

覆盖:

类 Object 中的 toString

返回:

返回 RdbStore 的描述。