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行はdbに挿入されませんが、dbで関数を実行しているときに値が挿入されます。私のdb関数に問題はありません。これを整理するのを手伝ってください。

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 に答える