在java代码中:
CallableStatement cs=null;
int bcode=1;
int dcode=3;
int noftab=3;
String sql2 = "{? = call public.insertdepttables('"+bcode+"','"+dcode+"','"+noftab+"')}";
cs = conn.prepareCall(sql2);
cs.registerOutParameter(1,Types.INTEGER);
rset1=cs.getInt(1);
system.out.println("success="+rest1);
在insertdepttables中:(我的db-postgresql中的函数)
CREATE OR REPLACE FUNCTION public.insertdepttables
(
IN branch_code integer,
IN dept_code integer,
IN no_tables integer
)
RETURNS integer AS
$$
DECLARE
count integer;
begin
IF no_tables>0 THEN
LOOP
insert into t_dept_tables(branch_code,dept_code,table_no)values(branch_code,dept_code,no_tables);
no_tables=no_tables-1;
Count=count+1;
EXIT when no_tables =0;
END LOOP ;
END IF;
RETURN count;
end
$$
实际上我需要在postgresql中的t_dept_tables中插入no_table(即3)次行。我所做的就是我在数据库中编写了函数。我需要从java代码中调用它。所以我在那里使用了callable stmt:
我的输出应该是这样的db:
bcode dcode table_no
1 3 1
1 3 2
1 3 3
现在在执行java代码时, 我得到了结果,
控制台:
success=3
但是在db中没有插入3行,但在我的db中执行该函数时,会插入值。所以我的db函数没有错。请帮我解决这个问题。
答案 0 :(得分:2)
你确定你没有忘记实际调用语句,例如:
cs.executeQuery();
...
cs.close();
顺便说一句,你的任务可以在没有函数的情况下实现,比如(不要使用字符串连接,使用参数值):
String stm = "insert into t_dept_tables(branch_code,dept_code,table_no) values(branch_code,dept_code,no_tables); VALUES(?, ?, ?)";
cs = con.prepareStatement(stm);
cs.setInt(1, id);
cs.setInt(3, id);
cs.setInt(3, id);
rs = cs.executeUpdate();