[pgsql-jp: 29118] Re: setAutoCommit で Warning

T.Suzuki t_suzuki @ kenwood-eng.co.jp
2003年 2月 18日 (火) 20:05:04 JST


鈴木と申します。

上浦さん wrote :
> PostgreSQLを7.2から7.3.2へバージョンアップし、
> build 108のJDBCドライバを使用すると、setAutoCommitでWarningが発生します。

遅いかもしれませんが、
添付されたサンプルを、JSP用に変更して実験してみました。

こちらの 環境
----------------------------------
 PostgreSQL7.3.2
 JDBC:pg73jdbc3.jar (http://jdbc.postgresql.org/)
 JDK:1.4.0_01
 Tomcat 4.0.4
 OS:Vine Linux 2.6
----------------------------------
#JDBCは --with-javaで作成したものでも試しました。

確かに、logにWARNINGが記録されていましたが、
どうも原因は、conn.commit()を行っている場所でした。

コミットする場合は、例えば次のようにコミットする必要があるかチェックして、
トランザクションが進行中以外は、コミットを発行しないようにしては
する必要があると思います。

    if ( st.getUpdateCount() > 0 ) {
        conn.commit();
    }

従って、 setAutoCommitメソッドは問題ではないと思います。
#サンプルだけの問題かもしれませんが参考までに…

以下、実験で使用したJSPのソースです。
----------------------------------------------------
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ page import="java.sql.*" %>
<%
Connection conn = null;
Statement st = null;
ResultSet rs= null;

try {
    conn = DriverManager.getConnection(
    "jdbc:postgresql://localhost/kedb","nobody","");

    conn.setAutoCommit(false);

    st = conn.createStatement();
    rs = st.executeQuery("SELECT version()");

 // *** コミットするデータがあるかチェック ***
    if ( st.getUpdateCount() > 0) {
        conn.commit();
    }
} catch(SQLException e) {
    out.print("Exception 1");
    e.printStackTrace();
    try {
        conn.rollback();
    } catch (SQLException ex) {
        ex.printStackTrace();
    }
} finally {
    try {
        if (rs != null) {
            rs.close();
        }
        if (st != null) {
            st.close();
        }
        if (conn != null) {
            conn.setAutoCommit(true);
            conn.close();
            // 確認の為、ENDを出力
            out.print("END");
        }
    } catch (SQLException e) {
        out.print("Exception 2");
        e.printStackTrace();
    }
}
%>
---以上
 -----------------------------------------
      鈴木 徹 (SUZUKI Toru)
      KENWOOD ENGINEERING CORPORATION
      E-mail:t_suzuki @ kenwood-eng.co.jp
 -----------------------------------------




pgsql-jp メーリングリストの案内