# transaction

fun <T> transaction(db: Database? = null, transactionIsolation: Int? = db?.transactionManager?.defaultIsolationLevel, readOnly: Boolean? = db?.transactionManager?.defaultReadOnly, statement: JdbcTransaction.() -> T): T

Creates a transaction with the specified transactionIsolation and readOnly settings, then calls the statement block with this transaction as its receiver and returns the result.

Note If the database value db is not set, the value used will be either the last Database instance created or the value associated with the parent transaction (if this function is invoked in an existing transaction).

Note This function catches all throwables (including errors) to ensure proper transaction rollback and resource cleanup, even in exceptional circumstances.

#### Return

The final result of the statement block.

#### Parameters

db

Database to use for the transaction. Defaults to `null`.

transactionIsolation

Transaction isolation level. Defaults to `db.transactionManager.defaultIsolationLevel`.

readOnly

Whether the transaction should be read-only. Defaults to `db.transactionManager.defaultReadOnly`.

#### Throws

IllegalStateException

If no database is available

SQLException

If a database error occurs and retry attempts are exhausted

Throwable

If any other error occurs during execution

#### Samples

org.jetbrains.exposed.v1.tests.shared.ConnectionTimeoutTest.testTransactionRepetitionWithDefaults