问题标签 [jdbi3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
677 浏览

java - JDBI 3:嵌套 SQLObject

我尝试使用存储在连接表中的 jdbi 3 收集复合对象。实体事件 1 -> n 作者是数据结构的示例。它们通过 author_id 连接,该 author_id 保存在 event 的列中。

它们很容易通过 join 查询,但我无法使用 jdbi 中的给定注释创建对象。你能告诉我我在使用 jdbi 时的错误,并让我有机会用 jdbi 处理“复杂”对象吗?

DAO 代码

事件.java

作者.java

如您所见,作者为空。所以我猜@Nested 注释没有正确使用。

0 投票
1 回答
436 浏览

java - JDBI bindBean 找不到命名参数

我正在尝试使用 JDBI 更新 Employee 表中的 Employee 行。但是,bindBean 方法似乎不喜欢我的 bean。我已经包括了 getter 和 setter。bean 有一个公共的默认构造函数。对象的属性名称与数据库列名称完全匹配。例如,LastName String 对应于 LastName 数据库列。完全符合。我在这里做错了什么?我是否误解了 bindBean 的工作原理?我还尝试了在 :parameters 前面添加前缀的相同代码,但仍然没有骰子。

编辑:经过更多研究,我相信问题出在我的列名和属性以大写字母开头的事实。用 @ColumnName 和适当的大写列名注释我的 getter 和 setter 似乎没有帮助。

已解决:此问题的简单解决方案是重命名查询本身中的命名参数以匹配属性名称的小写版本。即,如果属性被称为名称,将查询中的参数更改为:名称,问题就解决了,而无需触及您的 bean 或数据库列。

道法:

还有我的豆子:

0 投票
0 回答
142 浏览

java - JDBI Postgis JTS 包装器

我正在尝试使用 PostGIS-JDBC-jtsparser(版本 2.5.0)模块将 JTS java 对象作为参数注入,@SQLQuery但我不知道如何。
我知道应该在我的 JDBI 配置中注入一个参数工厂,但是哪个?
如果这不是正确的方法,那么最好的方法是什么?

0 投票
1 回答
85 浏览

jdbi - 记录 Jdbi 与数据库的交互

我在这里围绕这个主题回顾了几个问题/答案,但没有什么是开箱即用的。我还阅读了官方文档中的SqlLogger部分,但我仍然找不到记录/可视化 Jdbi(版本3.x)在与数据库交互时“正在做什么”的方法?——以直截了当的方式。

我知道 Jdbi 正在使用几乎原始的 SQL,但是能够看到框架/库说它为调试目的所做的事情总是很好的,等等。

我已经尝试了几乎任何从org.jdbi(在logback.xml文件中)开始的命名空间,直到trace模式,但我只看到如下内容:

这些天有没有办法做到这一点?

0 投票
0 回答
62 浏览

annotations - 带有注释的 Jdbi3 不能工作,@RegisterBeanMapper 不能工作

我无法让 RegisterBeanMapper 工作。我有这个:

我的 TaskDescription 是一个简单的 POJO,带有 getter 和 setter,例如 setUrl(String url) 和 setName(String name)。

测试时出现以下错误:

org.jdbi.v3.core.statement.UnableToCreateStatementException:在 [java.lang.String] 上找不到 bean 属性 [url] 的 setter 方法

这表明它适用于默认的 String 对象,而不是我注册的 bean。

0 投票
1 回答
148 浏览

postgresql - JDBI/Postgress Select 查询因日期时间比较而失败

Postgress 版本:10.4

表列名称/类型:updated_at timestamp(6) with time zone

SQL查询:

Java方法:

此查询和方法适用于 H2 数据库。但是,当使用 Postgress 数据库对其进行测试时,出现以下异常

org.jdbi.v3.core.statement.UnableToExecuteStatementException:org.postgresql.util.PSQLException:错误:“$ 5”或附近的语法错误位置:234 [statement:“SELECT i.code,p.* FROM information i INNER JOIN产品 p ON i.ref = p.information_ref WHERE p.reference = :reference AND p.type = :paymentMethodType AND p.error_state = :errorState AND p.updated_at 不为空且 p.updated_at >= :queryFromTime ORDER BY p。 updated_at ASC FETCH FIRST :numberOfRows ROWS ONLY",参数:{位置:{},命名:{queryFromTime:2021-04-15T16:28:20.365795+12:00,numberOfRows:10,paymentMethodType:CREDIT_CARD,reference:ABCD,errorState :COMPLETED_WITH_ERRORS}, finder:[]}] at org.jdbi.v3.core.statement.SqlStatement.internalExecute(SqlStatement.java:1794) at org.jdbi.v3.core.result.ResultProducers.lambda$getResultSet$2(ResultProducers .java:64) 在 org.jdbi.v3.core.result.ResultIterable.stream(ResultIterable.java:228) 在 org.jdbi.v3.core.result.ResultIterable.lambda$of$0(ResultIterable.java:54) 在 org. jdbi.v3.core.result.ResultIterable.collect(ResultIterable.java:284) 在 org.jdbi.v3.core.result.ResultIterable.list(ResultIterable.java:273) 在 au.com.abcd.products.v2。 database.store.dao.ProductsDaoImpl.lambda$retrieveProductInformations$6(ProductsDaoImpl.java:260) at org.jdbi.v3.core.Handle.inTransaction(Handle.java:424) at org.jdbi.v3.core.Jdbi.lambda $inTransaction$4(Jdbi.java:375) 在 org.jdbi.v3.core.Jdbi.withHandle(Jdbi.java:341) 在 org.jdbi.v3.core.Jdbi.inTransaction(Jdbi.java:375) 在 au .com.abcd.products.v2.database.store.dao.ProductsDaoImpl.retrievePaymentIntents(IntentDaoImpl.java:251) 在 au.com.abcd.products.v2.business.services.complete.ProductServiceImpl。reProcessProducts(ProductServiceImpl.java:114) at au.com.abcd.products.v2.business.background.TransactionReProcessManager.lambda$reProcessProducts$1(TransactionReProcessManager.java:81) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:829) 引起作者:org.postgresql.util.PSQLException:错误:“$5”处或附近的语法错误位置:org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2532) 处 org.postgresql.core.v3 处的 234 .QueryExecutorImpl.processResults(QueryExecutorImpl.java:2267) 在 org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:312) 在 org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:448)在org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:153)在org.postgresql.jdbc.PgPreparedStatement.execute(PgPreparedStatement.java) :142) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal 的 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) .reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke (StatementFacade.java:114) 在 com.sun.proxy.$Proxy120.execute(Unknown Source) 在 org.jdbi.v3.core.statement.SqlLoggerUtil.wrap(SqlLoggerUtil.java:31) 在 org.jdbi.v3。 core.statement.SqlStatement。internalExecute(SqlStatement.java:1786) ...省略了16个常用框架

我也尝试了 fetchFromTime.toLocalDateTime() 但得到了同样的异常。

0 投票
1 回答
53 浏览

java - JDBI3 返回参数化类

我有一个抽象的 EntryPoint 类,如下所示:

然后我有这个 EntryPoint 类的子类,每个子类只接受一种标签。例如,一个 SNMPEntryPoint 只存储 SNMPTags。子类提供抽象方法的实现:

有没有办法创建一个返回参数化类列表的 JDBI 查询?目前,这就是我正在做的事情:

但这感觉像是对课程的原始使用。所以我想我的问题是,如果我使用此代码生成 SNMPEntryPoints,然后在这些 EntryPoints 上调用 getTiedTags 或 setTiedTags,那会起作用吗?我是否通过以这种方式创建我的 SNMPEntryPoint 对象来打破任何编码约定?

0 投票
1 回答
218 浏览

java - Jdbi 和继承:条件映射?

我有一个名为的表Tags,它将“标签”存储为一行,无论它们代表什么特定的子类。一些行代表 modbus 标签,一些 snmp,一些其他协议。从 Tag 继承的所有类都将它们的数据存储在这个表中,未使用的列只包含空值。

目前,我有类似的 DAO 方法,getAllModBusTags()其中包含一个指令mapToBean(ModBusTag.class)。最终,所有 Tag 的子类都从数据库中获取(每个协议一次获取),然后添加到超类型 Tag 的 ArrayList 中。

我的问题是,Jdbi 是否有一种简单的方法来执行行的条件映射,以便如果行包含特定值,则将其映射到 ModBusTag.class,但如果行包含不同的值,则将其映射到 SNMPTag.class,等等等等?

我的最终目标是有一个单一的选择语句,它从数据库中获取每个标签,逐行自动映射到正确的 bean,然后将所有这些子类 bean 存储在超类型标签的列表中。

单一类型的示例方法:

一些错误的伪代码来表明我想要做什么:

0 投票
0 回答
47 浏览

java - 使用 JDBI 3 RowMapper 处理 Records 或 ResultSet 的 array_agg()

您如何处理映射 Postgres 结果记录的数组列?我有一个查询连接三个表,表 a、b 和 c。关系如下: a 0 到 n b b 1 到 1 c

询问:SELECT a.*, array_agg((b.*, c.*)) as b_list FROM a LEFT JOIN b ON b.id=ANY(a.b_ids) AND a.tenant_id=b.tenant_id LEFT JOIN c ON b.c_id=c.id AND b.tenant_id=c.tenant_id GROUP BY b.id, b.tenant_id

行映射器:

0 投票
1 回答
495 浏览

java - JDBI 错误没有为类型注册映射器

我正在尝试创建一个从我的数据库中的客户表返回所有用户的方法,但是这段代码:

返回错误:

我看到另一个关于这个错误的帖子,他们说这个错误是由于类模型和数据库表之间的映射而发生的,但是我的应用程序是用纯 java 和 JDBI 3 构建的,我没有使用 Spring,所以如何映射结果此代码用于将此结果转换为客户列表?