0

在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代码中调用它。所以我在那里使用了可调用的stmt:

我的输出在 db 中应该是这样的:

bcode dcode table_no
1      3     1
1      3     2
1      3     3

现在在执行java代码时,我得到的结果是,

安慰:

success=3

但是在数据库中没有插入 3 行,但是在我的数据库中执行函数时,值被插入。所以我的数据库函数没有错。请帮我解决这个问题。

4

1 回答 1

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();
于 2013-08-26T04:44:46.880 回答