Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新查询多行_Java_Mysql_Sql_Netbeans - Fatal编程技术网

Java 更新查询多行

Java 更新查询多行,java,mysql,sql,netbeans,Java,Mysql,Sql,Netbeans,如何在用户输入数据时在tbpembelian上更新sisastock 示例:用户输入数据120。然后,sisastock更新0,下一行更新80 这是我的表格行: 更新:输入数据用户120将插入tbPenjualan中的stockJual 然后更新tbPembelian 输入120然后更新: 第1行:列stockkeluar=100,sisastock=0 第2行:列stockkeluar=20,sisastock=80 对不起,我的英语不好。您最好在java代码中这样做,但您可以在mysql中使

如何在用户输入数据时在tbpembelian上更新sisastock

示例:用户输入数据120。然后,sisastock更新0,下一行更新80

这是我的表格行:

更新:输入数据用户120将插入tbPenjualan中的stockJual 然后更新tbPembelian

输入120然后更新:

第1行:列stockkeluar=100,sisastock=0 第2行:列stockkeluar=20,sisastock=80
对不起,我的英语不好。

您最好在java代码中这样做,但您可以在mysql中使用包含光标的过程来完成这项工作。比如说

DROP TABLE IF EXISTS T,T1;

CREATE TABLE T(ID INT AUTO_INCREMENT PRIMARY KEY,IDPRD VARCHAR(10), INSTOCK INT);
CREATE TABLE T1(ID INT AUTO_INCREMENT PRIMARY KEY,IDPRD VARCHAR(10), INSTOCK INT);

DROP PROCEDURE IF EXISTS P;
DELIMITER $$
CREATE PROCEDURE P(INPRD VARCHAR(10),INAMT INT)
BEGIN
DECLARE CONT INT DEFAULT 1;
declare finished int default 0;
declare vid int;
declare vidprd varchar(10);
declare vinstock int;
DECLARE cur CURSOR FOR select id,idprd,instock from t where instock > 0 order by id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

SELECT  CASE WHEN SUM(INSTOCK) < INAMT THEN 0 ELSE 1 END INTO CONT FROM T WHERE IDPRD = INPRD GROUP BY IDPRD;

if cont = 1 then
    start transaction;
    insert into t1(idprd,instock) values(inprd,inamt);
    open cur;
    fetch cur into vid,vidprd,vinstock;
    curloop: loop
        if finished = 1 or inamt = 0 then
            leave curloop;
        end if;
        if vinstock >= inamt then
            update t 
                set instock = instock - inamt
                where id = vid and idprd = vidprd;
            set inamt = 0;
         else
            update t
                set instock = 0
                where id = vid and idprd = vidprd;
            set inamt = inamt - vinstock;
        fetch cur into vid,vidprd,vinstock;
       end if;
    end loop curloop;

    commit;

end if;

END $$
DELIMITER :


truncate table t;
INSERT INTO T(IDPRD,INSTOCK) VALUES ('A1',100),('A1',100);

truncate table t1;
CALL P('A1',120);

select 't', t.* from t
union all
select 't1',t1.* from t1;

+----+----+-------+---------+
| t  | ID | IDPRD | INSTOCK |
+----+----+-------+---------+
| t  |  1 | A1    |       0 |
| t  |  2 | A1    |      80 |
| t1 |  1 | A1    |       0 |
+----+----+-------+---------+
3 rows in set (0.00 sec)

您是否可以提供更多详细信息,例如当用户尝试插入120时,您正在编写的插入查询,以及此查询中的120是什么case@Eshu:我更新我的问题。对不起,我的英语不清楚这里的逻辑是什么。我的猜测是,tbPembelian表为idprd提供了tbPenjualan表,并将sisastock值按idbell顺序减少为用户输入量的值。对吗?@P.Salmon是的。如果我的用户需要,这是一个简单的代码,但我的用户不想在一个产品中多次输入库存。。呵呵,您可以通过添加您想要做的事情背后的逻辑,以及作为文本的示例数据、预期输出和表定义来改进这个问题。