1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Kotlin+Exposed】OracleDBに接続する

Posted at

前置き

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_COMMITTEDSERIALIZABLE の2つしか存在しないです。

https://www.shift-the-oracle.com/acid/isolation-level.html

じゃあなんで出てるんだ?というところですが、Exposed側で指定する必要があります。
記述場所は Database.connect の直下でOKです。

// TRANSACTION_SERIALIZABLE を使う場合
TransactionManager.manager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE

// TRANSACTION_READ_COMMITTED を使う場合
TransactionManager.manager.defaultIsolationLevel = Connection.READ_COMMITTED

基本的にデフォルトで設定されている READ_COMMITTED でいいと思います。(理解した上で選択しましょう)

これで接続ができればOKです。

公式のヘルプにちゃんと書いてありましたね。

(参考) https://github.com/JetBrains/Exposed/wiki/FAQ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?