2

私のJavaコードでは、長いクエリを作成したいのですが、JOOQを見つけてクエリを作成し、生成クラスなしで使用していますが、次のようにクエリを段階的に作成する方法が見つかりません:

DSLContext request = DSL.using(sqlConnection, SQLDialect.MYSQL);
request.insertInto(DSL.table("MyTable"), DSL.field("MyColumn1"), DSL.field("MyColumn2"));

// ... some code ...

request.values("hello", 98);

// ... some code ...

request.values("world", 67);

// ... some code ...

request.execute();

これを作る方法は?

4

1 に答える 1

3

多くのオプションがあります。

DSL API に固執する

...そして中間型をローカル変数に割り当てます:

DSLContext request = DSL.using(sqlConnection, SQLDialect.MYSQL);
InsertValuesStep2<?, Object, Object> step = request.insertInto(
    DSL.table("MyTable"), DSL.field("MyColumn1"), DSL.field("MyColumn2"));

// ... some code ...

step = step.values("hello", 98);

// ... some code ...

step = values("world", 67);

// ... some code ...

step.execute();

代わりにモデル API を使用してください

... この種の動的 SQL は、おそらくモデル API を使用して実装する方が簡単です ( http://www.jooq.org/doc/latest/manual/sql-building/sql-statements/dsl-and-non-も参照)。 DSL )

DSLContext request = DSL.using(sqlConnection, SQLDialect.MYSQL);
InsertQuery<?> insert = request.insertQuery(DSL.table("MyTable"));

// ... some code ...

insert.addValue(DSL.field("MyColumn1", String.class), "hello"))
insert.addValue(DSL.field("MyColumn1", Integer.class), 98))

// ... some code ...

insert.newRecord();
insert.addValue(DSL.field("MyColumn1", String.class), "world"))
insert.addValue(DSL.field("MyColumn1", Integer.class), 67))

// ... some code ...

insert.execute();

バッチ ステートメントを使用する

別の方法として、バッチ API ( http://www.jooq.org/doc/latest/manual/sql-execution/batch-execution ) を使用して、複数の個々のステートメントのバッチをサーバーに送信することもできます。例えば:

request.batch(DSL.insertInto(
                    DSL.table("MyTable"), DSL.field("MyColumn1"), DSL.field("MyColumn2"))
                 .values((String) null, null))
       .bind("hello", 98)
       .bind("world", 67)
       .execute();

... または、より動的な形式で:

List<Object[]> values = new ArrayList<>();

// ... some code ...
values.add(new Object[] { "hello", 98 });

// ... some code ...
values.add(new Object[] { "world", 67});

request.batch(DSL.insertInto(
                    DSL.table("MyTable"), DSL.field("MyColumn1"), DSL.field("MyColumn2"))
                 .values((String) null, null))
       .bind(values.toArray(new Object[list.size()][]))
       .execute();
于 2015-07-22T12:09:38.430 に答える