前置き
DB操作の方は、他の方が綺麗にまとめてくれていたり公式ドキュメントに書いてあるので割愛します。
ここではあくまでOracleDBに接続する手順だけ
接続記述
oracleのドライバを使えるようにする
build.gradle
// バージョンはよしなに
compile "com.oracle.ojdbc:ojdbc8:19.3.0.0"
サービスコードに組み込む
// サービス名で接続する
Database.connect(
"jdbc:oracle:thin:@(IP):(PORT)/(サービス名)",
"oracle.jdbc.OracleDriver",
"(OracleDBユーザ名)",
"(OracleDBパスワード)"
)
// SIDで接続する
Database.connect(
"jdbc:oracle:thin:@(IP):(PORT):(SID)",
"oracle.jdbc.OracleDriver",
"(OracleDBユーザ名)",
"(OracleDBパスワード)"
)
transaction {
// 処理
}
これで接続自体はできるのですが、これだけだと以下のエラーがでてきてしまいます
// 日本語
WARN Exposed - Transaction attempt #0 failed: READ_COMMITTEDおよびSERIALIZABLEのみが有効なトランザクション・レベルです。.
// 英語
WARN Exposed - Transaction attempt #0 failed: READ_COMMITTED and SERIALIZABLE are the only valid transaction levels
トランザクションレベルが合っていないとのエラー。
そもそもOracleDBのトランザクションレベルはMySQLなどと違って READ_COMMITTED と SERIALIZABLE の2つしか存在しないです。
じゃあなんで出てるんだ?というところですが、Exposed側で指定する必要があります。
記述場所は Database.connect の直下でOKです。
// TRANSACTION_SERIALIZABLE を使う場合
TransactionManager.manager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE
// TRANSACTION_READ_COMMITTED を使う場合
TransactionManager.manager.defaultIsolationLevel = Connection.READ_COMMITTED
基本的にデフォルトで設定されている READ_COMMITTED でいいと思います。(理解した上で選択しましょう)
これで接続ができればOKです。
公式のヘルプにちゃんと書いてありましたね。