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

沖賢治 kenjio @ h-t.co.jp
2013年 9月 10日 (火) 16:39:11 JST


長田様
お世話になっております。沖です。

お手間取らせてしまい
申し訳ありません。
再現させる事が出来まして、良かったです。

大変、申し訳ありませんが
ご調査の程、よろしくお願い致します。


2013年9月10日 15:40 Yugo Nagata <nagata @ sraoss.co.jp>:
> 沖様
>
> 長田です。
>
> 情報提供ありがとうございます。エラーを再現することができました。
> テーブルの 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 メーリングリストの案内