org.postgresql.util.PSQLException: この ResultSet はクローズされています。
at org.postgresql.jdbc.PgResultSet.checkClosed(PgResultSet.java:2741)
at org.postgresql.jdbc.PgResultSet.findColumn(PgResultSet.java:2588)
at org.postgresql.jdbc.PgResultSet.updateBigDecimal(PgResultSet.java:1467)
秘匿
頂いたリンクは残念ながら「Entry is not found」でした。
使い終わったらnullを代入するため、null許容型にしています。
Kotlinのガベージコレクションがよくわからず、これが正しいのかわかりません。
また、1つのSQL文ごとに各関数でDBの接続・切断を行っていたのですが、全体の処理時間の99%以上がDBの接続だったため、グローバル変数にして使いまわしたところ、処理時間は圧倒的に改善したのですが、!!演算子がないとコンパイルが通らなくなってしましました。
DBは占有可能な仕様のためOKとしましたが、この対応で良いのか、私自身、疑問に思っていました。
この場合、普通はどうするのが正解なのでしょうか。
ソースありがとうございます。
書き方は異なりますが、アドバイス通りResultSetの定数を渡しつつcreateStatementしてexecuteQueryしてupdate~するのは一緒なんですね。。。
use使ってないことなどに原因があるのかと思い、ソースを試してみたところ、コンパイルエラーが出て、
import java.sql.Connection;
import java.sql.Statement;
を追記して型を明示したところ、.useの全行で下記のコンパイルエラーとなりました。
============
UpdTest.kt:11:113: error: unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
@InlineOnly public inline fun <T : Closeable?, R> ???.use(block: (???) -> ???): ??? defined in kotlin.io
DriverManager.getConnection(秘匿).use { conn: Connection ->
============
useを使用するにはどうしたら良いでしょうか。
1Statement stmt = con.createStatement(2ResultSet.TYPE_SCROLL_INSENSITIVE,3ResultSet.CONCUR_UPDATABLE);4ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");5// rs will be scrollable, will not show changes made by others,6// and will be updatable