我正在使用vertx的JDBC lib,我需要批量插入包含数组字段的值。
我试过:
String query = "UPSERT INTO " + TABLENAME + " (ID, NODES) VALUES (?,?)";
JsonArray param= new JsonArray();
param.add(currentUser.getId().toString());
param.add(new JsonArray(currentUser.getNodes()));
List<JsonArray> params = new ArrayList<>();
params.add(param);
我的输出:
UPSERT INTO USER (ID, NODES) VALUES (?,?)
[["4ec99c96-7ece-34df-9da0-c42e18f9ec51",["9385fe01-980b-3fb1-b911-7cc3a62c028b","1a05f21a-5278-3d2c-8ee1-b8fd44059e5b","a0b34f81-ef77-3eb2-9c81-8841b9277dd8","2e2ebd32-a7a9-38c8-9b35-b7d1c9b97335","7384ac4c-9796-38b1-8069-45bfc57f1beb","19afe185-8b2a-324e-a8e1-0861a0df8d40","e5efd51e-cc8f-348c-a975-5a25ac9f3321","b9bd2bf0-a581-31a5-a4ca-531cfd0420a1","97200212-af2a-3db9-bfe9-c7a9e09da278","919b6f2a-25f9-32d4-bae3-1a270a1e7e6d","a5271df9-aee2-36ae-85ff-b706cac8be2d","b9ad27fd-28b6-3463-b3e9-1e98e0e3c0e1","37c3790a-cd1d-3d1a-91e4-95fbcd25c592","d3b74229-5b18-3e3e-863e-1b56c2e024ba","331f9940-39ce-3af2-b9ba-cfb6d08066bf","14ee65c5-d48c-3c85-ae9e-639c918af5bd","f81898a1-aad9-34bf-ab3f-e7c314c74a81","48adeeeb-8301-39d3-bfd9-9e5557504b55","68f1d824-1c62-3d6d-a529-ef15cda96ad1"]]]
在切换到准备好的报表之前,我的工作要求是:
String query = "UPSERT INTO " + TABLENAME + " (ID, NODES) VALUES ('id',ARRAY['1','2'])";
phoenixSharedJDBCClient.getConnection(conn -> {
if (conn.succeeded()) {
SQLConnection connection = conn.result();
connection.batchWithParams(query,params, res -> {
if (res.succeeded()) {
resultHandler.handle(Future.succeededFuture(Boolean.TRUE));
} else if (res.failed()) {
resultHandler.handle(Future.failedFuture("Prepared statement request: "+res.cause().getMessage()));
}
});
connection.close();
}
我的数据库是Apache Phoenix,是Hbase的sql层。
知道怎么解决吗?
目前vert. x JDBC客户端无法处理数组,因为底层JDBC应用编程接口要求数组中的数据类型在开始时是已知的,我们无法从JSON中检测到它。
有人试图解决这个问题:https://github.com/vert-x3/vertx-jdbc-client/commit/3ea6103f4d698137da533522f2c3d4096522f8c6但它是非常特定于RDBMS的,它适用于Postgres,因为当处理空数组时,oid
引用总是被接受的,但就我所知,其他RDBMS没有这样的东西。
所以很遗憾,在我们改进当前的API之前,您仍然需要依赖您的字符串连接,或者本着开源的精神,帮助我们讨论用例并集思广益地讨论如何解决它。
问题内容: 我有一个dao,它基本上使用hibernate将记录插入到一个表中,该dao用标记为注释,并且我有一个服务,该服务会生成其他一些东西,然后调用我的dao。我的服务也标注了使用。 我叫服务循环。我在dao上的插入内容是否可以批量或一个接一个地工作?我如何确定它们可以批量工作?hibernateTransaction Manager是否管理批处理插入? 我正在使用Oracle DB。
我使用的是Spring Batch 2.1.8。释放我有一个文件,它由一些头信息和一些需要处理的记录组成。 我有一个使用面向块处理的步骤。该步骤包含ItemReader和ItemWriter的实现。ItemReader实现是线程安全的,而ItemWriter不是。 我想在处理(或写入)任何记录之前使用标题信息。在继续使用面向块的处理时,如何确保这一点? 建议的解决方案:一种解决方案可以是编写一个预
我的批处理插入器有奇怪的问题。批处理插入器工作良好,但当我从该位置启动服务器时,CYPHER无法筛选属性。 Query返回所有节点。但当我尝试基于任何属性筛选它时,它不会返回任何行。查询不返回任何内容。 如果我运行run SET命令来更新属性,那么我就能够很好地筛选它。看起来像是索引问题,但无法准确计算。
问题内容: 我需要将几亿条记录插入mysql db。我要一次插入一百万个。请在下面查看我的代码。它似乎很慢。有什么方法可以优化它吗? 问题答案: 我在mysql中遇到类似的性能问题,并通过在连接URL中设置useServerPrepStmts和rewriteBatchedStatements属性来解决。
在我的项目中配置了以下内容: 加载文件时,我有重复的记录,但因为我配置了在下,Spring batch不应回滚记录,但仍将回滚记录。如果我从列表中删除,那么它将抛出异常。我们正在使用Spring批处理版本: 不希望回滚记录,但会回滚记录。
我需要依次执行七个不同的流程(一个接一个)。数据存储在Mysql中。我正在考虑以下选项,如果我错了,或者有更好的解决方案,请纠正我。 要求: > 需要分块处理数据。 我的解决方案和问题:数据读取: 使用JdbcCursorItemReader读取数据,因为这是性能最好的db阅读器-但是,SQL非常复杂,所以我可能不得不考虑使用JdbcTemboard的自定义ItemReader?这让我在处理数据时