【发布时间】:2017-09-06 18:22:36
【问题描述】:
我的 PostgreSQL 数据库中有这个功能。
create or replace function borrowaCar(integer,integer,date) returns boolean language 'plpgsql' as'
declare
borrow boolean;
begin
if exists(select * from availableCars where id=$2)then
insert into Borrows (car_id_car, person_id_person, borrow_date, return_date) values ($2,$1,$3, NULL);
update Car set is_borrow=true where id_car=$2;
return true;
end if;
return false;
end;
';
当我构建查询时,我想在 YYYY-MM-DD 中添加实际日期,例如 2017-09-06。我写了这段代码:
Query query = entityManager.createNativeQuery("SELECT borrowaCar(?,?,?)");
query.setParameter(1, idPerson);
query.setParameter(2, idCar);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
query.setParameter(3, sdf.format(date));
但是这个解决方案返回错误:
org.postgresql.util.PSQLException: 错误: function borrowacar(integer, 整数,字符变化)不存在 Wskazówka:没有功能 匹配给定的名称和参数类型。您可能需要添加 显式类型转换。
有什么问题?
【问题讨论】:
-
sdf.format 返回一个字符串
-
是的,我猜。如何纠正这个问题?
-
如果borrow_date的类型是日期,那么不要使用sdf.format,直接取日期。如果类型是 charvar,则将函数签名从 int,int,date 更改为 int,int,String
-
好的,但是我表中的字段是日期类型。
-
所以试试 query.setParameter(3, date);
标签: java postgresql jpa