java由mysql触发器运行,mysql中触发器的创建

本文目录一览:

关于mysql中的触发器能调用JAVA吗的搜索推荐

肯定不可以,mysql不能调用java代码,但是可以在java中创建触发器

1.使用SQL创建触发器

DELIMITER $$CREATE TRIGGER `catefiles_trigger` AFTER INSERT ON `catefiles` FOR EACH ROWbegin 

declare num1 int; set num1 = (select num from est_client_catescan_status where cateid=new.cateId and taskid=new.taskId and clientid=new.clientId); if(num1=0) then update catescan_status set num=num1+1 where cateid=new.cateId and taskid=new.taskId and clientid=new.clientId; else insert catescan_status(cateid,num,status,taskid,clientid) values(new.cateId,1,0,new.taskid,new.clientId); end if; end$$

2.在Java程序里创建触发器

String sql=+” CREATE TRIGGER catefiles_trigger AFTER INSERT ON catefiles FOR EACH ROW”

+” begin”

+” declare scannum int;”

+” set scannum = (select num from est_client_catescan_status where” 

+” cateid=new.cateId and taskid=new.taskId and clientid=new.clientId);”

+” if(scannum=0) then”

+” update catescan_status set num=scannum+1  where cateid=new.cateId and taskid=new.taskId and clientid=new.clientId;”

+” else” 

+” insert catescan_status(cateid,num,status,taskid,clientid) values(new.cateId,1,0,new.taskid,new.clientId);”

+” end if;”

+” end”;

Connection con = DbConnectionManager.getConnection();

PreparedStatement  pstmt = con.prepareStatement(sql);

pstmt.execute();

3.可以看出区别:在java中创建触发器,不需要限定符DELIMITER ,加上的话执行过程中会报MySQL语法错误

java如何调用MySQL的触发器

触发器顾名思意就是在某个动作执行时自动触发执行的,不用调用,比如你是在add和delete数据时加触发器,只要你定义的对,数据库在向你指定的那张表add和delete数据时,该触发器就会自动触发

java中怎么创建mysql的触发器

2.在Java程序里创建触发器

String sql=+” CREATE TRIGGER catefiles_trigger AFTER INSERT ON catefiles FOR EACH ROW”

+” begin”

+” declare scannum int;”

+” set scannum = (select num from est_client_catescan_status where”

+” cateid=new.cateId and taskid=new.taskId and clientid=new.clientId);”

+” if(scannum=0) then”

+” update catescan_status set num=scannum+1 where cateid=new.cateId and taskid=new.taskId and clientid=new.clientId;”

+” else”

+” insert catescan_status(cateid,num,status,taskid,clientid) values(new.cateId,1,0,new.taskid,new.clientId);”

+” end if;”

+” end”;

Connection con = DbConnectionManager.getConnection();

PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.execute();

mysql触发器

触发器只有经事件触发后才能执行,上面对时间的判断在触发器里面,没有事件触发是不会运行的,这种情况一般利用mysql的事务调度器(event scheduler)和存储过程比较容易实现。具体如下:

事务调度器

CREATE EVENT `del_lclass_tbl ` ON SCHEDULE EVERY 1 DAY STARTS ‘2009-05-11 01:00:00’ ON COMPLETION NOT PRESERVE ENABLE DO call sp_delete_lclass_tbl(null);

存储过程

delimiter $

drop procedure if exists sp_delete_lclass_tbl;$

create procedure sp_delete_lclass_tbl()

begin

delete from lclass_tbl where lClass_nStatus in (1,3)

and lClass_nExecuteID in (select PPI_NID from planpracticeitem_tbl where ppi_sApplicationEndDate now());

end;$

delimiter ;

mysql触发器原生支持调用外部程序么

mysql 通过函数执本地命令、外部程序

昨天接到一个需求,要求在mysql的触发器中执行一个外部程序。

一开始没有什么头绪,后来发现嘿嘿。

id=211

有个叫mysqludf的一个东西,用起来还不错。

不过这个东西仅仅在linux下试了试,效果还行。

步骤如下:

一、解压附件的压缩包之后

如果不想自己编译的话,把lib_mysqludf_sys.so文件放到 mysql的lib/mysql/plugin/

目录下。

二、执行chcon -t texrel_shlib_t mysql/lib/mysql/plugin/lib_mysqludf_sys.so

三、创建函数

DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;

DROP FUNCTION IF EXISTS sys_get;

DROP FUNCTION IF EXISTS sys_set;

DROP FUNCTION IF EXISTS sys_exec;

DROP FUNCTION IF EXISTS sys_eval;

CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME ‘lib_mysqludf_sys.so’;

CREATE FUNCTION sys_get RETURNS string SONAME ‘lib_mysqludf_sys.so’;

CREATE FUNCTION sys_set RETURNS int SONAME ‘lib_mysqludf_sys.so’;

CREATE FUNCTION sys_exec RETURNS int SONAME ‘lib_mysqludf_sys.so’;

CREATE FUNCTION sys_eval RETURNS string SONAME ‘lib_mysqludf_sys.so’;

四、测试

1、准备sh文件

在linux系统中执行下面的命令

su mysql

mkdir /mysqlUDFtest

cd mysqlUDFtest

vi test.sh

#/bin/sh

date testlog.txt

chmod +x ./test.sh

2、准备数据库表和触发器

选择一个数据库执行如下命令:

CREATE TABLE test1(a1 INT) type=InnoDB;

CREATE TABLE test2(a2 INT) type=InnoDB;

CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY) type=InnoDB;

CREATE TABLE test4(

a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

b4 INT DEFAULT 0

) type=InnoDB;

DELIMITER |

DROP TRIGGER /*!50032 IF EXISTS */ `test`.`testref`|

create trigger `test`.`testref` BEFORE INSERT on `test`.`test1`

for each row BEGIN

DECLARE done INT DEFAULT 999;

INSERT INTO test2 SET a2 = NEW.a1;

DELETE FROM test3 WHERE a3 = NEW.a1;

UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;

set done = sys_exec(“/mysqlUDFtest/test.sh”);

IF done != 0 then

INSERT INTO `$amp;amp ;$gt;22.t3`=”” (a,b); end=”” if;END;

|

Mysql触发器可以调用Java或者js程序吗

调用js就有点复杂了

调用java用轮循的方式,java循环去查数据库,根据相应的规则执行java代码

原创文章,作者:RKKK,如若转载,请注明出处:https://www.506064.com/n/139903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
RKKKRKKK
上一篇 2024-10-04 00:23
下一篇 2024-10-04 00:23

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • 如何修改mysql的端口号

    本文将介绍如何修改mysql的端口号,方便开发者根据实际需求配置对应端口号。 一、为什么需要修改mysql端口号 默认情况下,mysql使用的端口号是3306。在某些情况下,我们需…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29

发表回复

登录后才能评论