[pgpool-general-jp: 1195] Re: JDBC API の executeBatch() メソッドの実行について

Yugo Nagata nagata @ sraoss.co.jp
2013年 9月 10日 (火) 15:40:03 JST


沖様

長田です。

情報提供ありがとうございます。エラーを再現することができました。
テーブルの not null 制約を外した場合、以下のようなプログラムでも
再現できることがわかりました。
 
  stmt = connection.prepareStatement("insert into t_test(c2) values(?)");
  for (int i = 0; i < 10; i++) {
      Object param;
      param = new java.util.Date(); 
      stmt.setTimestamp(1, new java.sql.Timestamp(
          ((java.util.Date)param).getTime()));
      stmt.addBatch();
  }
  stmt.executeBatch();
  connection.commit();

原因につきましては、現在調査中です。

On Mon, 9 Sep 2013 21:06:13 +0900
沖賢治 <kenjio @ h-t.co.jp> wrote:

> 長田様
> お世話になっております。沖です。
> 
> ご返信頂き、誠にありがとうございます。
> 
> 抜粋ではございますが
> 以下にソースを記述致します。
> 
> ################### テストしているテーブル構造 ######################
> 
> CREATE TABLE t_test
> (
>   c1 integer NOT NULL,
>   c2 date NOT NULL,
>   c3 integer NOT NULL,
>   c4 integer NOT NULL,
>   c5 integer NOT NULL,
>   c6 timestamp with time zone DEFAULT now(),
>   c7 timestamp with time zone,
>   c8 integer,
> )
> 
> ###################  実行している Java のソースの抜粋   ###############
> 
>     String url = "jdbc:postgresql://192.168.0.1:9999/test";
> 
>     Connection con = DriverManager.getConnection(url, "postgres", "123456");
>     con.setAutoCommit(false);
>     PreparedStatement stmt = con.prepareStatement(
>             "insert into t_test(c1, c2, c3, c4, c5) values(?,?,?,?,?)");
>     for (List paramList : rowParameterList) {
>         for (int i = 0; i < paramList.size(); i++) {
>             Object param = paramList.get(i);
>             if (param instanceof Date) {
>                 stmt.setTimestamp(i + 1, new
> java.sql.Timestamp(((Date) param).getTime()));
>             } else {
>                 stmt.setObject(i + 1, param);
>             }
>         }
>         stmt.addBatch();
>     }
>     stmt.executeBatch();
> 
>     con.commit();
>     stmt.close();
>     con.close();
> 
> ##############################################################
> 
> またその後、調査を行っていて以下の事が分かりました。
> 
> c6 のカラムをバインド変数で指定するように
> したところ、エラーが発生しないようになりました。
> (c6 には デフォルト値で now() が指定されており
>  デフォルト値でINSERTを行う場合はエラーとなり、
>  Java側で値を指定してINSERTするようにしたら
>  正常に実行できるようになりました。)
> 
> 
> 以上となります。
> 何卒、よろしくお願い致します。
> 
> 2013年9月9日 19:05 Yugo Nagata <nagata @ sraoss.co.jp>:
> > はじめまして、長田です。
> > ご報告ありがとうございます。
> >
> > 以下の環境で現象の再現を試みましたが、pgpool-II 3.3.0 で executeBatch()
> > のエラーは発生させることはできませんでした。
> >
> >  pgpool-II 3.3.0
> >  postgreql 9.2.4
> >  JDBCドライバー  postgresql-9.2-1003.jdbc4.jar
> >  Java  1.6.0_24 および 1.7.0
> >
> > お手数ですが、再現プログラムを提供いただけないでしょうか。
> >
> > On Fri, 6 Sep 2013 19:43:19 +0900
> > 沖賢治 <kenjio @ h-t.co.jp> wrote:
> >
> >> はじめまして、沖と申します。
> >> お世話になっております。
> >>
> >> 現在、pgpool 3.4.1  を利用していまして
> >> pgpool-II 3.3.0 へのアップグレードを検討しています。
> >> しかし、問題が発生して、困っています。
> >> ご意見いただければ幸いでございます。
> >>
> >> 【現在発生している問題】
> >> 弊社では、Javaベースのシステムを構築しているのですが
> >> JDBC APIのexecuteBatch()メソッドを実行すると
> >> 以下のエラーが出力され実行が行えません。
> >>
> >> java.lang.ArrayIndexOutOfBoundsException: 5
> >> at org.postgresql.core.v3.SimpleParameterList.setResolvedType(SimpleParameterList.java:269)
> >> at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1738)
> >> at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:405)
> >> at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2893)
> >> ・・・
> >>
> >> このエラーは、現在利用している pgpool 3.4.1 環境下では発生せず、
> >> pgpool-II 3.3.0 環境下では発生致します。
> >> また、pgpool-II 3.3.0 環境下でも JDBCの接続文字列に 「protocolVersion=2」
> >> を付加して接続を行うと正常に実行されます。
> >> 出来ましたら、
> >> pgpool-II 3.3.0 環境下でも、protocolVersion=2の指定なし(プロトコルバージョンV3)で
> >> 接続させてxecuteBatch()メソッドを動作できるようにしたいのですが
> >> なにか原因となる部分が想定できますでしょうか?
> >>
> >> 検証しました環境は、以下の通りとなります。
> >> pgpool-II 3.3.0
> >> postgreql 9.2.4
> >> JDBCドライバー  postgresql-9.2-1003.jdbc4.jar
> >> Java  1.6.0_34-b04
> >>
> >> DBサーバは、2台構成で
> >> replication_mode = on
> >> load_balance_mode = on
> >> で設定しています。
> >>
> >> ※ pgpool 以外は、現在運用を行っている環境と同じ設定となっております。
> >>
> >>
> >> 以上となります。
> >> 何卒、よろしくお願い致します。
> >> _______________________________________________
> >> pgpool-general-jp mailing list
> >> pgpool-general-jp @ sraoss.jp
> >> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp
> >
> >
> > --
> > Yugo Nagata <nagata @ sraoss.co.jp>


-- 
Yugo Nagata <nagata @ sraoss.co.jp>


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