2015-11-08 11 views
3

这是使用JooQ 3.7.0。 JooQ允许您将其API用于import data from, for instance, a CSVJooQ的Loader <?>的.commit *()或.batch *()方法是否在TransactionalRunnable中?

让我们看看这个代码实现的一个例子(在Java中8,作为一种方法参考)一个TransactionalRunnable的:

// csvPath is a Path to a CSV file 
private void writeCsv(final Configuration configuration) 
{ 
    try (
     final Reader reader = Files.newBufferedReader(csvPath); 
    ) { 
     final Loader<PermethodMetricsRecord> loader = DSL.using(configuration) 
      .loadInto(PERMETHOD_METRICS) 
      .loadCSV(reader) 
      .fields(PERMETHOD_METRICS.fields()) 
      .execute(); 
     LOGGER.info("{} lines stored in database", loader.stored()); 
    } catch (IOException e) { 
     throw new RuntimeException("Cannot open CSV for reading", e); 
    } 
} 

现在,调用一个DSLContext.loadInto()LoaderOptionStep。这个类有几种方法,特别是默认的提交策略(.commitNone()是默认的)和批处理方法。

这里我们是在由JooQ创建的交易中;除了缺省值之外,我没有指定任何提交或批处理策略。

根据我使用的RDBMS引擎,是否使用任何提交/批处理策略对我有影响?请注意,就我而言,这是PostgreSQL 9.4.X.

+0

你是什么意思的“提交或批量策略”? –

+0

我的意思是我保留默认值,如代码所示;我不批量或批量插入或其他任何东西 – fge

+0

哦,我明白了。显然,你的意思是'Loader' API标志。我的错。我以为你指的是一些JDBC设置......很快就会回答 –

回答

1

截至jOOQ 3.7,在Loader API使用jOOQ的事务API比commitNone()(默认值)以外的任何其他沿的行为是不确定的

Loader API将直接提交批次底层的JDBC连接上,但可以表现不同,这取决于你如何产生这种连接(通过连接池等EG)

存在未处理的功能要求指定并实现可预测的行为: https://github.com/jOOQ/jOOQ/issues/4770

相关问题