質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

2616閲覧

domaでDB接続したい

remon12023

総合スコア0

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2022/01/02 22:20

編集2022/01/02 22:22

前提・実現したいこと

参考ソースはH2に接続していたので、postgresql用に変えたのですが接続できず、、
A5M2ソフトでpostgresqlに接続できたので、ソースの問題だと思っています。
エラーで検索しても解決できておらず。分かる方、教えて頂きたいです。

エラー

Exception in thread "main" org.seasar.doma.jdbc.JdbcException: [DOMA2056] トランザクション分離レベルの取得に失敗しました。原因は次のものです。org.postgresql.util.PSQLException: ResultSetは閉じられました。 at org.seasar.doma.jdbc.tx.LocalTransaction.beginInternal(LocalTransaction.java:211) at org.seasar.doma.jdbc.tx.LocalTransaction.begin(LocalTransaction.java:160) at Tester.main(Tester.java:12) Caused by: org.postgresql.util.PSQLException: ResultSetは閉じられました。 at org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkClosed(AbstractJdbc2ResultSet.java:2662) at org.postgresql.jdbc2.AbstractJdbc2ResultSet.setFetchSize(AbstractJdbc2ResultSet.java:1779) at org.postgresql.jdbc4.Jdbc4Statement.createResultSet(Jdbc4Statement.java:37) at org.postgresql.jdbc2.AbstractJdbc2Statement$StatementResultHandler.handleResultRows(AbstractJdbc2Statement.java:209) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1771) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:372) at org.postgresql.jdbc2.AbstractJdbc2Connection.execSQLUpdate(AbstractJdbc2Connection.java:261) at org.postgresql.jdbc2.AbstractJdbc2Connection.getTransactionIsolation(AbstractJdbc2Connection.java:773) at org.seasar.doma.jdbc.tx.LocalTransactionalConnection.getTransactionIsolation(LocalTransactionalConnection.java:174) at org.seasar.doma.jdbc.tx.LocalTransaction.beginInternal(LocalTransaction.java:207) ... 2 more

Main.java

Tester.java

1import org.seasar.doma.jdbc.tx.LocalTransaction; 2 3import tutorial.AppConfig; 4import tutorial.dao.ServiceDao; 5import tutorial.dao.ServiceDaoImpl; 6import tutorial.entity.Service; 7 8public class Tester { 9 public static void main(String[] args) { 10 LocalTransaction tx = AppConfig.getLocalTransaction(); 11 try { 12 tx.begin(); 13 14 Service service = null; 15 16 ServiceDao serviceDao = new ServiceDaoImpl(); 17 service = serviceDao.selectName(); 18 19 tx.commit(); 20 } finally { 21 tx.rollback(); 22 } 23 } 24}

AppConfig.java

package tutorial; import javax.sql.DataSource; import org.seasar.doma.jdbc.DomaAbstractConfig; import org.seasar.doma.jdbc.SimpleDataSource; import org.seasar.doma.jdbc.dialect.Dialect; import org.seasar.doma.jdbc.dialect.PostgresDialect; import org.seasar.doma.jdbc.tx.KeepAliveLocalTransaction; import org.seasar.doma.jdbc.tx.LocalTransaction; import org.seasar.doma.jdbc.tx.LocalTransactionalDataSource; public class AppConfig extends DomaAbstractConfig { private static final DataSource originalDataSource = createDataSource(); private static final LocalTransactionalDataSource localTxDataSource = createLocalTxDataSource(); private static final Dialect dialect = new PostgresDialect(); @Override public DataSource getDataSource() { return localTxDataSource; } @Override public Dialect getDialect() { return dialect; } protected static DataSource createDataSource() { SimpleDataSource dataSource = new SimpleDataSource(); dataSource.setUrl("jdbc:postgresql://localhost:5432/データベース名"); dataSource.setUser("ユーザー"); dataSource.setPassword("パスワード"); return dataSource; } protected static LocalTransactionalDataSource createLocalTxDataSource() { return new LocalTransactionalDataSource(originalDataSource); } public static LocalTransaction getLocalTransaction() { return localTxDataSource.getLocalTransaction(defaultJdbcLogger); } public static KeepAliveLocalTransaction getKeepAliveLocalTransaction() { return localTxDataSource .getKeepAliveLocalTransaction(defaultJdbcLogger); } public static DataSource getOriginalDataSource() { return originalDataSource; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/01/02 22:42

コードが一部なので何とも。 エラーはDoma特有のものではないですけど。
guest

回答1

0

設定は特に問題ないように見えます。
スタックトレースからPostgreSQLへの接続は成功していることがわかるので、JDBC DriverとPostgreSQLのバージョンの組み合わせが適切かを確認してみても良いかもしれないと思いました。

以下のバージョンを教えてもらってもいいでしょうか?

  • JDBC Driver
  • PostgreSQL
  • Doma

投稿2022/01/03 02:58

nakamura-to

総合スコア103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

remon12023

2022/01/03 13:33

JDBC Driver 9.1 PostgreSQL 12.9 Doma 1.35 になります。
xebme

2022/01/03 16:09

JDBCドライバー9.1のソースコードを読むとサーバーのバージョンが 10を超えるとうまくいきません。理由はバージョン番号の大小判定で、文字列の大小判定をしているから。 JDBCドライバー9.4では、バージョン番号を整数に変換しているのでOK。 これによって動作が変わります。トランザクション・アイソレーションレベルの取得にexecSQLUpdate()ではなくexecSQLQuery()を実行。 SQLは"SHOW TRANSACTION ISOLATION LEVEL"
xebme

2022/01/03 16:17

例外発生の直接の原因は無くなるでしょう。 JDBCのソースコードは、ドライバーの動作をサーバーのバージョン番号によって変えるようになっています。バージョン番号の判定がいたるところに記述されていて汚いです。
nakamura-to

2022/01/04 10:07

xebmeさんが既に回答してくれていますが、やはりJDBC Driver(クライアント)とPostgreSQL(サーバー)のバージョンの組み合わせの問題のようです。提示いただいたバージョンの組み合わせかつDomaなしの素のJDBCで試してみましたが、Connection.getTransactionIsolation()を実行すると同様のエラーが発生しました。最新のJDBCドライバーを試してみてはいかがでしょうか? https://jdbc.postgresql.org/download.html#current
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問