Is there an upper limit to the number of bind calls in a JOOQ batch statement?

Viewed 838

We use batch statements when inserting as follows:

BatchBindStep batch = create.batch(create
   .insertInto(PERSON, ID, NAME)
   .values((Integer) null, null));

for (Person p : peopleToInsert) {
  batch.bind(p.getId(), p.getName());
}
batch.execute();

This has worked well in the past when inserting several thousands of objects. However, it raises a few questions:

  1. Is there an upper limit to the number of .bind() calls for a batch?
  2. If so, what does the limit depend on?
  3. It seems to be possible to call .bind() again after having executed .execute(). Will .execute() clear previously bound values?

To clarify the last question: after the following code has executed...

BatchBindStep batch = create.batch(create
   .insertInto(PERSON, ID, NAME)
   .values((Integer) null, null));

batch.bind(1, "A");
batch.bind(2, "B");
batch.extecute();
batch.bind(3, "C");
batch.bind(4, "D");
batch.execute();

which result should I expect?

a)        b)
ID NAME   ID NAME
-------   -------
 1 A       1 A
 2 B       2 B
 3 C       1 A
 4 D       2 B
           3 C
           4 D

Unfortunately, neither the Javadoc nor the documentation discuss this particular usage pattern.

(I am asking this particular question because if I .execute() every 1000 binds or so to avoid said limit, I need to know whether I can reuse the batch objects for several .execute() calls or not.)

1 Answers
Related