[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 メーリングリストの案内