Database
Database 是 sqlite.open(...) 返回的 SQLite 数据库包装对象.
源码依据:
app/src/main/java/org/autojs/autojs/runtime/api/augment/sqlite/SQLite.ktapp/src/main/java/org/autojs/autojs/runtime/api/SQLite.ktapp/src/main/java/org/autojs/autojs/core/database/Database.javaapp/src/main/java/org/autojs/autojs/core/database/Transaction.ktapp/src/main/java/org/autojs/autojs/core/database/TransactionCallback.java
常见相关方法或属性:
Database
Database 继承 Android SQLiteOpenHelper, 内部持有一个 SQLiteDatabase 实例, 并注册到脚本运行时 closeableManager. 脚本结束时可被统一关闭, 但长期运行脚本仍建议主动调用 close().
写入对象会先转换为 ContentValues. 支持的值类型:
null/undefined- 写入 SQLNULLnumber- 整数值写入Long, 非整数写入Doublebooleanstringbyte[]
其他类型会抛出 Unsupported data type for key: ....
[m] execSQL
execSQL(sql)
execSQL(sql, bindArgs)
执行不返回结果集的 SQL.
[m] rawQuery
rawQuery(sql, selectionArgs)
rawQuery(sql, selectionArgs, cancellationSignal)
- sql { string }
- selectionArgs { string[] }
- returns { CursorWrapper }
执行原始查询并返回包装后的游标.
[m] rawQueryWithFactory
rawQueryWithFactory(cursorFactory, sql, selectionArgs, editTable)
rawQueryWithFactory(cursorFactory, sql, selectionArgs, editTable, cancellationSignal)
- returns { CursorWrapper }
参数含义与 Android SQLiteDatabase.rawQueryWithFactory 保持一致.
[m] query
query(table, columns, selection, selectionArgs, groupBy, having, orderBy)
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)
query(distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)
query(distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit, cancellationSignal)
- returns { CursorWrapper }
查询表并返回包装后的游标.
[m] queryWithFactory
queryWithFactory(cursorFactory, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)
queryWithFactory(cursorFactory, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit, cancellationSignal)
- returns { CursorWrapper }
[m] insert
insert(table, values)
insert(table, nullColumnHack, values)
插入一行数据. values 会按上文规则转换为 ContentValues.
[m] insertOrThrow
insertOrThrow(table, nullColumnHack, values)
- returns { number }
[m] insertWithOnConflict
insertWithOnConflict(table, nullColumnHack, initialValues, conflictAlgorithm)
[m] replace
replace(table, nullColumnHack, initialValues)
- returns { number }
[m] replaceOrThrow
replaceOrThrow(table, nullColumnHack, initialValues)
- returns { number }
[m] update
update(table, values, whereClause, whereArgs)
- table { string }
- values { object }
- whereClause { string | null }
- whereArgs { string[] | null }
- returns { number } - 受影响行数
[m] updateWithOnConflict
updateWithOnConflict(table, values, whereClause, whereArgs, conflictAlgorithm)
- returns { number }
[m] delete
delete(table, whereClause, whereArgs)
[m] transaction
transaction(transactionCallback, exclusive?)
- transactionCallback { function }
- [ exclusive =
true] { boolean } - returns { EventEmitter }
同步执行事务并返回事件发射器. transactionCallback 会收到 Transaction 对象; 正常执行后内部调用 transaction.succeed(), 最终调用 transaction.end().
事务事件:
begin- 事务开始commit- 事务成功提交rollback- 事务回滚end- 事务结束error- 回调抛出异常时触发
[m] close
close()
关闭底层数据库连接, 并从运行时 closeableManager 中移除.
代理方法
当前 Database 还暴露以下 Android SQLiteDatabase 代理方法:
acquireReference()/releaseReference()beginTransaction()/beginTransactionNonExclusive()/beginTransactionWithListener(listener)/beginTransactionWithListenerNonExclusive(listener)endTransaction()/setTransactionSuccessful()/inTransaction()compileStatement(sql)/validateSql(sql, cancellationSignal)disableWriteAheadLogging()/enableWriteAheadLogging()/isWriteAheadLoggingEnabled()getAttachedDbs()/getMaximumSize()/getPageSize()/getPath()/getVersion()isDatabaseIntegrityOk()/isDbLockedByCurrentThread()/isOpen()/isReadOnly()needUpgrade(newVersion)setForeignKeyConstraintsEnabled(enable)/setLocale(locale)/setMaxSqlCacheSize(cacheSize)setMaximumSize(numBytes)/setPageSize(numBytes)/setVersion(version)yieldIfContendedSafely()/yieldIfContendedSafely(sleepAfterYieldDelay)
