当我在spring boot中使用postgresql函数时,当我使用array参数时,它返回一个数据不匹配错误。
我有一份模型文件。我正在将数据按顺序保存到这个模型文件中。当我以下面的方式将此发送到函数时,我得到一个错误。
StoredProcedureQuery subscriber = entityManager.createStoredProcedureQuery("fn_subscriber_to_iservice");
subscriber.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
subscriber.registerStoredProcedureParameter(2, Integer.class, ParameterMode.IN);
subscriber.registerStoredProcedureParameter(3, String.class, ParameterMode.IN);
subscriber.registerStoredProcedureParameter(4, String.class, ParameterMode.IN);
subscriber.registerStoredProcedureParameter(5, Double.class, ParameterMode.IN);
subscriber.registerStoredProcedureParameter(6, Double.class, ParameterMode.IN);
subscriber.registerStoredProcedureParameter(7, Double.class, ParameterMode.IN);
subscriber.registerStoredProcedureParameter(8, Integer.class, ParameterMode.IN);
subscriber.registerStoredProcedureParameter(9, Integer.class, ParameterMode.IN);
**subscriber.registerStoredProcedureParameter(10, Object[].class, ParameterMode.IN)**;
subscriber.setParameter(1, Integer.valueOf(String.valueOf(payload.getService_id())));
subscriber.setParameter(2, Integer.valueOf(String.valueOf(userDetail.getId())));
subscriber.setParameter(3, String.valueOf(payload.getStart_date()));
subscriber.setParameter(4, String.valueOf(payload.getEnd_date()));
subscriber.setParameter(5, payload.getTotal_price());
subscriber.setParameter(6, 0.00);
subscriber.setParameter(7, payload.getPrice_per_person());
subscriber.setParameter(8, Integer.valueOf(String.valueOf(payload.getStart_station_id())));
subscriber.setParameter(9, Integer.valueOf(String.valueOf(payload.getEnd_station_id())));
**subscriber.setParameter(10, payload.getPassengers().toArray());**
CREATE OR REPLACE FUNCTION "public"."fn_subscriber_to_iservice"("_service_id" int4, "user_id" int4, "_start_date" varchar, "_end_date" varchar, "total_price" float8, "total_month" float8, "price_per_person" float8, "_start_station_id" int4, "_end_station_id" int4, "passengerlist" json)
多谢了。
问题是您将一个数组传递给这里的json
参数:
subscriber.setParameter(10, payload.getPassengers().toArray());
您需要首先将其转换为JSON字符串。假设函数实际上需要乘客ID,那么您可以做的就是下面的操作。
StringBuilder ab = new StringBuilder();
ab.append('{');
for (Passenger p : payload.getPassengers()) {
ab.append(p.getId()).append(',');
}
ab.replace(ab.length()-1, ab.length(), "}");
subscriber.setParameter(10, ab.toString());
并根据ID类型将函数定义的最终参数从“passenerlist”json
更改为“passenerlist”bigint[]
或int[]
。这也将省去从json数组到可以使用的整数ID的痛苦转换。
如果没有将自动类型转换函数从string注册到给定的类型,那么最终这也可能是不起作用的。
问题内容: 我正在尝试绑定准备好的语句参数,该参数是“多维” PostgreSQL数组。这是一个数组示例(列类型为): 如何使用预处理语句绑定类似的值?我试过了: 它没有用: 无法将java.lang.String的实例强制转换为Types.ARRAY 有任何想法吗? 问题答案: 尝试这样的事情(未经测试): 链接: JDBC中的Postgres和多维数组 将数组从Java传递到Postgres
问题内容: 我想在Postgres函数中将表名作为参数传递。我尝试了这段代码: 我得到了这个: 这是我更改为此时遇到的错误: 可能有效,因为如果没有where 得到的部分1,则表示已选定某项。为什么第一个工作和第二个工作不能同时进行?以及如何解决呢? 问题答案: 这可以进一步简化和改进: 使用架构限定名称进行调用(请参见下文): 或者: 要点 使用OUT参数简化功能。您可以直接选择动态SQL的结果
有人能告诉我如何使用将数组参数传递给postgresql函数吗?我尝试了下面的方法,但是得到了错误: 例外 psqlException:无法推断用于[ljava.lang.Integer;]实例的SQL类型。使用带有显式Types值的setObject()来指定要使用的类型。 谢谢
问题内容: 我使用Vlad Mihalcea的库来将SQL数组(在我的情况下为Postgresql)映射到JPA。然后,假设我有一个实体,例如。 适当的SQL是: 使用QueryDSL,我想获取包含所有给定标签的行。原始SQL可能是: (摘自:https : //www.postgresql.org/docs/9.1/static/functions- array.html ) 可以用QueryD
问题内容: 我在MySQL上有两个表,我想知道在MySQL上是否有任何聚合函数,如postgreSQL的array_agg()。 表1的属性只有8条记录表2的记录捕获了该属性,因此对于同一属性,有时可以是1或n次,我得到了这个Qry: 如果我使用GROUP BY部分,则会得到以下信息: 丢失了除users_admin_id的第一个值以外的任何其他数据。我知道我可以通过postgreSQL的arra
问题内容: 我在PostgreSQL类型上使用%%运算符,该运算符将hstore(有效键值类型)转换为元素交替为{{key,value},{key value}}的数组。 当我想返回这些平坦的hstore的数组时,出现此错误:由于PostgreSQL缺乏对数组数组的支持。 从好奇心的角度来看,有人知道为什么不支持这些吗?更重要的是,这种情况是否可以解决? 目前,我将结果串联成一个字符串(用逗号分隔