0

jboss5.1システムのアーキテクチャとしてSpringを使用しています。のバージョンmysql5.6.12で、 のバージョンはjdkです1.7。シナリオ : 直前にシステムが DB に挿入したレコードを更新する必要があるため、レコードの
挿入を実行中にレコードの ID を取得しようとします。

GeneratedKeyHolder(class in spring) を使用して auto id を取得しました。ソースは次のとおりです。

    KeyHolder keyHolder = new GeneratedKeyHolder();
    jdbcTemplate.update(new PreparedStatementCreator()
    {
        public PreparedStatement createPreparedStatement(Connection con) throws SQLException
        {
            PreparedStatement ps = con.prepareStatement(sql, new String[] { "id" });
            ps.setString(1, record.getCmdName());

            ps.setTimestamp(6, new Timestamp(System.currentTimeMillis()));                

            return ps;
        }
    }, keyHolder);        
    return keyHolder.getKey().intValue();

ほとんどの環境では、コードはうまく機能しますが、ある環境では以下のように例外がスローされます。これは非常に驚くべきことであり、テスト環境で例外を再現できませんでした。

INFO   | jvm 1    | 2013/09/24 11:03:47 | org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; Connection is not associated with a managed connection.org.jboss.resource.adapter.jdbc.jdk5.WrappedConnectionJDK5@42d0cb88; nested exception is java.sql.SQLException: Connection is not associated with a managed connection.org.jboss.resource.adapter.jdbc.jdk5.WrappedConnectionJDK5@42d0cb88
INFO   | jvm 1    | 2013/09/24 11:03:47 | Caused by: 
INFO   | jvm 1    | 2013/09/24 11:03:47 | java.sql.SQLException: Connection is not associated with a managed connection.org.jboss.resource.adapter.jdbc.jdk5.WrappedConnectionJDK5@42d0cb88
INFO   | jvm 1    | 2013/09/24 11:03:47 |       at org.jboss.resource.adapter.jdbc.WrappedConnection.lock(WrappedConnection.java:81)
INFO   | jvm 1    | 2013/09/24 11:03:47 |       at org.jboss.resource.adapter.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:345)
INFO   | jvm 1    | 2013/09/24 11:03:47 |       at RecordDao$1.createPreparedStatement(RecordDao.java:60)
INFO   | jvm 1    | 2013/09/24 11:03:47 |       at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:532)
INFO   | jvm 1    | 2013/09/24 11:03:47 |       at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:771)
INFO   | jvm 1    | 2013/09/24 11:03:47 |       at RecordDao.insertGongdan(RecordDao.java:56)
INFO   | jvm 1    | 2013/09/24 11:03:47 |      
INFO   | jvm 1    | 2013/09/24 11:03:47 |       at java.lang.Thread.run(Thread.java:722)
INFO   | jvm 1    | 2013/09/24 11:03:47 | 11:03:47,543 INFO  [TL1ServerSession] TL1ServerSession send!
INFO   | jvm 1    | 2013/09/24 11:03:47 | 11:03:47,543 INFO  [TL1ServerSession] Send TL1 Message: 
INFO   | jvm 1    | 2013/09/24 11:03:47 | 
4

4 に答える 4

1

「conn」オブジェクトが初期化されていないように見えるため、ステートメントを実行するための有効な接続がありません。

于 2015-02-19T14:14:41.983 に答える
1

次のエラー メッセージが表示されます。

Connection is not associated with a managed connection.org.jboss.resource.adapter.jdbc.jdk5.WrappedConnectionJDK5

そしてあなたは使用しjdk 1.7ました。しかし、この問題は発生しませんでした。

私はこの問題をネットで調べ始め、このトピックを見つけました。WhatDoesTheMessageDoYourOwnHousekeepingMeanは、接続を閉じることがあなたにとって何を意味するかを説明します。

トランザクションのタイムアウトを調整する必要があると思います。@Ellie Fabrero :一部のクエリは時間がかかる場合があるため、タイムアウトに達し、休止状態が例外をスローします。

于 2013-10-15T07:38:58.277 に答える
0

このエラーが発生しましたが、有効な接続オブジェクトがないときにクエリを実行することに関係しているようです。私の場合、リストをループしてリストの各要素で挿入を呼び出していましたが、2 番目の要素が呼び出される前に接続をクリーンアップするようにメソッドが記述されていたため、エラーが発生しました。

他のケースは、接続オブジェクトがまったく初期化されていない上記のようなものだと思います。

于 2015-04-20T14:38:43.113 に答える