Thread: PreparedStatement.executeBatch() error? 7.3
The following code doesn't work, but if in place of doing an addBatch loop with an executeBatch(), I do an executeUpdate each time it does work. I get a parse error from the db server: ERROR: parser: parse error at or near "'1998CF43'" at character 4202 this corresponds to the first value. I'm using the jdbc3 jar for this. PreparedStatement pStatement = connection.prepareStatement("insert into case_data_store values (?,?,?,?)"); ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); for (int current_chunk = 0; current_chunk < chunk_count; current_chunk++){ pStatement.setString(1,values.get("CASENUMBER").toString()); pStatement.setString(2,values.get("NCIC").toString()); pStatement.setInt(3,current_chunk); pStatement.setBytes(4,baos.toByteArray()); pStatement.addBatch(); //pStatement.executeUpdate(); } pStatement.executeBatch(); This is the stack trace: java.lang.ArrayIndexOutOfBoundsException: 1 at org.postgresql.core.QueryExecutor.sendQuery(QueryExecutor.java:143) at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:65) at org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:451) at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:281) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48) at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:179) at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:165) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:80) -- Jeremiah Jahn <jeremiah@cs.earlham.edu>
I've been unable to reproduce this with the current 7.3 driver and the following code. You will need to provide a some more detail if you're still experiencing this problem. Kris Jurka import java.sql.*; public class BatchPstmt { // CREATE TABLE batchstmt(a text, b varchar(50), c int, d bytea); public static void main(String args[]) throws Exception { Class.forName("org.postgresql.Driver"); Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/jurka","jurka",""); PreparedStatement pstmt = conn.prepareStatement("insert into batchpstmt values (?,?,?,?)"); byte bytes[] = new byte[0]; for (int i=0; i<5; i++) { pstmt.setString(1,"CASENUMBER"); pstmt.setString(2,"NCIC"); pstmt.setInt(3,i); pstmt.setBytes(4,bytes); pstmt.addBatch(); } pstmt.executeBatch(); pstmt.close(); conn.close(); } } On 7 Feb 2003, Jeremiah Jahn wrote: > The following code doesn't work, but if in place of doing an addBatch > loop with an executeBatch(), I do an executeUpdate each time it does > work. I get a parse error from the db server: > > ERROR: parser: parse error at or near "'1998CF43'" at character 4202 > > this corresponds to the first value. I'm using the jdbc3 jar for this. > > PreparedStatement pStatement = connection.prepareStatement("insert into case_data_store values (?,?,?,?)"); > ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); > > for (int current_chunk = 0; current_chunk < chunk_count; current_chunk++){ > > pStatement.setString(1,values.get("CASENUMBER").toString()); > pStatement.setString(2,values.get("NCIC").toString()); > pStatement.setInt(3,current_chunk); > pStatement.setBytes(4,baos.toByteArray()); > pStatement.addBatch(); > //pStatement.executeUpdate(); > > } > > pStatement.executeBatch(); > > > > This is the stack trace: > java.lang.ArrayIndexOutOfBoundsException: 1 > at > org.postgresql.core.QueryExecutor.sendQuery(QueryExecutor.java:143) > at > org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:65) > at > org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:451) > at > org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:281) > at > org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48) > at > org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:179) > at > org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:165) > at > org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:80) > > > -- > Jeremiah Jahn <jeremiah@cs.earlham.edu> > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org >
Jeremiah, I am a bit confused. You mention two different errors in your email the "ERROR: parser:...." and the stack trace. Do both get produced at the same time, or are they happening at different times? Also the parse error looks like an error coming from the database. Can you turn on query logging on the server to see the text of the statement that the error is occuring in? That should provide a clue as to why the sql statement is invalid. To log the sql statements on the server you want to set the parameter log_statement=true in your postgresql.conf file. Also it might help to turn on debug logging in the jdbc driver. Can you add ?loglevel=2 to the jdbc connection url? (both of the above suggestions are for 7.3, the details on doing this on 7.2 are a bit different). thanks, --Barry Jeremiah Jahn wrote: > The following code doesn't work, but if in place of doing an addBatch > loop with an executeBatch(), I do an executeUpdate each time it does > work. I get a parse error from the db server: > > ERROR: parser: parse error at or near "'1998CF43'" at character 4202 > > this corresponds to the first value. I'm using the jdbc3 jar for this. > > PreparedStatement pStatement = connection.prepareStatement("insert into case_data_store values (?,?,?,?)"); > ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); > > for (int current_chunk = 0; current_chunk < chunk_count; current_chunk++){ > > pStatement.setString(1,values.get("CASENUMBER").toString()); > pStatement.setString(2,values.get("NCIC").toString()); > pStatement.setInt(3,current_chunk); > pStatement.setBytes(4,baos.toByteArray()); > pStatement.addBatch(); > //pStatement.executeUpdate(); > > } > > pStatement.executeBatch(); > > > > This is the stack trace: > java.lang.ArrayIndexOutOfBoundsException: 1 > at > org.postgresql.core.QueryExecutor.sendQuery(QueryExecutor.java:143) > at > org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:65) > at > org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:451) > at > org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:281) > at > org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48) > at > org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:179) > at > org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:165) > at > org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:80) > >
Here are the results of the log level set to 2. There seems to be a little extra data stuck on the end of the batch version. Establishing connection...PostgreSQL 7.3b1 JDBC3 jdbc driver build 104 LOG: query: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' elsegetdatabaseencoding() end; getConnection returning driver[className=org.postgresql.Driver,org.postgresql.Driver@5dd582] done LOG: query: begin; LOG: query: delete from actor where case_id = '1998CF46' and court_ori = 'IL078015J' ... LOG: query: insert into case_data (case_id,court_ori,extraction_datetime,update_date) values ('1998CF46','IL078015J','20030210T092429','1901/01/01') java.lang.ArrayIndexOutOfBoundsException: 1 at org.postgresql.core.QueryExecutor.sendQuery(QueryExecutor.java:143) at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:65) at org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:451) at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:281) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48) at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:179) at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:165) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:80) at com.goodinassociates.judici.importer.judici.DOXImporter.importDoc(Unknown Source) at com.goodinassociates.judici.importer.judici.ImportServer$Client.run(ImportServer.java:482) LOG: query: insert into case_data_store values ('1998CF46','IL078015J',0,'\\254\\355\\000\\005t\\001\\245<?xml version="1.0"encoding="UTF-8"?>\\015\\012<!DOCTYPE CourtDataTransferFile>\\015\\012<CourtDataTransferFile FileCreationDateTime="20030210T092429"Version="1"><Provider ProducerID="translation" ID="GAL" /><Court NCIC="IL078015J"><CaseNumber="1998CF46" Action="Delete" ModificationType="None" LastUpdateDate="1901/01/01" TypeCode="" SubtypeCode=""TypeSubtypeText="" Year="" Title="" Category="" /></Court></CourtDataTransferFile>\\015\\012')'1998CF46'Qrollback;begin; ERROR: parser: parse error at or near "'1998CF46'" at character 541 the last line looks like this in the non-batch version: LOG: query: insert into case_data_store values ('1998CF47','IL078015J',0,'\\254\\355\\000\\005t\\001\\245<?xml version="1.0"encoding="UTF-8"?>\\015\\012<!DOCTYPE CourtDataTransferFile>\\015\\012<CourtDataTransferFile FileCreationDateTime="20030210T093214"Version="1"><Provider ProducerID="translation" ID="GAL" /><Court NCIC="IL078015J"><CaseNumber="1998CF47" Action="Delete" ModificationType="None" LastUpdateDate="1901/01/01" TypeCode="" SubtypeCode=""TypeSubtypeText="" Year="" Title="" Category="" /></Court></CourtDataTransferFile>\\015\\012') There is no '1998CF46' stuff tagged on the end of it. On Fri, 2003-02-07 at 21:34, Barry Lind wrote: > Jeremiah, > > I am a bit confused. You mention two different errors in your email the > "ERROR: parser:...." and the stack trace. Do both get produced at > the same time, or are they happening at different times? > > Also the parse error looks like an error coming from the database. Can > you turn on query logging on the server to see the text of the statement > that the error is occuring in? That should provide a clue as to why the > sql statement is invalid. > > To log the sql statements on the server you want to set the parameter > log_statement=true in your postgresql.conf file. Also it might help to > turn on debug logging in the jdbc driver. Can you add ?loglevel=2 to > the jdbc connection url? (both of the above suggestions are for 7.3, > the details on doing this on 7.2 are a bit different). > > thanks, > --Barry > > > Jeremiah Jahn wrote: > > The following code doesn't work, but if in place of doing an addBatch > > loop with an executeBatch(), I do an executeUpdate each time it does > > work. I get a parse error from the db server: > > > > ERROR: parser: parse error at or near "'1998CF43'" at character 4202 > > > > this corresponds to the first value. I'm using the jdbc3 jar for this. > > > > PreparedStatement pStatement = connection.prepareStatement("insert into case_data_store values (?,?,?,?)"); > > ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); > > > > for (int current_chunk = 0; current_chunk < chunk_count; current_chunk++){ > > > > pStatement.setString(1,values.get("CASENUMBER").toString()); > > pStatement.setString(2,values.get("NCIC").toString()); > > pStatement.setInt(3,current_chunk); > > pStatement.setBytes(4,baos.toByteArray()); > > pStatement.addBatch(); > > //pStatement.executeUpdate(); > > > > } > > > > pStatement.executeBatch(); > > > > > > > > This is the stack trace: > > java.lang.ArrayIndexOutOfBoundsException: 1 > > at > > org.postgresql.core.QueryExecutor.sendQuery(QueryExecutor.java:143) > > at > > org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:65) > > at > > org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:451) > > at > > org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:281) > > at > > org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48) > > at > > org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:179) > > at > > org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:165) > > at > > org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:80) > > > > > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org -- Jeremiah Jahn <jeremiah@cs.earlham.edu>
Jeremiah, This shows that you are using the beta1 driver. Can you download the latest 7.3 driver from jdbc.postgresql.org and try it, and send it's logs? thanks, --Barry Jeremiah Jahn wrote: > Here are the results of the log level set to 2. There seems to be a > little extra data stuck on the end of the batch version. > > > Establishing connection...PostgreSQL 7.3b1 JDBC3 jdbc driver build 104 > LOG: query: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN' elsegetdatabaseencoding() end; > getConnection returning driver[className=org.postgresql.Driver,org.postgresql.Driver@5dd582] > done > LOG: query: begin; > LOG: query: delete from actor where case_id = '1998CF46' and court_ori = 'IL078015J' > ... > LOG: query: insert into case_data (case_id,court_ori,extraction_datetime,update_date) values ('1998CF46','IL078015J','20030210T092429','1901/01/01') > java.lang.ArrayIndexOutOfBoundsException: 1 > at org.postgresql.core.QueryExecutor.sendQuery(QueryExecutor.java:143) > at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:65) > at org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:451) > at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:281) > at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48) > at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:179) > at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:165) > at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:80) > at com.goodinassociates.judici.importer.judici.DOXImporter.importDoc(Unknown Source) > at com.goodinassociates.judici.importer.judici.ImportServer$Client.run(ImportServer.java:482) > LOG: query: insert into case_data_store values ('1998CF46','IL078015J',0,'\\254\\355\\000\\005t\\001\\245<?xml version="1.0"encoding="UTF-8"?>\\015\\012<!DOCTYPE CourtDataTransferFile>\\015\\012<CourtDataTransferFile FileCreationDateTime="20030210T092429"Version="1"><Provider ProducerID="translation" ID="GAL" /><Court NCIC="IL078015J"><CaseNumber="1998CF46" Action="Delete" ModificationType="None" LastUpdateDate="1901/01/01" TypeCode="" SubtypeCode=""TypeSubtypeText="" Year="" Title="" Category="" /></Court></CourtDataTransferFile>\\015\\012')'1998CF46'Qrollback;begin; > ERROR: parser: parse error at or near "'1998CF46'" at character 541 > > the last line looks like this in the non-batch version: > LOG: query: insert into case_data_store values ('1998CF47','IL078015J',0,'\\254\\355\\000\\005t\\001\\245<?xml version="1.0"encoding="UTF-8"?>\\015\\012<!DOCTYPE CourtDataTransferFile>\\015\\012<CourtDataTransferFile FileCreationDateTime="20030210T093214"Version="1"><Provider ProducerID="translation" ID="GAL" /><Court NCIC="IL078015J"><CaseNumber="1998CF47" Action="Delete" ModificationType="None" LastUpdateDate="1901/01/01" TypeCode="" SubtypeCode=""TypeSubtypeText="" Year="" Title="" Category="" /></Court></CourtDataTransferFile>\\015\\012') > > There is no '1998CF46' stuff tagged on the end of it. > > > > On Fri, 2003-02-07 at 21:34, Barry Lind wrote: > >>Jeremiah, >> >>I am a bit confused. You mention two different errors in your email the >> "ERROR: parser:...." and the stack trace. Do both get produced at >>the same time, or are they happening at different times? >> >>Also the parse error looks like an error coming from the database. Can >>you turn on query logging on the server to see the text of the statement >>that the error is occuring in? That should provide a clue as to why the >>sql statement is invalid. >> >>To log the sql statements on the server you want to set the parameter >>log_statement=true in your postgresql.conf file. Also it might help to >>turn on debug logging in the jdbc driver. Can you add ?loglevel=2 to >>the jdbc connection url? (both of the above suggestions are for 7.3, >>the details on doing this on 7.2 are a bit different). >> >>thanks, >>--Barry >> >> >>Jeremiah Jahn wrote: >> >>>The following code doesn't work, but if in place of doing an addBatch >>>loop with an executeBatch(), I do an executeUpdate each time it does >>>work. I get a parse error from the db server: >>> >>>ERROR: parser: parse error at or near "'1998CF43'" at character 4202 >>> >>>this corresponds to the first value. I'm using the jdbc3 jar for this. >>> >>> PreparedStatement pStatement = connection.prepareStatement("insert into case_data_store values (?,?,?,?)"); >>> ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); >>> >>> for (int current_chunk = 0; current_chunk < chunk_count; current_chunk++){ >>> >>> pStatement.setString(1,values.get("CASENUMBER").toString()); >>> pStatement.setString(2,values.get("NCIC").toString()); >>> pStatement.setInt(3,current_chunk); >>> pStatement.setBytes(4,baos.toByteArray()); >>> pStatement.addBatch(); >>> //pStatement.executeUpdate(); >>> >>> } >>> >>> pStatement.executeBatch(); >>> >>> >>> >>>This is the stack trace: >>>java.lang.ArrayIndexOutOfBoundsException: 1 >>> at >>>org.postgresql.core.QueryExecutor.sendQuery(QueryExecutor.java:143) >>> at >>>org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:65) >>> at >>>org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:451) >>> at >>>org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:281) >>> at >>>org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48) >>> at >>>org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:179) >>> at >>>org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:165) >>> at >>>org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:80) >>> >>> >> >> >> >> >>---------------------------(end of broadcast)--------------------------- >>TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
that seems to have fixed it...the non-beta version..That's what came down with CVS at the 7.3 release. It alos seems to have fixed the error I was getting about not enough memory when the data was over 1meg in size. Still takes forever to process it, but hey.. thanx, -jj- On Mon, 2003-02-10 at 10:53, Barry Lind wrote: > Jeremiah, > > This shows that you are using the beta1 driver. Can you download the > latest 7.3 driver from jdbc.postgresql.org and try it, and send it's logs? > > thanks, > --Barry > > > Jeremiah Jahn wrote: > > Here are the results of the log level set to 2. There seems to be a > > little extra data stuck on the end of the batch version. > > > > > > Establishing connection...PostgreSQL 7.3b1 JDBC3 jdbc driver build 104 > > LOG: query: set datestyle to 'ISO'; select version(), case when pg_encoding_to_char(1) = 'SQL_ASCII' then 'UNKNOWN'else getdatabaseencoding() end; > > getConnection returning driver[className=org.postgresql.Driver,org.postgresql.Driver@5dd582] > > done > > LOG: query: begin; > > LOG: query: delete from actor where case_id = '1998CF46' and court_ori = 'IL078015J' > > ... > > LOG: query: insert into case_data (case_id,court_ori,extraction_datetime,update_date) values ('1998CF46','IL078015J','20030210T092429','1901/01/01') > > java.lang.ArrayIndexOutOfBoundsException: 1 > > at org.postgresql.core.QueryExecutor.sendQuery(QueryExecutor.java:143) > > at org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:65) > > at org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:451) > > at org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:281) > > at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48) > > at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:179) > > at org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:165) > > at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:80) > > at com.goodinassociates.judici.importer.judici.DOXImporter.importDoc(Unknown Source) > > at com.goodinassociates.judici.importer.judici.ImportServer$Client.run(ImportServer.java:482) > > LOG: query: insert into case_data_store values ('1998CF46','IL078015J',0,'\\254\\355\\000\\005t\\001\\245<?xml version="1.0"encoding="UTF-8"?>\\015\\012<!DOCTYPE CourtDataTransferFile>\\015\\012<CourtDataTransferFile FileCreationDateTime="20030210T092429"Version="1"><Provider ProducerID="translation" ID="GAL" /><Court NCIC="IL078015J"><CaseNumber="1998CF46" Action="Delete" ModificationType="None" LastUpdateDate="1901/01/01" TypeCode="" SubtypeCode=""TypeSubtypeText="" Year="" Title="" Category="" /></Court></CourtDataTransferFile>\\015\\012')'1998CF46'Qrollback;begin; > > ERROR: parser: parse error at or near "'1998CF46'" at character 541 > > > > the last line looks like this in the non-batch version: > > LOG: query: insert into case_data_store values ('1998CF47','IL078015J',0,'\\254\\355\\000\\005t\\001\\245<?xml version="1.0"encoding="UTF-8"?>\\015\\012<!DOCTYPE CourtDataTransferFile>\\015\\012<CourtDataTransferFile FileCreationDateTime="20030210T093214"Version="1"><Provider ProducerID="translation" ID="GAL" /><Court NCIC="IL078015J"><CaseNumber="1998CF47" Action="Delete" ModificationType="None" LastUpdateDate="1901/01/01" TypeCode="" SubtypeCode=""TypeSubtypeText="" Year="" Title="" Category="" /></Court></CourtDataTransferFile>\\015\\012') > > > > There is no '1998CF46' stuff tagged on the end of it. > > > > > > > > On Fri, 2003-02-07 at 21:34, Barry Lind wrote: > > > >>Jeremiah, > >> > >>I am a bit confused. You mention two different errors in your email the > >> "ERROR: parser:...." and the stack trace. Do both get produced at > >>the same time, or are they happening at different times? > >> > >>Also the parse error looks like an error coming from the database. Can > >>you turn on query logging on the server to see the text of the statement > >>that the error is occuring in? That should provide a clue as to why the > >>sql statement is invalid. > >> > >>To log the sql statements on the server you want to set the parameter > >>log_statement=true in your postgresql.conf file. Also it might help to > >>turn on debug logging in the jdbc driver. Can you add ?loglevel=2 to > >>the jdbc connection url? (both of the above suggestions are for 7.3, > >>the details on doing this on 7.2 are a bit different). > >> > >>thanks, > >>--Barry > >> > >> > >>Jeremiah Jahn wrote: > >> > >>>The following code doesn't work, but if in place of doing an addBatch > >>>loop with an executeBatch(), I do an executeUpdate each time it does > >>>work. I get a parse error from the db server: > >>> > >>>ERROR: parser: parse error at or near "'1998CF43'" at character 4202 > >>> > >>>this corresponds to the first value. I'm using the jdbc3 jar for this. > >>> > >>> PreparedStatement pStatement = connection.prepareStatement("insert into case_data_store values (?,?,?,?)"); > >>> ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); > >>> > >>> for (int current_chunk = 0; current_chunk < chunk_count; current_chunk++){ > >>> > >>> pStatement.setString(1,values.get("CASENUMBER").toString()); > >>> pStatement.setString(2,values.get("NCIC").toString()); > >>> pStatement.setInt(3,current_chunk); > >>> pStatement.setBytes(4,baos.toByteArray()); > >>> pStatement.addBatch(); > >>> //pStatement.executeUpdate(); > >>> > >>> } > >>> > >>> pStatement.executeBatch(); > >>> > >>> > >>> > >>>This is the stack trace: > >>>java.lang.ArrayIndexOutOfBoundsException: 1 > >>> at > >>>org.postgresql.core.QueryExecutor.sendQuery(QueryExecutor.java:143) > >>> at > >>>org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:65) > >>> at > >>>org.postgresql.jdbc1.AbstractJdbc1Connection.ExecSQL(AbstractJdbc1Connection.java:451) > >>> at > >>>org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Statement.java:281) > >>> at > >>>org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:48) > >>> at > >>>org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:179) > >>> at > >>>org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdbc1Statement.java:165) > >>> at > >>>org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:80) > >>> > >>> > >> > >> > >> > >> > >>---------------------------(end of broadcast)--------------------------- > >>TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org -- Jeremiah Jahn <jeremiah@cs.earlham.edu>