public final class SQLiteConnection extends java.lang.Object implements CancellationSignal.OnCancelListener
sqlite3 object.
When database connection pooling is enabled, there can be multiple active connections to the same database. Otherwise there is typically only one connection per database.
When the SQLite WAL feature is enabled, multiple readers and one writer can concurrently access the database. Without WAL, readers and writers are mutually exclusive.
Connection objects are not thread-safe. They are acquired as needed to
perform a database operation and are then returned to the pool. At any
given time, a connection is either owned and used by a SQLiteSession
object or the SQLiteConnectionPool. Those classes are
responsible for serializing operations to guard against concurrent
use of a connection.
The guarantee of having a single owner allows this class to be implemented without locks and greatly simplifies resource management.
The connection object object owns *all* of the SQLite related native objects that are associated with the connection. What's more, there are no other objects in the system that are capable of obtaining handles to those native objects. Consequently, when the connection is closed, we do not have to worry about what other components might have references to its associated SQLite state -- there are none.
Encapsulation is what ensures that the connection object's lifecycle does not become a tortured mess of finalizers and reference queues.
This class must tolerate reentrant execution of SQLite operations because triggers may call custom SQLite functions that perform additional queries.
| Modifier and Type | Class and Description |
|---|---|
protected static class |
SQLiteConnection.PreparedStatement
Holder type for a prepared statement.
|
| Modifier and Type | Method and Description |
|---|---|
void |
dump(Printer printer,
boolean verbose)
Dumps debugging information about this connection.
|
void |
execute(java.lang.String sql,
java.lang.Object[] bindArgs,
CancellationSignal cancellationSignal)
Executes a statement that does not return a result.
|
int |
executeForChangedRowCount(java.lang.String sql,
java.lang.Object[] bindArgs,
CancellationSignal cancellationSignal)
Executes a statement that returns a count of the number of rows
that were changed.
|
long |
executeForLastInsertedRowId(java.lang.String sql,
java.lang.Object[] bindArgs,
CancellationSignal cancellationSignal)
Executes a statement that returns the row id of the last row inserted
by the statement.
|
long |
executeForLong(java.lang.String sql,
java.lang.Object[] bindArgs,
CancellationSignal cancellationSignal)
Executes a statement that returns a single
long result. |
java.lang.String |
executeForString(java.lang.String sql,
java.lang.Object[] bindArgs,
CancellationSignal cancellationSignal)
Executes a statement that returns a single
String result. |
SQLiteConnection.PreparedStatement |
executePrepareStatementNoRelease(java.lang.String sql,
java.lang.Object[] bindArgs) |
void |
executeReleasePrepareStatement(SQLiteConnection.PreparedStatement statement) |
protected void |
finalize() |
long |
getConnectionHandle()
Gets SQLite native connection handler.
|
int |
getConnectionId()
Gets the unique id of this connection.
|
java.util.Locale |
getLocale()
Get current locale of the connection
|
boolean |
isPrimaryConnection()
Returns true if this is the primary database connection.
|
void |
onCancel()
Called when
CancellationSignal.cancel() is invoked. |
void |
prepare(java.lang.String sql,
SQLiteStatementInfo outStatementInfo)
Prepares a statement for execution but does not bind its parameters or execute it.
|
java.lang.String |
toString() |
protected void finalize()
throws java.lang.Throwable
finalize in class java.lang.Objectjava.lang.Throwablepublic int getConnectionId()
public boolean isPrimaryConnection()
public long getConnectionHandle()
public java.util.Locale getLocale()
public void prepare(java.lang.String sql,
SQLiteStatementInfo outStatementInfo)
This method can be used to check for syntax errors during compilation
prior to execution of the statement. If the outStatementInfo argument
is not null, the provided SQLiteStatementInfo object is populated
with information about the statement.
A prepared statement makes no reference to the arguments that may eventually be bound to it, consequently it it possible to cache certain prepared statements such as SELECT or INSERT/UPDATE statements. If the statement is cacheable, then it will be stored in the cache for later.
To take advantage of this behavior as an optimization, the connection pool provides a method to acquire a connection that already has a given SQL statement in its prepared statement cache so that it is ready for execution.
sql - The SQL statement to prepare.outStatementInfo - The SQLiteStatementInfo object to populate
with information about the statement, or null if none.SQLiteException - if an error occurs, such as a syntax error.public void execute(java.lang.String sql,
java.lang.Object[] bindArgs,
CancellationSignal cancellationSignal)
sql - The SQL statement to execute.bindArgs - The arguments to bind, or null if none.cancellationSignal - A signal to cancel the operation in progress, or null if none.SQLiteException - if an error occurs, such as a syntax error
or invalid number of bind arguments.OperationCanceledException - if the operation was canceled.public long executeForLong(java.lang.String sql,
java.lang.Object[] bindArgs,
CancellationSignal cancellationSignal)
long result.sql - The SQL statement to execute.bindArgs - The arguments to bind, or null if none.cancellationSignal - A signal to cancel the operation in progress, or null if none.long, or zero if none.SQLiteException - if an error occurs, such as a syntax error
or invalid number of bind arguments.OperationCanceledException - if the operation was canceled.public java.lang.String executeForString(java.lang.String sql,
java.lang.Object[] bindArgs,
CancellationSignal cancellationSignal)
String result.sql - The SQL statement to execute.bindArgs - The arguments to bind, or null if none.cancellationSignal - A signal to cancel the operation in progress, or null if none.String, or null if none.SQLiteException - if an error occurs, such as a syntax error
or invalid number of bind arguments.OperationCanceledException - if the operation was canceled.public int executeForChangedRowCount(java.lang.String sql,
java.lang.Object[] bindArgs,
CancellationSignal cancellationSignal)
sql - The SQL statement to execute.bindArgs - The arguments to bind, or null if none.cancellationSignal - A signal to cancel the operation in progress, or null if none.SQLiteException - if an error occurs, such as a syntax error
or invalid number of bind arguments.OperationCanceledException - if the operation was canceled.public long executeForLastInsertedRowId(java.lang.String sql,
java.lang.Object[] bindArgs,
CancellationSignal cancellationSignal)
sql - The SQL statement to execute.bindArgs - The arguments to bind, or null if none.cancellationSignal - A signal to cancel the operation in progress, or null if none.SQLiteException - if an error occurs, such as a syntax error
or invalid number of bind arguments.OperationCanceledException - if the operation was canceled.public SQLiteConnection.PreparedStatement executePrepareStatementNoRelease(java.lang.String sql, java.lang.Object[] bindArgs)
public void executeReleasePrepareStatement(SQLiteConnection.PreparedStatement statement)
public void onCancel()
CancellationSignal.OnCancelListenerCancellationSignal.cancel() is invoked.onCancel in interface CancellationSignal.OnCancelListenerpublic void dump(Printer printer, boolean verbose)
printer - The printer to receive the dump, not null.verbose - True to dump more verbose information.public java.lang.String toString()
toString in class java.lang.Object