Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Nested Classes](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#nestedclasses) \| [Constants](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#constants) \| [Methods](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#pubmethods) \| [Protected Methods](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#promethods) \| [Inherited Methods](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#inhmethods)

# SQLiteDatabase

*** ** * ** ***


`
public

final

class
SQLiteDatabase
`


`


`

`

extends https://developer.android.com/reference/android/database/sqlite/SQLiteClosable


`

`


`

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) |||
| ↳ | [android.database.sqlite.SQLiteClosable](https://developer.android.com/reference/android/database/sqlite/SQLiteClosable) ||
|   | ↳ | android.database.sqlite.SQLiteDatabase |

<br />

*** ** * ** ***

Exposes methods to manage a SQLite database.


SQLiteDatabase has methods to create, delete, execute SQL commands, and
perform other common database management tasks.


See the Notepad sample application in the SDK for an example of creating
and managing a database.


Database names must be unique within an application, not across all applications.

### Localized Collation - ORDER BY


In addition to SQLite's default `BINARY` collator, Android supplies
two more, `LOCALIZED`, which changes with the system's current locale,
and `UNICODE`, which is the Unicode Collation Algorithm and not tailored
to the current locale.

<br />

## Summary

| ### Nested classes ||
|---|---|
| ` interface` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory` Used to allow returning sub-classes of `https://developer.android.com/reference/android/database/Cursor` when calling query. |
| ` class` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.OpenParams` Wrapper for configuration parameters that are used for opening `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` |

| ### Constants ||
|---|---|
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CONFLICT_ABORT` When a constraint violation occurs,no ROLLBACK is executed so changes from prior commands within the same transaction are preserved. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CONFLICT_FAIL` When a constraint violation occurs, the command aborts with a return code SQLITE_CONSTRAINT. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CONFLICT_IGNORE` When a constraint violation occurs, the one row that contains the constraint violation is not inserted or changed. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CONFLICT_NONE` Use the following when no conflict action is specified. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CONFLICT_REPLACE` When a UNIQUE constraint violation occurs, the pre-existing rows that are causing the constraint violation are removed prior to inserting or updating the current row. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CONFLICT_ROLLBACK` When a constraint violation occurs, an immediate ROLLBACK occurs, thus ending the current transaction, and the command aborts with a return code of SQLITE_CONSTRAINT. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CREATE_IF_NECESSARY` Open flag: Flag for `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)` to create the database file if it does not already exist. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#ENABLE_WRITE_AHEAD_LOGGING` Open flag: Flag for `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)` to open the database file with write-ahead logging enabled by default. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#JOURNAL_MODE_DELETE` The `DELETE` journaling mode is the normal behavior. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#JOURNAL_MODE_MEMORY` The `MEMORY` journaling mode stores the rollback journal in volatile RAM. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#JOURNAL_MODE_OFF` The `OFF` journaling mode disables the rollback journal completely. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#JOURNAL_MODE_PERSIST` The `PERSIST` journaling mode prevents the rollback journal from being deleted at the end of each transaction. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#JOURNAL_MODE_TRUNCATE` The `TRUNCATE` journaling mode commits transactions by truncating the rollback journal to zero-length instead of deleting it. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#JOURNAL_MODE_WAL` The `WAL` journaling mode uses a write-ahead log instead of a rollback journal to implement transactions. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#MAX_SQL_CACHE_SIZE` Absolute max value that can be set by `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setMaxSqlCacheSize(int)`. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#NO_LOCALIZED_COLLATORS` Open flag: Flag for `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)` to open the database without support for localized collators. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READONLY` Open flag: Flag for `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)` to open the database for reading only. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READWRITE` Open flag: Flag for `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)` to open the database for reading and writing. If the disk is full, this may fail even before you actually write anything. |
| `int` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#SQLITE_MAX_LIKE_PATTERN_LENGTH` Maximum Length Of A LIKE Or GLOB Pattern The pattern matching algorithm used in the default LIKE and GLOB implementation of SQLite can exhibit O(N\^2) performance (where N is the number of characters in the pattern) for certain pathological cases. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#SYNC_MODE_EXTRA` The `EXTRA` sync mode is like `FULL` sync mode with the addition that the directory containing a rollback journal is synced after that journal is unlinked to commit a transaction in `DELETE` journal mode. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#SYNC_MODE_FULL` In `FULL` sync mode the SQLite database engine will use the xSync method of the VFS to ensure that all content is safely written to the disk surface prior to continuing. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#SYNC_MODE_NORMAL` The `NORMAL` sync mode, the SQLite database engine will still sync at the most critical moments, but less often than in `FULL` mode. |
| `https://developer.android.com/reference/java/lang/String` | `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#SYNC_MODE_OFF` In `OFF` sync mode SQLite continues without syncing as soon as it has handed data off to the operating system. |

| ### Public methods ||
|---|---|
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#beginTransaction()() ` Begins a transaction in EXCLUSIVE mode. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#beginTransactionNonExclusive()() ` Begins a transaction in IMMEDIATE mode. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#beginTransactionReadOnly()() ` Begins a transaction in DEFERRED mode, with the android-specific constraint that the transaction is read-only. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#beginTransactionWithListener(android.database.sqlite.SQLiteTransactionListener)(https://developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener transactionListener) ` Begins a transaction in EXCLUSIVE mode. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#beginTransactionWithListenerNonExclusive(android.database.sqlite.SQLiteTransactionListener)(https://developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener transactionListener) ` Begins a transaction in IMMEDIATE mode. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#beginTransactionWithListenerReadOnly(android.database.sqlite.SQLiteTransactionListener)(https://developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener transactionListener) ` Begins a transaction in read-only mode with a `https://developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener` listener. |
| ` https://developer.android.com/reference/android/database/sqlite/SQLiteStatement` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#compileStatement(java.lang.String)(https://developer.android.com/reference/java/lang/String sql) ` Compiles an SQL statement into a reusable pre-compiled statement object. |
| ` static https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#create(android.database.sqlite.SQLiteDatabase.CursorFactory)(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory factory) ` Create a memory backed SQLite database. |
| ` static https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#createInMemory(android.database.sqlite.SQLiteDatabase.OpenParams)(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.OpenParams openParams) ` Create a memory backed SQLite database. |
| ` https://developer.android.com/reference/android/database/sqlite/SQLiteRawStatement` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#createRawStatement(java.lang.String)(https://developer.android.com/reference/java/lang/String sql) ` Return a `https://developer.android.com/reference/android/database/sqlite/SQLiteRawStatement` connected to the database. |
| ` int` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#delete(java.lang.String,%20java.lang.String,%20java.lang.String[])(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String whereClause, https://developer.android.com/reference/java/lang/String whereArgs) ` Convenience method for deleting rows in the database. |
| ` static boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#deleteDatabase(java.io.File)(https://developer.android.com/reference/java/io/File file) ` Deletes a database including its journal file and other auxiliary files that may have been created by the database engine. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#disableWriteAheadLogging()() ` This method disables the features enabled by `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`. |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()() ` Write-ahead logging enables parallel execution of queries from multiple threads on the same database, and reduces the likelihood of stalling on filesystem syncs. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#endTransaction()() ` End a transaction. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#execPerConnectionSQL(java.lang.String,%20java.lang.Object[])(https://developer.android.com/reference/java/lang/String sql, https://developer.android.com/reference/java/lang/Object bindArgs) ` Execute the given SQL statement on all connections to this database. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#execSQL(java.lang.String)(https://developer.android.com/reference/java/lang/String sql) ` Execute a single SQL statement that is NOT a SELECT or any other SQL statement that returns data. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#execSQL(java.lang.String,%20java.lang.Object[])(https://developer.android.com/reference/java/lang/String sql, https://developer.android.com/reference/java/lang/Object bindArgs) ` Execute a single SQL statement that is NOT a SELECT/INSERT/UPDATE/DELETE. |
| ` static https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#findEditTable(java.lang.String)(https://developer.android.com/reference/java/lang/String tables) ` Finds the name of the first table, which is editable. |
| ` https://developer.android.com/reference/java/util/List<https://developer.android.com/reference/android/util/Pair<https://developer.android.com/reference/java/lang/String, https://developer.android.com/reference/java/lang/String>>` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#getAttachedDbs()() ` Returns list of full pathnames of all attached databases including the main database by executing 'pragma database_list' on the database. |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#getLastChangedRowCount()() ` Return the number of database rows that were inserted, updated, or deleted by the most recent SQL statement within the current transaction. |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#getLastInsertRowId()() ` Return the "rowid" of the last row to be inserted on the current connection. |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#getMaximumSize()() ` Returns the maximum size the database may grow to. |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#getPageSize()() ` Returns the current database page size, in bytes. |
| ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#getPath()() ` Gets the path to the database file. |
| ` https://developer.android.com/reference/java/util/Map<https://developer.android.com/reference/java/lang/String, https://developer.android.com/reference/java/lang/String>` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#getSyncedTables()() ` *This method was deprecated in API level 15. This method no longer serves any useful purpose and has been deprecated.* |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#getTotalChangedRowCount()() ` Return the total number of database rows that have been inserted, updated, or deleted on the current connection since it was created. |
| ` int` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#getVersion()() ` Gets the database version. |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#inTransaction()() ` Returns true if the current thread has a transaction pending. |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#insert(java.lang.String,%20java.lang.String,%20android.content.ContentValues)(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String nullColumnHack, https://developer.android.com/reference/android/content/ContentValues values) ` Convenience method for inserting a row into the database. |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#insertOrThrow(java.lang.String,%20java.lang.String,%20android.content.ContentValues)(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String nullColumnHack, https://developer.android.com/reference/android/content/ContentValues values) ` Convenience method for inserting a row into the database. |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#insertWithOnConflict(java.lang.String,%20java.lang.String,%20android.content.ContentValues,%20int)(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String nullColumnHack, https://developer.android.com/reference/android/content/ContentValues initialValues, int conflictAlgorithm) ` General method for inserting a row into the database. |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#isDatabaseIntegrityOk()() ` Runs 'pragma integrity_check' on the given database (and all the attached databases) and returns true if the given database (and all its attached databases) pass integrity_check, false otherwise. |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#isDbLockedByCurrentThread()() ` Returns true if the current thread is holding an active connection to the database. |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#isDbLockedByOtherThreads()() ` *This method was deprecated in API level 16. Always returns false. Do not use this method.* |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#isOpen()() ` Returns true if the database is currently open. |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#isReadOnly()() ` Returns true if the database is opened as read only. |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#isWriteAheadLoggingEnabled()() ` Returns true if write-ahead logging has been enabled for this database. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#markTableSyncable(java.lang.String,%20java.lang.String)(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String deletedTable) ` *This method was deprecated in API level 15. This method no longer serves any useful purpose and has been deprecated.* |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#markTableSyncable(java.lang.String,%20java.lang.String,%20java.lang.String)(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String foreignKey, https://developer.android.com/reference/java/lang/String updateTable) ` *This method was deprecated in API level 15. This method no longer serves any useful purpose and has been deprecated.* |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#needUpgrade(int)(int newVersion) ` Returns true if the new version code is greater than the current database version. |
| ` static https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.lang.String,%20android.database.sqlite.SQLiteDatabase.CursorFactory,%20int)(https://developer.android.com/reference/java/lang/String path, https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory factory, int flags) ` Open the database according to the flags `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READWRITE` `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READONLY` `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CREATE_IF_NECESSARY` and/or `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#NO_LOCALIZED_COLLATORS`. |
| ` static https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)(https://developer.android.com/reference/java/io/File path, https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.OpenParams openParams) ` Open the database according to the specified `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.OpenParams` |
| ` static https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.lang.String,%20android.database.sqlite.SQLiteDatabase.CursorFactory,%20int,%20android.database.DatabaseErrorHandler)(https://developer.android.com/reference/java/lang/String path, https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory factory, int flags, https://developer.android.com/reference/android/database/DatabaseErrorHandler errorHandler) ` Open the database according to the flags `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READWRITE` `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READONLY` `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CREATE_IF_NECESSARY` and/or `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#NO_LOCALIZED_COLLATORS`. |
| ` static https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openOrCreateDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.CursorFactory)(https://developer.android.com/reference/java/io/File file, https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory factory) ` Equivalent to openDatabase(file.getPath(), factory, CREATE_IF_NECESSARY). |
| ` static https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openOrCreateDatabase(java.lang.String,%20android.database.sqlite.SQLiteDatabase.CursorFactory,%20android.database.DatabaseErrorHandler)(https://developer.android.com/reference/java/lang/String path, https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory factory, https://developer.android.com/reference/android/database/DatabaseErrorHandler errorHandler) ` Equivalent to openDatabase(path, factory, CREATE_IF_NECESSARY, errorHandler). |
| ` static https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openOrCreateDatabase(java.lang.String,%20android.database.sqlite.SQLiteDatabase.CursorFactory)(https://developer.android.com/reference/java/lang/String path, https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory factory) ` Equivalent to openDatabase(path, factory, CREATE_IF_NECESSARY). |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#query(boolean,%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String)(boolean distinct, https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String columns, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String groupBy, https://developer.android.com/reference/java/lang/String having, https://developer.android.com/reference/java/lang/String orderBy, https://developer.android.com/reference/java/lang/String limit) ` Query the given URL, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#query(java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String)(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String columns, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String groupBy, https://developer.android.com/reference/java/lang/String having, https://developer.android.com/reference/java/lang/String orderBy, https://developer.android.com/reference/java/lang/String limit) ` Query the given table, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#query(boolean,%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String,%20android.os.CancellationSignal)(boolean distinct, https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String columns, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String groupBy, https://developer.android.com/reference/java/lang/String having, https://developer.android.com/reference/java/lang/String orderBy, https://developer.android.com/reference/java/lang/String limit, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Query the given URL, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#query(java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String,%20java.lang.String)(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String columns, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String groupBy, https://developer.android.com/reference/java/lang/String having, https://developer.android.com/reference/java/lang/String orderBy) ` Query the given table, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory,%20boolean,%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory cursorFactory, boolean distinct, https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String columns, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String groupBy, https://developer.android.com/reference/java/lang/String having, https://developer.android.com/reference/java/lang/String orderBy, https://developer.android.com/reference/java/lang/String limit, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Query the given URL, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory,%20boolean,%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String)(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory cursorFactory, boolean distinct, https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String columns, https://developer.android.com/reference/java/lang/String selection, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String groupBy, https://developer.android.com/reference/java/lang/String having, https://developer.android.com/reference/java/lang/String orderBy, https://developer.android.com/reference/java/lang/String limit) ` Query the given URL, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#rawQuery(java.lang.String,%20java.lang.String[],%20android.os.CancellationSignal)(https://developer.android.com/reference/java/lang/String sql, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Runs the provided SQL and returns a `https://developer.android.com/reference/android/database/Cursor` over the result set. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#rawQuery(java.lang.String,%20java.lang.String[])(https://developer.android.com/reference/java/lang/String sql, https://developer.android.com/reference/java/lang/String selectionArgs) ` Runs the provided SQL and returns a `https://developer.android.com/reference/android/database/Cursor` over the result set. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory,%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20android.os.CancellationSignal)(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory cursorFactory, https://developer.android.com/reference/java/lang/String sql, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String editTable, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Runs the provided SQL and returns a cursor over the result set. |
| ` https://developer.android.com/reference/android/database/Cursor` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory,%20java.lang.String,%20java.lang.String[],%20java.lang.String)(https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory cursorFactory, https://developer.android.com/reference/java/lang/String sql, https://developer.android.com/reference/java/lang/String selectionArgs, https://developer.android.com/reference/java/lang/String editTable) ` Runs the provided SQL and returns a cursor over the result set. |
| ` static int` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#releaseMemory()() ` Attempts to release memory that SQLite holds but does not require to operate properly. |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#replace(java.lang.String,%20java.lang.String,%20android.content.ContentValues)(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String nullColumnHack, https://developer.android.com/reference/android/content/ContentValues initialValues) ` Convenience method for replacing a row in the database. |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#replaceOrThrow(java.lang.String,%20java.lang.String,%20android.content.ContentValues)(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/java/lang/String nullColumnHack, https://developer.android.com/reference/android/content/ContentValues initialValues) ` Convenience method for replacing a row in the database. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setCustomAggregateFunction(java.lang.String,%20java.util.function.BinaryOperator<java.lang.String>)(https://developer.android.com/reference/java/lang/String functionName, https://developer.android.com/reference/java/util/function/BinaryOperator<https://developer.android.com/reference/java/lang/String> aggregateFunction) ` Register a custom aggregate function that can be called from SQL expressions. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setCustomScalarFunction(java.lang.String,%20java.util.function.UnaryOperator<java.lang.String>)(https://developer.android.com/reference/java/lang/String functionName, https://developer.android.com/reference/java/util/function/UnaryOperator<https://developer.android.com/reference/java/lang/String> scalarFunction) ` Register a custom scalar function that can be called from SQL expressions. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setForeignKeyConstraintsEnabled(boolean)(boolean enable) ` Sets whether foreign key constraints are enabled for the database. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setLocale(java.util.Locale)(https://developer.android.com/reference/java/util/Locale locale) ` Sets the locale for this database. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setLockingEnabled(boolean)(boolean lockingEnabled) ` *This method was deprecated in API level 16. This method now does nothing. Do not use.* |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setMaxSqlCacheSize(int)(int cacheSize) ` Sets the maximum size of the prepared-statement cache for this database. |
| ` long` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setMaximumSize(long)(long numBytes) ` Sets the maximum size the database will grow to. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setPageSize(long)(long numBytes) ` Sets the database page size. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setTransactionSuccessful()() ` Marks the current transaction as successful. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setVersion(int)(int version) ` Sets the database version. |
| ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#toString()() ` Returns a string representation of the object. |
| ` int` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#update(java.lang.String,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[])(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/android/content/ContentValues values, https://developer.android.com/reference/java/lang/String whereClause, https://developer.android.com/reference/java/lang/String whereArgs) ` Convenience method for updating rows in the database. |
| ` int` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#updateWithOnConflict(java.lang.String,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[],%20int)(https://developer.android.com/reference/java/lang/String table, https://developer.android.com/reference/android/content/ContentValues values, https://developer.android.com/reference/java/lang/String whereClause, https://developer.android.com/reference/java/lang/String whereArgs, int conflictAlgorithm) ` Convenience method for updating rows in the database. |
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#validateSql(java.lang.String,%20android.os.CancellationSignal)(https://developer.android.com/reference/java/lang/String sql, https://developer.android.com/reference/android/os/CancellationSignal cancellationSignal) ` Verifies that a SQL SELECT statement is valid by compiling it. |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#yieldIfContended()() ` *This method was deprecated in API level 15. if the db is locked more than once (because of nested transactions) then the lock will not be yielded. Use yieldIfContendedSafely instead.* |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#yieldIfContendedSafely()() ` Temporarily end the transaction to let other threads run. |
| ` boolean` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#yieldIfContendedSafely(long)(long sleepAfterYieldDelay) ` Temporarily end the transaction to let other threads run. |

| ### Protected methods ||
|---|---|
| ` void` | ` https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#onAllReferencesReleased()() ` Called when the last reference to the object was released by a call to `https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#releaseReference()` or `https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#close()`. |

### Inherited methods

From class `

https://developer.android.com/reference/android/database/sqlite/SQLiteClosable

` `


void` `
https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#acquireReference()()
`

Acquires a reference to the object.


`


void` `
https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#close()()
`

Releases a reference to the object, closing the object if the last reference
was released.


`
abstract


void` `
https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#onAllReferencesReleased()()
`

Called when the last reference to the object was released by
a call to `https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#releaseReference()` or `https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#close()`.


`


void` `
https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#onAllReferencesReleasedFromContainer()()
`

*This method was deprecated
in API level 16.
Do not use.*


`


void` `
https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#releaseReference()()
`

Releases a reference to the object, closing the object if the last reference
was released.


`


void` `
https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#releaseReferenceFromContainer()()
`

*This method was deprecated
in API level 16.
Do not use.*


From class `

https://developer.android.com/reference/java/lang/Object

` `


https://developer.android.com/reference/java/lang/Object` `
https://developer.android.com/reference/java/lang/Object#clone()()
`

Creates and returns a copy of this object.


`


boolean` `
https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj)
`

Indicates whether some other object is "equal to" this one.


`


void` `
https://developer.android.com/reference/java/lang/Object#finalize()()
`

Called by the garbage collector on an object when garbage collection
determines that there are no more references to the object.


`


final

https://developer.android.com/reference/java/lang/Class<?>` `
https://developer.android.com/reference/java/lang/Object#getClass()()
`

Returns the runtime class of this `Object`.


`


int` `
https://developer.android.com/reference/java/lang/Object#hashCode()()
`

Returns a hash code value for the object.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#notify()()
`

Wakes up a single thread that is waiting on this object's
monitor.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#notifyAll()()
`

Wakes up all threads that are waiting on this object's monitor.


`


https://developer.android.com/reference/java/lang/String` `
https://developer.android.com/reference/java/lang/Object#toString()()
`

Returns a string representation of the object.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos)
`

Causes the current thread to wait until it is awakened, typically
by being *notified* or *interrupted*, or until a
certain amount of real time has elapsed.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis)
`

Causes the current thread to wait until it is awakened, typically
by being *notified* or *interrupted*, or until a
certain amount of real time has elapsed.


`


final

void` `
https://developer.android.com/reference/java/lang/Object#wait()()
`

Causes the current thread to wait until it is awakened, typically
by being *notified* or *interrupted*.


From interface `

https://developer.android.com/reference/java/io/Closeable

` `
abstract


void` `
https://developer.android.com/reference/java/io/Closeable#close()()
`

Closes this stream and releases any system resources associated
with it.


From interface `

https://developer.android.com/reference/java/lang/AutoCloseable

` `
abstract


void` `
https://developer.android.com/reference/java/lang/AutoCloseable#close()()
`

Closes this resource, relinquishing any underlying resources.


## Constants

### CONFLICT_ABORT

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CONFLICT_ABORT
```

When a constraint violation occurs,no ROLLBACK is executed
so changes from prior commands within the same transaction
are preserved. This is the default behavior.

<br />

Constant Value:

2
(0x00000002)


### CONFLICT_FAIL

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CONFLICT_FAIL
```

When a constraint violation occurs, the command aborts with a return
code SQLITE_CONSTRAINT. But any changes to the database that
the command made prior to encountering the constraint violation
are preserved and are not backed out.

<br />

Constant Value:

3
(0x00000003)


### CONFLICT_IGNORE

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CONFLICT_IGNORE
```

When a constraint violation occurs, the one row that contains
the constraint violation is not inserted or changed.
But the command continues executing normally. Other rows before and
after the row that contained the constraint violation continue to be
inserted or updated normally. No error is returned.

<br />

Constant Value:

4
(0x00000004)


### CONFLICT_NONE

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CONFLICT_NONE
```

Use the following when no conflict action is specified.

<br />

Constant Value:

0
(0x00000000)


### CONFLICT_REPLACE

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CONFLICT_REPLACE
```

When a UNIQUE constraint violation occurs, the pre-existing rows that
are causing the constraint violation are removed prior to inserting
or updating the current row. Thus the insert or update always occurs.
The command continues executing normally. No error is returned.
If a NOT NULL constraint violation occurs, the NULL value is replaced
by the default value for that column. If the column has no default
value, then the ABORT algorithm is used. If a CHECK constraint
violation occurs then the IGNORE algorithm is used. When this conflict
resolution strategy deletes rows in order to satisfy a constraint,
it does not invoke delete triggers on those rows.
This behavior might change in a future release.

<br />

Constant Value:

5
(0x00000005)


### CONFLICT_ROLLBACK

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CONFLICT_ROLLBACK
```

When a constraint violation occurs, an immediate ROLLBACK occurs,
thus ending the current transaction, and the command aborts with a
return code of SQLITE_CONSTRAINT. If no transaction is active
(other than the implied transaction that is created on every command)
then this algorithm works the same as ABORT.

<br />

Constant Value:

1
(0x00000001)


### CREATE_IF_NECESSARY

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int CREATE_IF_NECESSARY
```

Open flag: Flag for `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)` to create the database file if it does not
already exist.

<br />

Constant Value:

268435456
(0x10000000)


### ENABLE_WRITE_AHEAD_LOGGING

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int ENABLE_WRITE_AHEAD_LOGGING
```

Open flag: Flag for `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)` to open the database file with
write-ahead logging enabled by default. Using this flag is more efficient
than calling `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`.

Write-ahead logging cannot be used with read-only databases so the value of
this flag is ignored if the database is opened read-only.

<br />

**See also:**

- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`

Constant Value:

536870912
(0x20000000)


### JOURNAL_MODE_DELETE

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String JOURNAL_MODE_DELETE
```

The `DELETE` journaling mode is the normal behavior. In the DELETE mode, the rollback
journal is deleted at the conclusion of each transaction.

See [here](https://www.sqlite.org/pragma.html#pragma_journal_mode) for more
details.

<br />

<br />

Constant Value:

"DELETE"


### JOURNAL_MODE_MEMORY

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String JOURNAL_MODE_MEMORY
```

The `MEMORY` journaling mode stores the rollback journal in volatile RAM.
This saves disk I/O but at the expense of database safety and integrity. If the application
using SQLite crashes in the middle of a transaction when the MEMORY journaling mode is set,
then the database file will very likely go corrupt.

See [here](https://www.sqlite.org/pragma.html#pragma_journal_mode) for more
details.

<br />

<br />

Constant Value:

"MEMORY"


### JOURNAL_MODE_OFF

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String JOURNAL_MODE_OFF
```

The `OFF` journaling mode disables the rollback journal completely. No rollback journal
is ever created and hence there is never a rollback journal to delete. The OFF journaling
mode disables the atomic commit and rollback capabilities of SQLite. The ROLLBACK command
behaves in an undefined way thus applications must avoid using the ROLLBACK command.
If the application crashes in the middle of a transaction, then the database file will very
likely go corrupt.

See [here](https://www.sqlite.org/pragma.html#pragma_journal_mode) for more
details.

<br />

<br />

Constant Value:

"OFF"


### JOURNAL_MODE_PERSIST

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String JOURNAL_MODE_PERSIST
```

The `PERSIST` journaling mode prevents the rollback journal from being deleted at the
end of each transaction. Instead, the header of the journal is overwritten with zeros.
This will prevent other database connections from rolling the journal back.

This mode is useful as an optimization on platforms where deleting or truncating a file is
much more expensive than overwriting the first block of a file with zeros.

See [here](https://www.sqlite.org/pragma.html#pragma_journal_mode) for more
details.

<br />

<br />

Constant Value:

"PERSIST"


### JOURNAL_MODE_TRUNCATE

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String JOURNAL_MODE_TRUNCATE
```

The `TRUNCATE` journaling mode commits transactions by truncating the rollback journal
to zero-length instead of deleting it. On many systems, truncating a file is much faster than
deleting the file since the containing directory does not need to be changed.

See [here](https://www.sqlite.org/pragma.html#pragma_journal_mode) for more
details.

<br />

<br />

Constant Value:

"TRUNCATE"


### JOURNAL_MODE_WAL

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String JOURNAL_MODE_WAL
```

The `WAL` journaling mode uses a write-ahead log instead of a rollback journal to
implement transactions. The WAL journaling mode is persistent; after being set it stays
in effect across multiple database connections and after closing and reopening the database.

Performance Considerations:
This mode is recommended when the goal is to improve write performance or parallel read/write
performance. However, it is important to note that WAL introduces checkpoints which commit
all transactions that have not been synced to the database thus to maximize read performance
and lower checkpointing cost a small journal size is recommended. However, other modes such
as `DELETE` will not perform checkpoints, so it is a trade off that needs to be
considered as part of the decision of which journal mode to use.

See [here](https://www.sqlite.org/pragma.html#pragma_journal_mode) for more
details.

<br />

<br />

Constant Value:

"WAL"


### MAX_SQL_CACHE_SIZE

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int MAX_SQL_CACHE_SIZE
```

Absolute max value that can be set by `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setMaxSqlCacheSize(int)`.

Each prepared-statement is between 1K - 6K, depending on the complexity of the
SQL statement \& schema. A large SQL cache may use a significant amount of memory.

<br />

Constant Value:

100
(0x00000064)


### NO_LOCALIZED_COLLATORS

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int NO_LOCALIZED_COLLATORS
```

Open flag: Flag for `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)` to open the database without support for
localized collators.

This causes the collator `LOCALIZED` not to be created.
You must be consistent when using this flag to use the setting the database was
created with. If this is set, `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setLocale(java.util.Locale)` will do nothing.

<br />

Constant Value:

16
(0x00000010)


### OPEN_READONLY

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int OPEN_READONLY
```

Open flag: Flag for `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)` to open the database for reading only.
This is the only reliable way to open a database if the disk may be full.

<br />

Constant Value:

1
(0x00000001)


### OPEN_READWRITE

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int OPEN_READWRITE
```

Open flag: Flag for `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)` to open the database for reading and writing.
If the disk is full, this may fail even before you actually write anything.

Note that the value of this flag is 0, so it is the default.

<br />

Constant Value:

0
(0x00000000)


### SQLITE_MAX_LIKE_PATTERN_LENGTH

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int SQLITE_MAX_LIKE_PATTERN_LENGTH
```

Maximum Length Of A LIKE Or GLOB Pattern
The pattern matching algorithm used in the default LIKE and GLOB implementation
of SQLite can exhibit O(N\^2) performance (where N is the number of characters in
the pattern) for certain pathological cases. To avoid denial-of-service attacks
the length of the LIKE or GLOB pattern is limited to SQLITE_MAX_LIKE_PATTERN_LENGTH bytes.
The default value of this limit is 50000. A modern workstation can evaluate
even a pathological LIKE or GLOB pattern of 50000 bytes relatively quickly.
The denial of service problem only comes into play when the pattern length gets
into millions of bytes. Nevertheless, since most useful LIKE or GLOB patterns
are at most a few dozen bytes in length, cautious application developers may
want to reduce this parameter to something in the range of a few hundred
if they know that external users are able to generate arbitrary patterns.

<br />

Constant Value:

50000
(0x0000c350)


### SYNC_MODE_EXTRA

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String SYNC_MODE_EXTRA
```

The `EXTRA` sync mode is like `FULL` sync mode with the addition that the
directory containing a rollback journal is synced after that journal is unlinked to commit a
transaction in `DELETE` journal mode.

`EXTRA` provides additional durability if the commit is followed closely by a
power loss.

See [here](https://www.sqlite.org/pragma.html#pragma_synchronous) for more
details.

<br />

<br />

Constant Value:

"EXTRA"


### SYNC_MODE_FULL

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String SYNC_MODE_FULL
```

In `FULL` sync mode the SQLite database engine will use the xSync method of the VFS
to ensure that all content is safely written to the disk surface prior to continuing.
This ensures that an operating system crash or power failure will not corrupt the database.
`FULL` is very safe, but it is also slower.

`FULL` is the most commonly used synchronous setting when not in WAL mode.

See [here](https://www.sqlite.org/pragma.html#pragma_synchronous) for more
details.

<br />

<br />

Constant Value:

"FULL"


### SYNC_MODE_NORMAL

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String SYNC_MODE_NORMAL
```

The `NORMAL` sync mode, the SQLite database engine will still sync at the most critical
moments, but less often than in `FULL` mode. There is a very small chance that a
power failure at the wrong time could corrupt the database in `DELETE` journal mode on
an older filesystem.

`WAL` journal mode is safe from corruption with `NORMAL` sync mode, and probably
`DELETE` sync mode is safe too on modern filesystems. WAL mode is always consistent
with `NORMAL` sync mode, but WAL mode does lose durability. A transaction committed in
WAL mode with `NORMAL` might roll back following a power loss or system crash.
Transactions are durable across application crashes regardless of the synchronous setting
or journal mode.

The `NORMAL` sync mode is a good choice for most applications running in WAL mode.

Caveat: Even though this sync mode is safe Be careful when using `NORMAL` sync mode
when dealing with data dependencies between multiple databases, unless those databases use
the same durability or are somehow synced, there could be corruption.

See [here](https://www.sqlite.org/pragma.html#pragma_synchronous) for more
details.

<br />

<br />

Constant Value:

"NORMAL"


### SYNC_MODE_OFF

Added in [API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final String SYNC_MODE_OFF
```

In `OFF` sync mode SQLite continues without syncing as soon as it has handed data off
to the operating system. If the application running SQLite crashes, the data will be safe,
but the database might become corrupted if the operating system crashes or the computer loses
power before that data has been written to the disk surface. On the other hand, commits can
be orders of magnitude faster with synchronous `OFF`.

See [here](https://www.sqlite.org/pragma.html#pragma_synchronous) for more
details.

<br />

<br />

Constant Value:

"OFF"


## Public methods

### beginTransaction

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void beginTransaction ()
```

Begins a transaction in EXCLUSIVE mode.


Transactions can be nested.
When the outer transaction is ended all of
the work done in that transaction and all of the nested transactions will be committed or
rolled back. The changes will be rolled back if any transaction is ended without being
marked as clean (by calling setTransactionSuccessful). Otherwise they will be committed.

Here is the standard idiom for transactions:

```
  db.beginTransaction();
  try {
    ...
    db.setTransactionSuccessful();
  } finally {
    db.endTransaction();
  }
```

<br />

<br />

### beginTransactionNonExclusive

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void beginTransactionNonExclusive ()
```

Begins a transaction in IMMEDIATE mode. Transactions can be nested. When
the outer transaction is ended all of the work done in that transaction
and all of the nested transactions will be committed or rolled back. The
changes will be rolled back if any transaction is ended without being
marked as clean (by calling setTransactionSuccessful). Otherwise they
will be committed.


Here is the standard idiom for transactions:

```
  db.beginTransactionNonExclusive();
  try {
    ...
    db.setTransactionSuccessful();
  } finally {
    db.endTransaction();
  }
```

<br />

<br />

### beginTransactionReadOnly

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void beginTransactionReadOnly ()
```

Begins a transaction in DEFERRED mode, with the android-specific constraint that the
transaction is read-only. The database may not be modified inside a read-only transaction.


Read-only transactions may run concurrently with other read-only transactions, and if the
database is in WAL mode, they may also run concurrently with IMMEDIATE or EXCLUSIVE
transactions. The `temp` schema may be modified during a read-only transaction;
if the transaction is `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setTransactionSuccessful()`, modifications to temp tables may
be visible to some subsequent transactions.


Transactions can be nested. However, the behavior of the transaction is not altered by
nested transactions. A nested transaction may be any of the three transaction types but if
the outermost type is read-only then nested transactions remain read-only, regardless of how
they are started.


Here is the standard idiom for read-only transactions:

```
  db.beginTransactionReadOnly();
  try {
    ...
  } finally {
    db.endTransaction();
  }
```

<br />

<br />

### beginTransactionWithListener

Added in [API level 5](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void beginTransactionWithListener (SQLiteTransactionListener transactionListener)
```

Begins a transaction in EXCLUSIVE mode.


Transactions can be nested.
When the outer transaction is ended all of
the work done in that transaction and all of the nested transactions will be committed or
rolled back. The changes will be rolled back if any transaction is ended without being
marked as clean (by calling setTransactionSuccessful). Otherwise they will be committed.

Here is the standard idiom for transactions:

```
  db.beginTransactionWithListener(listener);
  try {
    ...
    db.setTransactionSuccessful();
  } finally {
    db.endTransaction();
  }
```

<br />

<br />

| Parameters ||
|---|---|
| `transactionListener` | `SQLiteTransactionListener`: listener that should be notified when the transaction begins, commits, or is rolled back, either explicitly or by a call to `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#yieldIfContendedSafely()`. This value may be `null`. <br /> |

### beginTransactionWithListenerNonExclusive

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void beginTransactionWithListenerNonExclusive (SQLiteTransactionListener transactionListener)
```

Begins a transaction in IMMEDIATE mode. Transactions can be nested. When
the outer transaction is ended all of the work done in that transaction
and all of the nested transactions will be committed or rolled back. The
changes will be rolled back if any transaction is ended without being
marked as clean (by calling setTransactionSuccessful). Otherwise they
will be committed.


Here is the standard idiom for transactions:

```
  db.beginTransactionWithListenerNonExclusive(listener);
  try {
    ...
    db.setTransactionSuccessful();
  } finally {
    db.endTransaction();
  }
```

<br />

<br />

| Parameters ||
|---|---|
| `transactionListener` | `SQLiteTransactionListener`: listener that should be notified when the transaction begins, commits, or is rolled back, either explicitly or by a call to `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#yieldIfContendedSafely()`. This value may be `null`. <br /> |

### beginTransactionWithListenerReadOnly

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void beginTransactionWithListenerReadOnly (SQLiteTransactionListener transactionListener)
```

Begins a transaction in read-only mode with a `https://developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener` listener.
The database may not be updated inside a read-only transaction.


Transactions can be nested. However, the behavior of the transaction is not altered by
nested transactions. A nested transaction may be any of the three transaction types but if
the outermost type is read-only then nested transactions remain read-only, regardless of how
they are started.


Here is the standard idiom for read-only transactions:

```
  db.beginTransactionWightListenerReadOnly(listener);
  try {
    ...
  } finally {
    db.endTransaction();
  }
```

<br />

<br />

| Parameters ||
|---|---|
| `transactionListener` | `SQLiteTransactionListener`: This value may be `null`. <br /> |

### compileStatement

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SQLiteStatement compileStatement (String sql)
```

Compiles an SQL statement into a reusable pre-compiled statement object.
The parameters are identical to `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#execSQL(java.lang.String)`. You may put ?s in the
statement and fill in those values with `https://developer.android.com/reference/android/database/sqlite/SQLiteProgram#bindString(int,%20java.lang.String)`
and `https://developer.android.com/reference/android/database/sqlite/SQLiteProgram#bindLong(int,%20long)` each time you want to run the
statement. Statements may not return result sets larger than 1x1.


No two threads should be using the same `https://developer.android.com/reference/android/database/sqlite/SQLiteStatement` at the same time.

<br />

| Parameters ||
|---|---|
| `sql` | `String`: The raw SQL statement, may contain ? for unknown values to be bound later. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteStatement` | A pre-compiled `https://developer.android.com/reference/android/database/sqlite/SQLiteStatement` object. Note that `https://developer.android.com/reference/android/database/sqlite/SQLiteStatement`s are not synchronized, see the documentation for more details. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/SQLException` |   |

### create

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static SQLiteDatabase create (SQLiteDatabase.CursorFactory factory)
```

Create a memory backed SQLite database. Its contents will be destroyed
when the database is closed.

Sets the locale of the database to the system's current locale.
Call `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setLocale(java.util.Locale)` if you would like something else.

<br />

<br />

| Parameters ||
|---|---|
| `factory` | `SQLiteDatabase.CursorFactory`: an optional factory class that is called to instantiate a cursor when query is called. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | a SQLiteDatabase instance. This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteException` | if the database cannot be created |

### createInMemory

Added in [API level 27](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static SQLiteDatabase createInMemory (SQLiteDatabase.OpenParams openParams)
```

Create a memory backed SQLite database. Its contents will be destroyed
when the database is closed.

Sets the locale of the database to the system's current locale.
Call `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setLocale(java.util.Locale)` if you would like something else.

<br />

<br />

| Parameters ||
|---|---|
| `openParams` | `SQLiteDatabase.OpenParams`: configuration parameters that are used for opening SQLiteDatabase. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | a SQLiteDatabase instance. This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/SQLException` | if the database cannot be created |

### createRawStatement

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SQLiteRawStatement createRawStatement (String sql)
```

Return a `https://developer.android.com/reference/android/database/sqlite/SQLiteRawStatement` connected to the database. A transaction must be in
progress or an exception will be thrown. The resulting object will be closed automatically
when the current transaction closes.

<br />

| Parameters ||
|---|---|
| `sql` | `String`: The SQL string to be compiled into a prepared statement. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteRawStatement` | A `https://developer.android.com/reference/android/database/sqlite/SQLiteRawStatement` holding the compiled SQL. This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteException` | if the SQL cannot be compiled. |
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if a transaction is not in progress. |

### delete

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int delete (String table, 
                String whereClause, 
                String[] whereArgs)
```

Convenience method for deleting rows in the database.

<br />

| Parameters ||
|---|---|
| `table` | `String`: the table to delete from. This value cannot be `null`. <br /> |
| `whereClause` | `String`: the optional WHERE clause to apply when deleting. Passing null will delete all rows. <br /> |
| `whereArgs` | `String`: You may include ?s in the where clause, which will be replaced by the values from whereArgs. The values will be bound as Strings. If whereClause is null or does not contain ?s then whereArgs may be null. <br /> |

| Returns ||
|---|---|
| `int` | the number of rows affected if a whereClause is passed in, 0 otherwise. To remove all rows and get a count pass "1" as the whereClause. <br /> |

### deleteDatabase

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static boolean deleteDatabase (File file)
```

Deletes a database including its journal file and other auxiliary files
that may have been created by the database engine.

<br />

| Parameters ||
|---|---|
| `file` | `File`: The database file path. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `boolean` | True if the database was successfully deleted. <br /> |

### disableWriteAheadLogging

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void disableWriteAheadLogging ()
```

This method disables the features enabled by `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if there are transactions in progress at the time this method is called. WAL mode can only be changed when there are no transactions in progress. |

**See also:**

- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`

### enableWriteAheadLogging

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean enableWriteAheadLogging ()
```

Write-ahead logging enables parallel execution of queries from multiple threads on the same
database, and reduces the likelihood of stalling on filesystem syncs. Write-ahead logging is
significantly faster in most scenarios.

### Benefits and Best Practices

Write-ahead logging is not enabled by default. However it is generally recommended for
apps to enable write-ahead logging, unless the app uses SQLite features that are not
compatible with write-ahead logging.

When write-ahead logging is enabled, write operations occur in a separate log file, which
allows reads in other threads to proceed concurrently. While a write is in progress, readers
on other threads will perceive the state of the database as it was before the write began.
When the write completes, readers on other threads will then perceive the new state of the
database.

Another benefit of write-ahead logging is that it reduces the number of `fsync`
calls to the underlying file system. Calling `fsync` may block on system locks and has
poor tail latency on devices with slow filesystems.

The most efficient way to enable write-ahead logging is to pass the `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#ENABLE_WRITE_AHEAD_LOGGING` flag to `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.OpenParams)`. This is more efficient than
calling `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`.

        SQLiteDatabase db = SQLiteDatabase.openDatabase("db_filename", cursorFactory,
                SQLiteDatabase.CREATE_IF_NECESSARY | SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING,
                myDatabaseErrorHandler);

### Disabling Write-ahead Logging

If the database has any attached databases, then execution of queries in parallel is NOT possible. Likewise, write-ahead logging is not supported for read-only databases or memory databases. In such cases, `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()` returns false.

When write-ahead logging is not enabled (the default, or after calling `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#disableWriteAheadLogging()`), it is not possible for reads and writes to occur on the database
at the same time. Before modifying the database, the writer implicitly acquires an exclusive
lock on the database which prevents readers from accessing the database until the write is
completed.

Write-ahead logging slightly increases the memory usage by SQLite. You can measure the
impact on memory using tools like [meminfo](https://developer.android.com/tools/dumpsys#meminfo).

### Usage

After opening a database with the `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#ENABLE_WRITE_AHEAD_LOGGING` flag or by calling
this method, execution of queries in parallel is enabled as long as the database remains
open. To disable execution of queries in parallel, either call `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#disableWriteAheadLogging()` or close the database and reopen it.

Parallel execution of queries is performed by opening multiple connections to the database
and using a different database connection for each query. The database journal mode is also
changed to enable writes to proceed concurrently with reads. The maximum number of
connections used to execute queries in parallel is dependent upon the device memory and
possibly other properties.

If a query is part of a transaction, then it is executed on the same database handle the
transaction was begun.

Writers should use `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#beginTransactionNonExclusive()` or `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#beginTransactionWithListenerNonExclusive(android.database.sqlite.SQLiteTransactionListener)` to start a transaction.
Non-exclusive mode allows database file to be in readable by other threads executing queries.

If the database has any attached databases, then execution of queries in parallel is NOT
possible. Likewise, write-ahead logging is not supported for read-only databases or memory
databases. In such cases, `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()` returns false.

See also [SQLite Write-Ahead Logging](http://sqlite.org/wal.html) for more
details about how write-ahead logging works.

<br />

| Returns ||
|---|---|
| `boolean` | True if write-ahead logging is enabled. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if there are transactions in progress at the time this method is called. WAL mode can only be changed when there are no transactions in progress. |

**See also:**

- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#ENABLE_WRITE_AHEAD_LOGGING`
- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#disableWriteAheadLogging()`

### endTransaction

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void endTransaction ()
```

End a transaction. See beginTransaction for notes about how to use this and when transactions
are committed and rolled back.

<br />

### execPerConnectionSQL

Added in [API level 30](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void execPerConnectionSQL (String sql, 
                Object[] bindArgs)
```

Execute the given SQL statement on all connections to this database.


This statement will be immediately executed on all existing connections,
and will be automatically executed on all future connections.


Some example usages are changes like `PRAGMA trusted_schema=OFF` or
functions like `SELECT icu_load_collation()`. If you execute these
statements using `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#execSQL(java.lang.String)` then they will only apply to a single
database connection; using this method will ensure that they are
uniformly applied to all current and future connections.

<br />

| Parameters ||
|---|---|
| `sql` | `String`: The SQL statement to be executed. Multiple statements separated by semicolons are not supported. This value cannot be `null`. <br /> |
| `bindArgs` | `Object`: The arguments that should be bound to the SQL statement. This value may be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/SQLException` |   |

### execSQL

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void execSQL (String sql)
```

Execute a single SQL statement that is NOT a SELECT
or any other SQL statement that returns data.


It has no means to return any data (such as the number of affected rows).
Instead, you're encouraged to use `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#insert(java.lang.String,%20java.lang.String,%20android.content.ContentValues)`,
`https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#update(java.lang.String,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[])`, et al, when possible.


When using `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`, journal_mode is
automatically managed by this class. So, do not set journal_mode
using "PRAGMA journal_mode'" statement if your app is using `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`


Note that `PRAGMA` values which apply on a per-connection basis
should *not* be configured using this method; you should instead
use `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#execPerConnectionSQL(java.lang.String,%20java.lang.Object[])` to ensure that they are uniformly
applied to all current and future connections.

<br />

<br />

| Parameters ||
|---|---|
| `sql` | `String`: the SQL statement to be executed. Multiple statements separated by semicolons are not supported. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/SQLException` | if the SQL string is invalid |

### execSQL

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void execSQL (String sql, 
                Object[] bindArgs)
```

Execute a single SQL statement that is NOT a SELECT/INSERT/UPDATE/DELETE.


For INSERT statements, use any of the following instead.

- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#insert(java.lang.String,%20java.lang.String,%20android.content.ContentValues)`
- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#insertOrThrow(java.lang.String,%20java.lang.String,%20android.content.ContentValues)`
- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#insertWithOnConflict(java.lang.String,%20java.lang.String,%20android.content.ContentValues,%20int)`


For UPDATE statements, use any of the following instead.

- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#update(java.lang.String,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[])`
- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#updateWithOnConflict(java.lang.String,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[],%20int)`


For DELETE statements, use any of the following instead.

- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#delete(java.lang.String,%20java.lang.String,%20java.lang.String[])`


For example, the following are good candidates for using this method:

- ALTER TABLE
- CREATE or DROP table / trigger / view / index / virtual table
- REINDEX
- RELEASE
- SAVEPOINT
- PRAGMA that returns no data

<br />


When using `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`, journal_mode is
automatically managed by this class. So, do not set journal_mode
using "PRAGMA journal_mode'" statement if your app is using `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`


Note that `PRAGMA` values which apply on a per-connection basis
should *not* be configured using this method; you should instead
use `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#execPerConnectionSQL(java.lang.String,%20java.lang.Object[])` to ensure that they are uniformly
applied to all current and future connections.

<br />

<br />

| Parameters ||
|---|---|
| `sql` | `String`: the SQL statement to be executed. Multiple statements separated by semicolons are not supported. This value cannot be `null`. <br /> |
| `bindArgs` | `Object`: only byte\[\], String, Long and Double are supported in bindArgs. This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/SQLException` | if the SQL string is invalid |

### findEditTable

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static String findEditTable (String tables)
```

Finds the name of the first table, which is editable.

<br />

| Parameters ||
|---|---|
| `tables` | `String`: a list of tables <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | the first table listed <br /> |

### getAttachedDbs

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public List<Pair<String, String>> getAttachedDbs ()
```

Returns list of full pathnames of all attached databases including the main database
by executing 'pragma database_list' on the database.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/List<https://developer.android.com/reference/android/util/Pair<https://developer.android.com/reference/java/lang/String, https://developer.android.com/reference/java/lang/String>>` | ArrayList of pairs of (database name, database file path) or null if the database is not open. <br /> |

### getLastChangedRowCount

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long getLastChangedRowCount ()
```

Return the number of database rows that were inserted, updated, or deleted by the most recent
SQL statement within the current transaction.

<br />

| Returns ||
|---|---|
| `long` | The number of rows changed by the most recent sql statement <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if there is no current transaction. |

**See also:**

- [sqlite3_changes64](https://sqlite.org/c3ref/changes.html)

### getLastInsertRowId

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long getLastInsertRowId ()
```

Return the "rowid" of the last row to be inserted on the current connection. This method must
only be called when inside a transaction. `https://developer.android.com/reference/java/lang/IllegalStateException` is thrown if the
method is called outside a transaction. If the function is called before any inserts in the
current transaction, the value returned will be from a previous transaction, which may be
from a different thread. If no inserts have occurred on the current connection, the function
returns 0. See the SQLite documentation for the specific details.

<br />

| Returns ||
|---|---|
| `long` | The ROWID of the last row to be inserted under this connection. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if there is no current transaction. |

**See also:**

- [sqlite3_last_insert_rowid](https://sqlite.org/c3ref/last_insert_rowid.html)

### getMaximumSize

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long getMaximumSize ()
```

Returns the maximum size the database may grow to.

<br />

| Returns ||
|---|---|
| `long` | the new maximum database size <br /> |

### getPageSize

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long getPageSize ()
```

Returns the current database page size, in bytes.

<br />

| Returns ||
|---|---|
| `long` | the database page size, in bytes <br /> |

### getPath

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public String getPath ()
```

Gets the path to the database file.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | The path to the database file. <br /> |

### getSyncedTables

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
15](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Map<String, String> getSyncedTables ()
```


**This method was deprecated
in API level 15.**   

This method no longer serves any useful purpose and has been deprecated.

Deprecated.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/Map<https://developer.android.com/reference/java/lang/String, https://developer.android.com/reference/java/lang/String>` | <br /> |

### getTotalChangedRowCount

Added in [API level 35](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long getTotalChangedRowCount ()
```

Return the total number of database rows that have been inserted, updated, or deleted on
the current connection since it was created. Due to Android's internal management of
SQLite connections, the value may, or may not, include changes made in earlier
transactions. Best practice is to compare values returned within a single transaction.

       database.beginTransaction();
       try {
           long initialValue = database.getTotalChangedRowCount();
           // Execute SQL statements
           long changedRows = database.getTotalChangedRowCount() - initialValue;
           // changedRows counts the total number of rows updated in the transaction.
       } finally {
           database.endTransaction();
       }

<br />

<br />

| Returns ||
|---|---|
| `long` | The number of rows changed on the current connection. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if there is no current transaction. |

**See also:**

- [sqlite3_total_changes64](https://sqlite.org/c3ref/changes.html)

### getVersion

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int getVersion ()
```

Gets the database version.

<br />

| Returns ||
|---|---|
| `int` | the database version <br /> |

### inTransaction

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean inTransaction ()
```

Returns true if the current thread has a transaction pending.

<br />

| Returns ||
|---|---|
| `boolean` | True if the current thread is in a transaction. <br /> |

### insert

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long insert (String table, 
                String nullColumnHack, 
                ContentValues values)
```

Convenience method for inserting a row into the database.

<br />

| Parameters ||
|---|---|
| `table` | `String`: the table to insert the row into. This value cannot be `null`. <br /> |
| `nullColumnHack` | `String`: optional; may be `null`. SQL doesn't allow inserting a completely empty row without naming at least one column name. If your provided `values` is empty, no column names are known and an empty row can't be inserted. If not set to null, the `nullColumnHack` parameter provides the name of nullable column name to explicitly insert a NULL into in the case where your `values` is empty. <br /> |
| `values` | `ContentValues`: this map contains the initial column values for the row. The keys should be the column names and the values the column values. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `long` | the row ID of the newly inserted row, or -1 if an error occurred <br /> |

### insertOrThrow

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long insertOrThrow (String table, 
                String nullColumnHack, 
                ContentValues values)
```

Convenience method for inserting a row into the database.

<br />

| Parameters ||
|---|---|
| `table` | `String`: the table to insert the row into. This value cannot be `null`. <br /> |
| `nullColumnHack` | `String`: optional; may be `null`. SQL doesn't allow inserting a completely empty row without naming at least one column name. If your provided `values` is empty, no column names are known and an empty row can't be inserted. If not set to null, the `nullColumnHack` parameter provides the name of nullable column name to explicitly insert a NULL into in the case where your `values` is empty. <br /> |
| `values` | `ContentValues`: this map contains the initial column values for the row. The keys should be the column names and the values the column values. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `long` | the row ID of the newly inserted row, or -1 if an error occurred <br /> |

| Throws ||
|---|---|
|   | android.database.SQLException |
| `https://developer.android.com/reference/android/database/SQLException` |   |

### insertWithOnConflict

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long insertWithOnConflict (String table, 
                String nullColumnHack, 
                ContentValues initialValues, 
                int conflictAlgorithm)
```

General method for inserting a row into the database.

<br />

| Parameters ||
|---|---|
| `table` | `String`: the table to insert the row into. This value cannot be `null`. <br /> |
| `nullColumnHack` | `String`: optional; may be `null`. SQL doesn't allow inserting a completely empty row without naming at least one column name. If your provided `initialValues` is empty, no column names are known and an empty row can't be inserted. If not set to null, the `nullColumnHack` parameter provides the name of nullable column name to explicitly insert a NULL into in the case where your `initialValues` is empty. <br /> |
| `initialValues` | `ContentValues`: this map contains the initial column values for the row. The keys should be the column names and the values the column values. This value may be `null`. <br /> |
| `conflictAlgorithm` | `int`: for insert conflict resolver <br /> |

| Returns ||
|---|---|
| `long` | the row ID of the newly inserted row OR `-1` if either the input parameter `conflictAlgorithm` = `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CONFLICT_IGNORE` or an error occurred. <br /> |

### isDatabaseIntegrityOk

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean isDatabaseIntegrityOk ()
```

Runs 'pragma integrity_check' on the given database (and all the attached databases)
and returns true if the given database (and all its attached databases) pass integrity_check,
false otherwise.


If the result is false, then this method logs the errors reported by the integrity_check
command execution.


Note that 'pragma integrity_check' on a database can take a long time.

<br />

| Returns ||
|---|---|
| `boolean` | true if the given database (and all its attached databases) pass integrity_check, false otherwise. <br /> |

### isDbLockedByCurrentThread

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean isDbLockedByCurrentThread ()
```

Returns true if the current thread is holding an active connection to the database.


The name of this method comes from a time when having an active connection
to the database meant that the thread was holding an actual lock on the
database. Nowadays, there is no longer a true "database lock" although threads
may block if they cannot acquire a database connection to perform a
particular operation.

<br />

<br />

| Returns ||
|---|---|
| `boolean` | True if the current thread is holding an active connection to the database. <br /> |

### isDbLockedByOtherThreads

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean isDbLockedByOtherThreads ()
```


**This method was deprecated
in API level 16.**   

Always returns false. Do not use this method.

Always returns false.


There is no longer the concept of a database lock, so this method always returns false.

<br />

<br />

| Returns ||
|---|---|
| `boolean` | False. <br /> |

### isOpen

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean isOpen ()
```

Returns true if the database is currently open.

<br />

| Returns ||
|---|---|
| `boolean` | True if the database is currently open (has not been closed). <br /> |

### isReadOnly

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean isReadOnly ()
```

Returns true if the database is opened as read only.

<br />

| Returns ||
|---|---|
| `boolean` | True if database is opened as read only. <br /> |

### isWriteAheadLoggingEnabled

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean isWriteAheadLoggingEnabled ()
```

Returns true if write-ahead logging has been enabled for this database.

<br />

| Returns ||
|---|---|
| `boolean` | True if write-ahead logging has been enabled for this database. <br /> |

**See also:**

- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#enableWriteAheadLogging()`
- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#ENABLE_WRITE_AHEAD_LOGGING`

### markTableSyncable

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
15](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void markTableSyncable (String table, 
                String deletedTable)
```


**This method was deprecated
in API level 15.**   

This method no longer serves any useful purpose and has been deprecated.

Mark this table as syncable. When an update occurs in this table the
_sync_dirty field will be set to ensure proper syncing operation.

<br />

| Parameters ||
|---|---|
| `table` | `String`: the table to mark as syncable <br /> |
| `deletedTable` | `String`: The deleted table that corresponds to the syncable table <br /> |

### markTableSyncable

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
15](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void markTableSyncable (String table, 
                String foreignKey, 
                String updateTable)
```


**This method was deprecated
in API level 15.**   

This method no longer serves any useful purpose and has been deprecated.

Mark this table as syncable, with the _sync_dirty residing in another
table. When an update occurs in this table the _sync_dirty field of the
row in updateTable with the _id in foreignKey will be set to
ensure proper syncing operation.

<br />

| Parameters ||
|---|---|
| `table` | `String`: an update on this table will trigger a sync time removal <br /> |
| `foreignKey` | `String`: this is the column in table whose value is an _id in updateTable <br /> |
| `updateTable` | `String`: this is the table that will have its _sync_dirty <br /> |

### needUpgrade

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean needUpgrade (int newVersion)
```

Returns true if the new version code is greater than the current database version.

<br />

| Parameters ||
|---|---|
| `newVersion` | `int`: The new version code. <br /> |

| Returns ||
|---|---|
| `boolean` | True if the new version code is greater than the current database version. <br /> |

### openDatabase

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static SQLiteDatabase openDatabase (String path, 
                SQLiteDatabase.CursorFactory factory, 
                int flags)
```

Open the database according to the flags `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READWRITE`
`https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READONLY` `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CREATE_IF_NECESSARY` and/or `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#NO_LOCALIZED_COLLATORS`.

Sets the locale of the database to the system's current locale.
Call `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setLocale(java.util.Locale)` if you would like something else.

<br />

<br />

| Parameters ||
|---|---|
| `path` | `String`: to database file to open and/or create. This value cannot be `null`. <br /> |
| `factory` | `SQLiteDatabase.CursorFactory`: an optional factory class that is called to instantiate a cursor when query is called, or null for default <br /> |
| `flags` | `int`: to control database access mode. Value is either `0` or a combination of the following: - `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READWRITE` - `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READONLY` - `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CREATE_IF_NECESSARY` - `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#NO_LOCALIZED_COLLATORS` - `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#ENABLE_WRITE_AHEAD_LOGGING` |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | the newly opened database <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteException` | if the database cannot be opened |

### openDatabase

Added in [API level 27](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static SQLiteDatabase openDatabase (File path, 
                SQLiteDatabase.OpenParams openParams)
```

Open the database according to the specified `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.OpenParams`

<br />

| Parameters ||
|---|---|
| `path` | `File`: path to database file to open and/or create. **Important:** The file should be constructed either from an absolute path or by using `https://developer.android.com/reference/android/content/Context#getDatabasePath(java.lang.String)`. This value cannot be `null`. |
| `openParams` | `SQLiteDatabase.OpenParams`: configuration parameters that are used for opening `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | the newly opened database <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteException` | if the database cannot be opened |

### openDatabase

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static SQLiteDatabase openDatabase (String path, 
                SQLiteDatabase.CursorFactory factory, 
                int flags, 
                DatabaseErrorHandler errorHandler)
```

Open the database according to the flags `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READWRITE`
`https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READONLY` `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CREATE_IF_NECESSARY` and/or `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#NO_LOCALIZED_COLLATORS`.

Sets the locale of the database to the system's current locale.
Call `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setLocale(java.util.Locale)` if you would like something else.

Accepts input param: a concrete instance of `https://developer.android.com/reference/android/database/DatabaseErrorHandler` to be
used to handle corruption when sqlite reports database corruption.

<br />

<br />

| Parameters ||
|---|---|
| `path` | `String`: to database file to open and/or create. This value cannot be `null`. <br /> |
| `factory` | `SQLiteDatabase.CursorFactory`: an optional factory class that is called to instantiate a cursor when query is called, or null for default <br /> |
| `flags` | `int`: to control database access mode. Value is either `0` or a combination of the following: - `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READWRITE` - `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#OPEN_READONLY` - `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#CREATE_IF_NECESSARY` - `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#NO_LOCALIZED_COLLATORS` - `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#ENABLE_WRITE_AHEAD_LOGGING` |
| `errorHandler` | `DatabaseErrorHandler`: the `https://developer.android.com/reference/android/database/DatabaseErrorHandler` obj to be used to handle corruption when sqlite reports database corruption. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | the newly opened database <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteException` | if the database cannot be opened |

### openOrCreateDatabase

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static SQLiteDatabase openOrCreateDatabase (File file, 
                SQLiteDatabase.CursorFactory factory)
```

Equivalent to openDatabase(file.getPath(), factory, CREATE_IF_NECESSARY).

<br />

| Parameters ||
|---|---|
| `file` | `File`: This value cannot be `null`. <br /> |
| `factory` | `SQLiteDatabase.CursorFactory`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | <br /> |

### openOrCreateDatabase

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static SQLiteDatabase openOrCreateDatabase (String path, 
                SQLiteDatabase.CursorFactory factory, 
                DatabaseErrorHandler errorHandler)
```

Equivalent to openDatabase(path, factory, CREATE_IF_NECESSARY, errorHandler).

<br />

| Parameters ||
|---|---|
| `path` | `String`: This value cannot be `null`. <br /> |
| `factory` | `SQLiteDatabase.CursorFactory`: This value may be `null`. <br /> |
| `errorHandler` | `DatabaseErrorHandler`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | <br /> |

### openOrCreateDatabase

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static SQLiteDatabase openOrCreateDatabase (String path, 
                SQLiteDatabase.CursorFactory factory)
```

Equivalent to openDatabase(path, factory, CREATE_IF_NECESSARY).

<br />

| Parameters ||
|---|---|
| `path` | `String`: This value cannot be `null`. <br /> |
| `factory` | `SQLiteDatabase.CursorFactory`: This value may be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase` | <br /> |

### query

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Cursor query (boolean distinct, 
                String table, 
                String[] columns, 
                String selection, 
                String[] selectionArgs, 
                String groupBy, 
                String having, 
                String orderBy, 
                String limit)
```

Query the given URL, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set.

<br />

| Parameters ||
|---|---|
| `distinct` | `boolean`: true if you want each row to be unique, false otherwise. <br /> |
| `table` | `String`: The table name to compile the query against. This value cannot be `null`. <br /> |
| `columns` | `String`: A list of which columns to return. Passing null will return all columns, which is discouraged to prevent reading data from storage that isn't going to be used. <br /> |
| `selection` | `String`: A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given table. <br /> |
| `selectionArgs` | `String`: You may include ?s in selection, which will be replaced by the values from selectionArgs, in the order that they appear in the selection. The values will be bound as Strings. If selection is null or does not contain ?s then selectionArgs may be null. <br /> |
| `groupBy` | `String`: A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself). Passing null will cause the rows to not be grouped. <br /> |
| `having` | `String`: A filter declare which row groups to include in the cursor, if row grouping is being used, formatted as an SQL HAVING clause (excluding the HAVING itself). Passing null will cause all row groups to be included, and is required when row grouping is not being used. <br /> |
| `orderBy` | `String`: How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered. <br /> |
| `limit` | `String`: Limits the number of rows returned by the query, formatted as LIMIT clause. Passing null denotes no LIMIT clause. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | A `https://developer.android.com/reference/android/database/Cursor` object, which is positioned before the first entry. Note that `https://developer.android.com/reference/android/database/Cursor`s are not synchronized, see the documentation for more details. This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/database/Cursor`

### query

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Cursor query (String table, 
                String[] columns, 
                String selection, 
                String[] selectionArgs, 
                String groupBy, 
                String having, 
                String orderBy, 
                String limit)
```

Query the given table, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set.

<br />

| Parameters ||
|---|---|
| `table` | `String`: The table name to compile the query against. This value cannot be `null`. <br /> |
| `columns` | `String`: A list of which columns to return. Passing null will return all columns, which is discouraged to prevent reading data from storage that isn't going to be used. <br /> |
| `selection` | `String`: A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given table. <br /> |
| `selectionArgs` | `String`: You may include ?s in selection, which will be replaced by the values from selectionArgs, in the order that they appear in the selection. The values will be bound as Strings. If selection is null or does not contain ?s then selectionArgs may be null. <br /> |
| `groupBy` | `String`: A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself). Passing null will cause the rows to not be grouped. <br /> |
| `having` | `String`: A filter declare which row groups to include in the cursor, if row grouping is being used, formatted as an SQL HAVING clause (excluding the HAVING itself). Passing null will cause all row groups to be included, and is required when row grouping is not being used. <br /> |
| `orderBy` | `String`: How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered. <br /> |
| `limit` | `String`: Limits the number of rows returned by the query, formatted as LIMIT clause. Passing null denotes no LIMIT clause. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | A `https://developer.android.com/reference/android/database/Cursor` object, which is positioned before the first entry. Note that `https://developer.android.com/reference/android/database/Cursor`s are not synchronized, see the documentation for more details. This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/database/Cursor`

### query

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Cursor query (boolean distinct, 
                String table, 
                String[] columns, 
                String selection, 
                String[] selectionArgs, 
                String groupBy, 
                String having, 
                String orderBy, 
                String limit, 
                CancellationSignal cancellationSignal)
```

Query the given URL, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set.

<br />

| Parameters ||
|---|---|
| `distinct` | `boolean`: true if you want each row to be unique, false otherwise. <br /> |
| `table` | `String`: The table name to compile the query against. This value cannot be `null`. <br /> |
| `columns` | `String`: A list of which columns to return. Passing null will return all columns, which is discouraged to prevent reading data from storage that isn't going to be used. <br /> |
| `selection` | `String`: A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given table. <br /> |
| `selectionArgs` | `String`: You may include ?s in selection, which will be replaced by the values from selectionArgs, in the order that they appear in the selection. The values will be bound as Strings. If selection is null or does not contain ?s then selectionArgs may be null. <br /> |
| `groupBy` | `String`: A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself). Passing null will cause the rows to not be grouped. <br /> |
| `having` | `String`: A filter declare which row groups to include in the cursor, if row grouping is being used, formatted as an SQL HAVING clause (excluding the HAVING itself). Passing null will cause all row groups to be included, and is required when row grouping is not being used. <br /> |
| `orderBy` | `String`: How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered. <br /> |
| `limit` | `String`: Limits the number of rows returned by the query, formatted as LIMIT clause. Passing null denotes no LIMIT clause. <br /> |
| `cancellationSignal` | `CancellationSignal`: A signal to cancel the operation in progress, or null if none. If the operation is canceled, then `https://developer.android.com/reference/android/os/OperationCanceledException` will be thrown when the query is executed. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | A `https://developer.android.com/reference/android/database/Cursor` object, which is positioned before the first entry. Note that `https://developer.android.com/reference/android/database/Cursor`s are not synchronized, see the documentation for more details. This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/database/Cursor`

### query

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Cursor query (String table, 
                String[] columns, 
                String selection, 
                String[] selectionArgs, 
                String groupBy, 
                String having, 
                String orderBy)
```

Query the given table, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set.

<br />

| Parameters ||
|---|---|
| `table` | `String`: The table name to compile the query against. This value cannot be `null`. <br /> |
| `columns` | `String`: A list of which columns to return. Passing null will return all columns, which is discouraged to prevent reading data from storage that isn't going to be used. <br /> |
| `selection` | `String`: A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given table. <br /> |
| `selectionArgs` | `String`: You may include ?s in selection, which will be replaced by the values from selectionArgs, in the order that they appear in the selection. The values will be bound as Strings. If selection is null or does not contain ?s then selectionArgs may be null. <br /> |
| `groupBy` | `String`: A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself). Passing null will cause the rows to not be grouped. <br /> |
| `having` | `String`: A filter declare which row groups to include in the cursor, if row grouping is being used, formatted as an SQL HAVING clause (excluding the HAVING itself). Passing null will cause all row groups to be included, and is required when row grouping is not being used. <br /> |
| `orderBy` | `String`: How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | A `https://developer.android.com/reference/android/database/Cursor` object, which is positioned before the first entry. Note that `https://developer.android.com/reference/android/database/Cursor`s are not synchronized, see the documentation for more details. This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/database/Cursor`

### queryWithFactory

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Cursor queryWithFactory (SQLiteDatabase.CursorFactory cursorFactory, 
                boolean distinct, 
                String table, 
                String[] columns, 
                String selection, 
                String[] selectionArgs, 
                String groupBy, 
                String having, 
                String orderBy, 
                String limit, 
                CancellationSignal cancellationSignal)
```

Query the given URL, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set.

<br />

| Parameters ||
|---|---|
| `cursorFactory` | `SQLiteDatabase.CursorFactory`: the cursor factory to use, or null for the default factory <br /> |
| `distinct` | `boolean`: true if you want each row to be unique, false otherwise. <br /> |
| `table` | `String`: The table name to compile the query against. This value cannot be `null`. <br /> |
| `columns` | `String`: A list of which columns to return. Passing null will return all columns, which is discouraged to prevent reading data from storage that isn't going to be used. <br /> |
| `selection` | `String`: A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given table. <br /> |
| `selectionArgs` | `String`: You may include ?s in selection, which will be replaced by the values from selectionArgs, in the order that they appear in the selection. The values will be bound as Strings. If selection is null or does not contain ?s then selectionArgs may be null. <br /> |
| `groupBy` | `String`: A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself). Passing null will cause the rows to not be grouped. <br /> |
| `having` | `String`: A filter declare which row groups to include in the cursor, if row grouping is being used, formatted as an SQL HAVING clause (excluding the HAVING itself). Passing null will cause all row groups to be included, and is required when row grouping is not being used. <br /> |
| `orderBy` | `String`: How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered. <br /> |
| `limit` | `String`: Limits the number of rows returned by the query, formatted as LIMIT clause. Passing null denotes no LIMIT clause. <br /> |
| `cancellationSignal` | `CancellationSignal`: A signal to cancel the operation in progress, or null if none. If the operation is canceled, then `https://developer.android.com/reference/android/os/OperationCanceledException` will be thrown when the query is executed. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | A `https://developer.android.com/reference/android/database/Cursor` object, which is positioned before the first entry. Note that `https://developer.android.com/reference/android/database/Cursor`s are not synchronized, see the documentation for more details. This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/database/Cursor`

### queryWithFactory

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Cursor queryWithFactory (SQLiteDatabase.CursorFactory cursorFactory, 
                boolean distinct, 
                String table, 
                String[] columns, 
                String selection, 
                String[] selectionArgs, 
                String groupBy, 
                String having, 
                String orderBy, 
                String limit)
```

Query the given URL, returning a `https://developer.android.com/reference/android/database/Cursor` over the result set.

<br />

| Parameters ||
|---|---|
| `cursorFactory` | `SQLiteDatabase.CursorFactory`: the cursor factory to use, or null for the default factory <br /> |
| `distinct` | `boolean`: true if you want each row to be unique, false otherwise. <br /> |
| `table` | `String`: The table name to compile the query against. This value cannot be `null`. <br /> |
| `columns` | `String`: A list of which columns to return. Passing null will return all columns, which is discouraged to prevent reading data from storage that isn't going to be used. <br /> |
| `selection` | `String`: A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given table. <br /> |
| `selectionArgs` | `String`: You may include ?s in selection, which will be replaced by the values from selectionArgs, in the order that they appear in the selection. The values will be bound as Strings. If selection is null or does not contain ?s then selectionArgs may be null. <br /> |
| `groupBy` | `String`: A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself). Passing null will cause the rows to not be grouped. <br /> |
| `having` | `String`: A filter declare which row groups to include in the cursor, if row grouping is being used, formatted as an SQL HAVING clause (excluding the HAVING itself). Passing null will cause all row groups to be included, and is required when row grouping is not being used. <br /> |
| `orderBy` | `String`: How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered. <br /> |
| `limit` | `String`: Limits the number of rows returned by the query, formatted as LIMIT clause. Passing null denotes no LIMIT clause. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | A `https://developer.android.com/reference/android/database/Cursor` object, which is positioned before the first entry. Note that `https://developer.android.com/reference/android/database/Cursor`s are not synchronized, see the documentation for more details. This value cannot be `null`. <br /> |

**See also:**

- `https://developer.android.com/reference/android/database/Cursor`

### rawQuery

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Cursor rawQuery (String sql, 
                String[] selectionArgs, 
                CancellationSignal cancellationSignal)
```

Runs the provided SQL and returns a `https://developer.android.com/reference/android/database/Cursor` over the result set.

<br />

| Parameters ||
|---|---|
| `sql` | `String`: the SQL query. The SQL string must not be ; terminated. This value cannot be `null`. <br /> |
| `selectionArgs` | `String`: You may include ?s in where clause in the query, which will be replaced by the values from selectionArgs. The values will be bound as Strings. If selection is null or does not contain ?s then selectionArgs may be null. <br /> |
| `cancellationSignal` | `CancellationSignal`: A signal to cancel the operation in progress, or null if none. If the operation is canceled, then `https://developer.android.com/reference/android/os/OperationCanceledException` will be thrown when the query is executed. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | A `https://developer.android.com/reference/android/database/Cursor` object, which is positioned before the first entry. Note that `https://developer.android.com/reference/android/database/Cursor`s are not synchronized, see the documentation for more details. This value cannot be `null`. <br /> |

### rawQuery

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Cursor rawQuery (String sql, 
                String[] selectionArgs)
```

Runs the provided SQL and returns a `https://developer.android.com/reference/android/database/Cursor` over the result set.

<br />

| Parameters ||
|---|---|
| `sql` | `String`: the SQL query. The SQL string must not be ; terminated. This value cannot be `null`. <br /> |
| `selectionArgs` | `String`: You may include ?s in where clause in the query, which will be replaced by the values from selectionArgs. The values will be bound as Strings. If selection is null or does not contain ?s then selectionArgs may be null. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | A `https://developer.android.com/reference/android/database/Cursor` object, which is positioned before the first entry. Note that `https://developer.android.com/reference/android/database/Cursor`s are not synchronized, see the documentation for more details. This value cannot be `null`. <br /> |

### rawQueryWithFactory

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Cursor rawQueryWithFactory (SQLiteDatabase.CursorFactory cursorFactory, 
                String sql, 
                String[] selectionArgs, 
                String editTable, 
                CancellationSignal cancellationSignal)
```

Runs the provided SQL and returns a cursor over the result set.

<br />

| Parameters ||
|---|---|
| `cursorFactory` | `SQLiteDatabase.CursorFactory`: the cursor factory to use, or null for the default factory <br /> |
| `sql` | `String`: the SQL query. The SQL string must not be ; terminated. This value cannot be `null`. <br /> |
| `selectionArgs` | `String`: You may include ?s in where clause in the query, which will be replaced by the values from selectionArgs. The values will be bound as Strings. If selection is null or does not contain ?s then selectionArgs may be null. <br /> |
| `editTable` | `String`: the name of the first table, which is editable. This value cannot be `null`. <br /> |
| `cancellationSignal` | `CancellationSignal`: A signal to cancel the operation in progress, or null if none. If the operation is canceled, then `https://developer.android.com/reference/android/os/OperationCanceledException` will be thrown when the query is executed. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | A `https://developer.android.com/reference/android/database/Cursor` object, which is positioned before the first entry. Note that `https://developer.android.com/reference/android/database/Cursor`s are not synchronized, see the documentation for more details. This value cannot be `null`. <br /> |

### rawQueryWithFactory

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Cursor rawQueryWithFactory (SQLiteDatabase.CursorFactory cursorFactory, 
                String sql, 
                String[] selectionArgs, 
                String editTable)
```

Runs the provided SQL and returns a cursor over the result set.

<br />

| Parameters ||
|---|---|
| `cursorFactory` | `SQLiteDatabase.CursorFactory`: the cursor factory to use, or null for the default factory <br /> |
| `sql` | `String`: the SQL query. The SQL string must not be ; terminated. This value cannot be `null`. <br /> |
| `selectionArgs` | `String`: You may include ?s in where clause in the query, which will be replaced by the values from selectionArgs. The values will be bound as Strings. If selection is null or does not contain ?s then selectionArgs may be null. <br /> |
| `editTable` | `String`: the name of the first table, which is editable. This value cannot be `null`. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/android/database/Cursor` | A `https://developer.android.com/reference/android/database/Cursor` object, which is positioned before the first entry. Note that `https://developer.android.com/reference/android/database/Cursor`s are not synchronized, see the documentation for more details. This value cannot be `null`. <br /> |

### releaseMemory

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static int releaseMemory ()
```

Attempts to release memory that SQLite holds but does not require to
operate properly. Typically this memory will come from the page cache.

<br />

| Returns ||
|---|---|
| `int` | the number of bytes actually released <br /> |

### replace

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long replace (String table, 
                String nullColumnHack, 
                ContentValues initialValues)
```

Convenience method for replacing a row in the database.
Inserts a new row if a row does not already exist.

<br />

| Parameters ||
|---|---|
| `table` | `String`: the table in which to replace the row. This value cannot be `null`. <br /> |
| `nullColumnHack` | `String`: optional; may be `null`. SQL doesn't allow inserting a completely empty row without naming at least one column name. If your provided `initialValues` is empty, no column names are known and an empty row can't be inserted. If not set to null, the `nullColumnHack` parameter provides the name of nullable column name to explicitly insert a NULL into in the case where your `initialValues` is empty. <br /> |
| `initialValues` | `ContentValues`: this map contains the initial column values for the row. The keys should be the column names and the values the column values. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `long` | the row ID of the newly inserted row, or -1 if an error occurred <br /> |

### replaceOrThrow

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long replaceOrThrow (String table, 
                String nullColumnHack, 
                ContentValues initialValues)
```

Convenience method for replacing a row in the database.
Inserts a new row if a row does not already exist.

<br />

| Parameters ||
|---|---|
| `table` | `String`: the table in which to replace the row. This value cannot be `null`. <br /> |
| `nullColumnHack` | `String`: optional; may be `null`. SQL doesn't allow inserting a completely empty row without naming at least one column name. If your provided `initialValues` is empty, no column names are known and an empty row can't be inserted. If not set to null, the `nullColumnHack` parameter provides the name of nullable column name to explicitly insert a NULL into in the case where your `initialValues` is empty. <br /> |
| `initialValues` | `ContentValues`: this map contains the initial column values for the row. The keys should be the column names and the values the column values. This value may be `null`. <br /> |

| Returns ||
|---|---|
| `long` | the row ID of the newly inserted row, or -1 if an error occurred <br /> |

| Throws ||
|---|---|
|   | android.database.SQLException |
| `https://developer.android.com/reference/android/database/SQLException` |   |

### setCustomAggregateFunction

Added in [API level 30](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setCustomAggregateFunction (String functionName, 
                BinaryOperator<String> aggregateFunction)
```

Register a custom aggregate function that can be called from SQL
expressions.


For example, registering a custom aggregation function named
`LONGEST` could be used in a query like
`SELECT LONGEST(name) FROM employees`.


The implementation of this method follows the reduction flow outlined in
`https://developer.android.com/reference/java/util/stream/Stream#reduce(java.util.function.BinaryOperator<T>)`, and the custom
aggregation function is expected to be an associative accumulation
function, as defined by that class.


When attempting to register multiple functions with the same function
name, SQLite will replace any previously defined functions with the
latest definition, regardless of what function type they are. SQLite does
not support unregistering functions.

<br />

| Parameters ||
|---|---|
| `functionName` | `String`: Case-insensitive name to register this function under, limited to 255 UTF-8 bytes in length. This value cannot be `null`. <br /> |
| `aggregateFunction` | `BinaryOperator`: Functional interface that will be invoked when the function name is used by a SQL statement. The argument values from the SQL statement are passed to the functional interface, and the return values from the functional interface are returned back into the SQL statement. This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteException` | if the custom function could not be registered. |

**See also:**

- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setCustomScalarFunction(java.lang.String,%20java.util.function.UnaryOperator<java.lang.String>)`

### setCustomScalarFunction

Added in [API level 30](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setCustomScalarFunction (String functionName, 
                UnaryOperator<String> scalarFunction)
```

Register a custom scalar function that can be called from SQL
expressions.


For example, registering a custom scalar function named `REVERSE`
could be used in a query like
`SELECT REVERSE(name) FROM employees`.


When attempting to register multiple functions with the same function
name, SQLite will replace any previously defined functions with the
latest definition, regardless of what function type they are. SQLite does
not support unregistering functions.

<br />

| Parameters ||
|---|---|
| `functionName` | `String`: Case-insensitive name to register this function under, limited to 255 UTF-8 bytes in length. This value cannot be `null`. <br /> |
| `scalarFunction` | `UnaryOperator`: Functional interface that will be invoked when the function name is used by a SQL statement. The argument values from the SQL statement are passed to the functional interface, and the return values from the functional interface are returned back into the SQL statement. This value cannot be `null`. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteException` | if the custom function could not be registered. |

**See also:**

- `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#setCustomAggregateFunction(java.lang.String,%20java.util.function.BinaryOperator<java.lang.String>)`

### setForeignKeyConstraintsEnabled

Added in [API level 16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setForeignKeyConstraintsEnabled (boolean enable)
```

Sets whether foreign key constraints are enabled for the database.


By default, foreign key constraints are not enforced by the database.
This method allows an application to enable foreign key constraints.
It must be called each time the database is opened to ensure that foreign
key constraints are enabled for the session.


A good time to call this method is right after calling `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#openOrCreateDatabase(java.io.File,%20android.database.sqlite.SQLiteDatabase.CursorFactory)`
or in the `https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper#onConfigure(android.database.sqlite.SQLiteDatabase)` callback.


When foreign key constraints are disabled, the database does not check whether
changes to the database will violate foreign key constraints. Likewise, when
foreign key constraints are disabled, the database will not execute cascade
delete or update triggers. As a result, it is possible for the database
state to become inconsistent. To perform a database integrity check,
call `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#isDatabaseIntegrityOk()`.


This method must not be called while a transaction is in progress.


See also [SQLite Foreign Key Constraints](http://sqlite.org/foreignkeys.html)
for more details about foreign key constraint support.

<br />

<br />

| Parameters ||
|---|---|
| `enable` | `boolean`: True to enable foreign key constraints, false to disable them. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if the are transactions is in progress when this method is called. |

### setLocale

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setLocale (Locale locale)
```

Sets the locale for this database. Does nothing if this database has
the `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#NO_LOCALIZED_COLLATORS` flag set or was opened read only.

<br />

| Parameters ||
|---|---|
| `locale` | `Locale`: The new locale. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/SQLException` | if the locale could not be set. The most common reason for this is that there is no collator available for the locale you requested. In this case the database remains unchanged. |

### setLockingEnabled

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
16](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setLockingEnabled (boolean lockingEnabled)
```


**This method was deprecated
in API level 16.**   

This method now does nothing. Do not use.

Control whether or not the SQLiteDatabase is made thread-safe by using locks
around critical sections. This is pretty expensive, so if you know that your
DB will only be used by a single thread then you should set this to false.
The default is true.

<br />

| Parameters ||
|---|---|
| `lockingEnabled` | `boolean`: set to true to enable locks, false otherwise <br /> |

### setMaxSqlCacheSize

Added in [API level 11](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setMaxSqlCacheSize (int cacheSize)
```

Sets the maximum size of the prepared-statement cache for this database.
(size of the cache = number of compiled-sql-statements stored in the cache).


Maximum cache size can ONLY be increased from its current size (default = 10).
If this method is called with smaller size than the current maximum value,
then IllegalStateException is thrown.


This method is thread-safe.

<br />

| Parameters ||
|---|---|
| `cacheSize` | `int`: the size of the cache. can be (0 to `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#MAX_SQL_CACHE_SIZE`) <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if input cacheSize \> `https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase#MAX_SQL_CACHE_SIZE`. |

### setMaximumSize

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public long setMaximumSize (long numBytes)
```

Sets the maximum size the database will grow to. The maximum size cannot
be set below the current size.

<br />

| Parameters ||
|---|---|
| `numBytes` | `long`: the maximum database size, in bytes <br /> |

| Returns ||
|---|---|
| `long` | the new maximum database size <br /> |

### setPageSize

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setPageSize (long numBytes)
```

Sets the database page size. The page size must be a power of two. This
method does not work if any data has been written to the database file,
and must be called right after the database has been created.

<br />

| Parameters ||
|---|---|
| `numBytes` | `long`: the database page size, in bytes <br /> |

### setTransactionSuccessful

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setTransactionSuccessful ()
```

Marks the current transaction as successful. Do not do any more database work between
calling this and calling endTransaction. Do as little non-database work as possible in that
situation too. If any errors are encountered between this and endTransaction the transaction
will still be committed.

<br />

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException` | if the current thread is not in a transaction or the transaction is already marked as successful. |

### setVersion

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void setVersion (int version)
```

Sets the database version.

<br />

| Parameters ||
|---|---|
| `version` | `int`: the new database version <br /> |

### toString

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public String toString ()
```

Returns a string representation of the object.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | a string representation of the object. <br /> |

### update

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int update (String table, 
                ContentValues values, 
                String whereClause, 
                String[] whereArgs)
```

Convenience method for updating rows in the database.

<br />

| Parameters ||
|---|---|
| `table` | `String`: the table to update in. This value cannot be `null`. <br /> |
| `values` | `ContentValues`: a map from column names to new column values. null is a valid value that will be translated to NULL. <br /> |
| `whereClause` | `String`: the optional WHERE clause to apply when updating. Passing null will update all rows. <br /> |
| `whereArgs` | `String`: You may include ?s in the where clause, which will be replaced by the values from whereArgs. The values will be bound as Strings. If whereClause is null or does not contain ?s then whereArgs may be null. <br /> |

| Returns ||
|---|---|
| `int` | the number of rows affected <br /> |

### updateWithOnConflict

Added in [API level 8](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int updateWithOnConflict (String table, 
                ContentValues values, 
                String whereClause, 
                String[] whereArgs, 
                int conflictAlgorithm)
```

Convenience method for updating rows in the database.

<br />

| Parameters ||
|---|---|
| `table` | `String`: the table to update in. This value cannot be `null`. <br /> |
| `values` | `ContentValues`: a map from column names to new column values. null is a valid value that will be translated to NULL. <br /> |
| `whereClause` | `String`: the optional WHERE clause to apply when updating. Passing null will update all rows. <br /> |
| `whereArgs` | `String`: You may include ?s in the where clause, which will be replaced by the values from whereArgs. The values will be bound as Strings. If whereClause is null or does not contain ?s then whereArgs may be null. <br /> |
| `conflictAlgorithm` | `int`: for update conflict resolver <br /> |

| Returns ||
|---|---|
| `int` | the number of rows affected <br /> |

### validateSql

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void validateSql (String sql, 
                CancellationSignal cancellationSignal)
```

Verifies that a SQL SELECT statement is valid by compiling it.
If the SQL statement is not valid, this method will throw a `https://developer.android.com/reference/android/database/sqlite/SQLiteException`.

<br />

| Parameters ||
|---|---|
| `sql` | `String`: SQL to be validated. This value cannot be `null`. <br /> |
| `cancellationSignal` | `CancellationSignal`: A signal to cancel the operation in progress, or null if none. If the operation is canceled, then `https://developer.android.com/reference/android/os/OperationCanceledException` will be thrown when the query is executed. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/android/database/sqlite/SQLiteException` | if `sql` is invalid |

### yieldIfContended

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)   
Deprecated in [API level
15](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean yieldIfContended ()
```


**This method was deprecated
in API level 15.**   

if the db is locked more than once (because of nested transactions) then the lock
will not be yielded. Use yieldIfContendedSafely instead.

Temporarily end the transaction to let other threads run. The transaction is assumed to be
successful so far. Do not call setTransactionSuccessful before calling this. When this
returns a new transaction will have been created but not marked as successful.

<br />

| Returns ||
|---|---|
| `boolean` | true if the transaction was yielded <br /> |

### yieldIfContendedSafely

Added in [API level 3](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean yieldIfContendedSafely ()
```

Temporarily end the transaction to let other threads run. The transaction is assumed to be
successful so far. Do not call setTransactionSuccessful before calling this. When this
returns a new transaction will have been created but not marked as successful. This assumes
that there are no nested transactions (beginTransaction has only been called once) and will
throw an exception if that is not the case.

<br />

| Returns ||
|---|---|
| `boolean` | true if the transaction was yielded <br /> |

### yieldIfContendedSafely

Added in [API level 5](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean yieldIfContendedSafely (long sleepAfterYieldDelay)
```

Temporarily end the transaction to let other threads run. The transaction is assumed to be
successful so far. Do not call setTransactionSuccessful before calling this. When this
returns a new transaction will have been created but not marked as successful. This assumes
that there are no nested transactions (beginTransaction has only been called once) and will
throw an exception if that is not the case.

<br />

| Parameters ||
|---|---|
| `sleepAfterYieldDelay` | `long`: if \> 0, sleep this long before starting a new transaction if the lock was actually yielded. This will allow other background threads to make some more progress than they would if we started the transaction immediately. <br /> |

| Returns ||
|---|---|
| `boolean` | true if the transaction was yielded <br /> |

## Protected methods

### onAllReferencesReleased

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected void onAllReferencesReleased ()
```

Called when the last reference to the object was released by
a call to `https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#releaseReference()` or `https://developer.android.com/reference/android/database/sqlite/SQLiteClosable#close()`.

<br />