SQL触发器DELETE的使用方法

我的情况是这样的
有A,B两张表,B中fcode,fqty,fitemid,fbillno的内容(筛选条件为fbillno的值为CPRK)是引用自A表的,现在我想做一个触发器,当A表中出现两个相同的fcode时(出现相同fcode时,fbillno必不相同,值为CPRK或XSCK),把B表中那条重复fcode的得行删除...
新手求解....
举例:
A表

rowid fcode fqty fitemid fbillno

1       10102        20            10        CPRK01
2       10103        10            13        CPRK02
3       10102        20            10        XSCK01

B表
rowid fcode fqty fitemid fbillno

1       10102        20            10        CPRK01
2       10103        10            13        CPRK02

现在想用触发器实现的功效就是当出现A表第三行这种情况时,B表第一行能自动删除

1个回答

MySQL触发器(TRIGGER)用法介绍 http://www.data.5helpyou.com/article381.html

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
题目十: 仓库(编号,保管员编号,面积) 保管员(编号,姓名,年龄,电话、月薪) 商品(编号,品名,仓库编号、数量,单价) 建立仓库的delete 触发器,只有当此仓库没有商品时才可删除。 求大神写详细的SQL语句
题目十: 仓库(编号,保管员编号,面积) 保管员(编号,姓名,年龄,电话、月薪) 商品(编号,品名,仓库编号、数量,单价) 建立仓库的delete 触发器,只有当此仓库没有商品时才可删除。 求大神写详细的SQL语句,实在没有思路如何删除空仓库
ORACLE创建触发器的问题
下面是在SQLSERVER中创建的触发器 CREATE TRIGGER [dbo].[TRI_CUP_UPDATE_DEL] ON [dbo].[cup] AFTER UPDATE,DELETE AS BEGIN declare @name1 varchar(1000) declare @name2 varchar(1000) select @name1=MARK from deleted select @name2=MARK from inserted if(@name1=@name2 or (@name2 is null and @name1 is not null)) begin update cup set mark='0' where id in (SELECT id FROM DELETED) end END 比如:当前表cup的某条记录被更新或者删除时(此条记录的id为1,id不是主键,也没有唯一约束),本表id为1 的所有记录的mark字段的值都变为0; 问题: 在oracle中怎么创建一个触发器,实现同样的功能。 谢谢各位大佬!
关于oracle触发器操作的疑问
<div class="iteye-blog-content-contain" style="font-size: 14px;"> <p> 首先说明我要实现的功能:假设A表和B表,我想实现,在增加A表的同时,利用刚刚插入的数据和A表中已有的数据(包括刚刚插入的数据)进行如数据编码(code)组合,生成一个新的字符串插入到B表中的编码列;</p> <p>我使用的Oracle客户端是PL/SQL devloper 8,</p> <p>我现在想到的方案:</p> <p>方案1:使用行触发器,在插入的时候使用new获取刚刚插入的数据,这样跟之前已经有的数据组合,但是这样当插入两条或多条的时候,会出现下一条总是无法和刚刚插入的数据组合,也就是不能发现同一批插入的数据;(按道理,两个SQL语句应该是两个事务,应该能使用刚刚插入的数据,这是第一个疑问,是不是客户端造成的,我的客户端设置是自动提交SQL,不应该有问题)</p> <p>方案2:在第一种方案不能满足需求,我寻求了第二种方案,就是建立一个全局临时表,然后使用行触发器把新插入的数据放到临时表中,再最后做一次语句触发器,在语句级触发器中使用游标遍历临时表记录,跟已经存在的数据进行组合,插入到B表中;(疑问2:在插入多条数据的时候,比如两个insert语句,行触发器在临时表新增一条数据,然后触发了一次语句级触发器,然后行触发器在临时表又新增一条数据,然后又触发了一次语句级触发器,跟我预想的应该是两次行触发器,一次最终语句级触发不一样,不知道是不是我理解的不对;按照我的理解,两个insert语句应该是两个事务,这样临时表只会保留一条记录,但是目前确实是多条;如果两条insert在一个事务内,为什么又多次触发语句级触发器?);目前解决方法就是在语句触发器最后增加一条删除临时表数据,这样保证临时表始终是最新插入的数据。代码如下:</p> <p> </p> <pre name="code" class="sql"> CREATE TABLE A   ( id number, name varchar2(30), birthdate date   ) ;</pre> <p> </p> <pre name="code" class="java">-- B表 CREATE TABLE B   ( id number, name varchar2(30), birthdate date   ) ;</pre> <p> </p> <pre name="code" class="java">-- 创建临时表 a_tt,存储刚刚插入的数据 CREATE global temporary TABLE a_tt   (id number, name varchar2(30), birthdate date   ) ON COMMIT DELETE ROWS;</pre> <pre name="code" class="java"> --A表的行触发器记录新插入的数据 create or replace trigger a_insert_row AFTER insert on A for each row declare begin insert into <span style="font-size: 1em; line-height: 1.5;">a_tt</span><span style="font-size: 1em; line-height: 1.5;">(id,name,birthdate) values(:new.id,:new.name,:new.birthdate);</span> end; </pre> <p> </p> <pre name="code" class="java"> create or replace trigger aaaa_insert_tt AFTER insert on A declare v_name aaaa_log.name%type; cursor n_cur is select name from <span style="font-size: 1em; line-height: 1.5;">a_tt</span><span style="font-size: 1em; line-height: 1.5;">;</span> begin dbms_output.put_line('语句触发器执行'); for cur in n_cur loop dbms_output.put_line( cur.name); insert into B(name) select cur.name ||'_' ||name from A; end loop; -- delete from <span style="font-size: 1em; line-height: 1.5;">a_tt</span><span style="font-size: 1em; line-height: 1.5;">; --删除临时表过时数据 </span> end;</pre> <p> 测试语句:</p> <p> insert  into A  values(2,'a',sysdate);         </p> <p>insert  into A values(3,'b',sysdate);</p> <p> </p> <p>预期结果:B表中name 列 2_2,3_2,3_3</p> <p> </p> <p>希望各位大神,帮我理理思路,不知道我说清没有</p> <p>触发器执行的时候是不是在行触发器(after)之后提交数据,在语句级触发器就可以使用提交后的数据</p> <p> </p> </div>
Oracle触发器能否对正在写入的表格进行读写?
###问题背景 本来是想要在删除一个表的某个数据的同时将其余数据的id修正为连续的(因为删除某个数据可能导致id出现间断) </br></br> ###问题所在 触发器是正常地生成了,没有编译错误,但是删除数据的时候却报错了,报错如下图所示: </br></br> ![图片说明](https://img-ask.csdn.net/upload/201911/25/1574686770_801451.png) </br></br> 点进去一看,原来定义游标的时候就已经错了。。。</br></br> ![图片说明](https://img-ask.csdn.net/upload/201911/25/1574686863_528478.png) </br></br> ###问题代码 ```sql create or replace trigger trigger_when_del_guide after delete on test_guide for each row declare v_type varchar2(2);--id转化为字符串所需要拼接的前缀(''、'0'、'00') v_next numeric(3, 0);--下一个id的number值 cursor cur_all_guide_id--游标遍历所有剩余id is select guide_id from test_guide order by guide_id; id_i test_guide.guide_id%type;--游标循环变量id_i begin open cur_all_guide_id; fetch cur_all_guide_id into id_i; while cur_all_guide_id%found loop v_next := cur_all_guide_id%rowcount; case length(v_next) when 1 then v_type := '00'; when 2 then v_type := '0'; else v_type := ''; end case; update test_guide set guide_id=v_type||v_next where guide_id=id_i; end loop; end; ``` ###尝试解决 到网上找了很久,但是基本上就只能得到下面这条信息 * 不能对正在进行写入操作的表进行读写。 ###最终问题 到底有没有什么可行的办法,能够实现我想实现的这个操作?想听听大家的看法(From一个在校学Oracle的菜鸟) 在删除某记录后修改其他全部记录(不重新生成第二张表,除非是能在触发器执行时删除、触发器执行完毕后自动销毁的临时表)
Sql Server 触发器变量赋值不成功,求大神帮忙看看!!
![图片说明](https://img-ask.csdn.net/upload/201707/28/1501249642_360347.png) ![图片说明](https://img-ask.csdn.net/upload/201707/28/1501249665_430948.png) ![图片说明](https://img-ask.csdn.net/upload/201707/28/1501249676_604135.png) ![图片说明](https://img-ask.csdn.net/upload/201707/28/1501249688_879767.png) 触发器代码: CREATE TRIGGER [dbo].[job] ON [dbo].[Students] AFTER INSERT, UPDATE, DELETE AS BEGIN declare @c int, @b varchar; select @c = MajorID from inserted; select @b = Majors.Name from Majors inner join inserted On Majors.ID = inserted.MajorID; PRINT @b; PRINT @c; PRINT 'sdjkashdkasjhdka'; INSERT INTO tuchu(ID,NAME,Age,City,MajorID) VALUES(1,'张三',16,@b,11) END 原意是想通过Students这个表的触发器,触发时插入sql,在tuchu这个表的City字段,通过第三张表Majobs,插入变量@b(希望是'美学'这个字符串),之前成功过,不知道问题出在哪,怎么试都不行了..学习阶段..求大神开导!!!!
Gp数据库中 non-SELECT statement问题(在GP数据库创建触发器之后发现的)
业务需要,GP库中创建触发器 目的是在某表做插入操作的时候,更新另一张表的数据 sql如下: ``` -- 触发器需要的函数 CREATE or replace FUNCTION fn_dept_info_prod_to_emg () RETURNS TRIGGER AS $BODY$ BEGIN delete from emg.tmp_dept_info; insert into emg.tmp_dept_info select * from t08_dept_info; return null; END; $BODY$ LANGUAGE plpgsql; --触发器 CREATE TRIGGER i_dept_info_prod_to_emg AFTER INSERT ON t08_dept_info FOR STATEMENT EXECUTE PROCEDURE fn_dept_info_prod_to_emg () ``` 创建完成之后,我去`t08_dept_info` 表中做insert操作,报错如下: ``` INSERT INTO t08_dept_info ( deptid, dept_name ) VALUES ( 570, '测试' ) > ERROR: function cannot execute on segment because it issues a non-SELECT statement (seg4 101.156.96.89:40001 pid=2820) DETAIL: SQL statement "delete from emg.tmp_dept_info" PL/pgSQL function "fn_dept_info_prod_to_emg" line 3 at SQL statement > 时间: 0.019s ``` 上述操作在postgre数据库试过,没出错,GP库就遇到了这个问题 各种搜索之后没找到答案,希望您能帮我解答... 补充: 我的GP版本是PostgreSQL 8.3.23 (Greenplum Database 5.10.2 postgre版本是PostgreSQL 9.1.24, 可能是因为GP库版本太低不支持把...
关于限制行更新的触发器问题
数据库表比较多,并且有些是比较重要的表,不能随便更新和删除,因此想到在所有的表中建触发器,更新或者删除行数达到限制的时候就不允许操作。 单个表是没有问题的,由于表太多就用游标写了个循环执行,结果报错了,请大神给看一下? SQL如下: declare @TableName varchar(50) Declare Cur Cursor For select name from sysobjects where xtype = 'u' declare @SQL Varchar(2000) Open Cur Fetch Cur Into @TableName --记录Table While @@FETCH_STATUS=0 BEGIN SET @SQL = ' CREATE TRIGGER ' +@TableName+'_LIMIT_ ON '+@TableName+' FOR UPDATE,DELETE AS if ORIGINAL_LOGIN()in ("sa","729467") and (select count(*) from deleted)> 50 BEGIN RAISERROR ( "不允许超量的表更新,请联系DBA",16,1) ROLLBACK TRANSACTION RETURN END GO' Exec(@sql) End Close Cur Deallocate cur; 报错信息如下: 消息 102,级别 15,状态 1,过程 RM_CHECK_ITEMNEW_LIMIT_,第 7 行 '不允许超量的表更新,请联系DBA' 附近有语法错误。 消息 102,级别 15,状态 1,过程 RM_CHECK_ITEMNEW_LIMIT_,第 11 行 'GO' 附近有语法错误。 错误一直循环了好多,执行完数据库自己就断开连接了
删除触发器里加一个更新操作,出现错误
表说明:会员表 HX_USER 主键 会员编号 U_ID U_NAME(会员名)    报名表 hx_huodonguser 包含字段 U_ID (会员ID) HD_ID (活动ID)    活动表 HX_HUODONG  包含字段 HD_ID (活动ID)HD_NAME(活动名)HD_NUMPOST(报名人数) 目的:如上表,我想在删除一个会员的时候,同时删除这个会员在报名表中的记录,并将活动表中这个会员所报名的活动,它所对应的报名人数减去1. 代码:   create trigger [dbo].[tri_user_delete]   on [dbo].[HX_USER]   for delete   as   begin     delete hx_huodonguser     from hx_huodonguser h,deleted d     where h.U_ID = d.U_ID     UPDATE HX_HUODONG set HD_NUMPOST = HD_NUMPOST-1 where HD_ID IN (select HD_ID FROM hx_huodonguser where U_ID = d.U_ID)   end 报错: 无法绑定由多个部分组成的标识符 "d.U_ID" 问题:请问怎么写,让编译器知道,我要更新的报名记录?
修改触发器 将删除后再插入 改成修改 大神求救
USE [IBR_App_HR] GO /****** Object: Trigger [dbo].[Trigger_SA_Employee] Script Date: 09/18/2014 10:47:23 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER trigger [dbo].[Trigger_SA_Employee] on [dbo].[HR_HM_Employee] for insert,update,delete as if exists (select A.Id,A.Name,A.CompanyCode,A.Code,A.EntryTime,A.DimissionTime from inserted A,deleted b where A.Id = B.Id) begin if exists (select dbo.HR_SA_Employee.Id from dbo.HR_SA_Employee,inserted where dbo.HR_SA_Employee.Id = inserted.Id) delete dbo.HR_SA_Employee from dbo.HR_SA_Employee,inserted where dbo.HR_SA_Employee.Id = inserted.Id; insert into dbo.HR_SA_Employee (Id,Name,CompanyCode,Code,EntryTime,DimissionTime,Remark,Status) (select Id, Name,CompanyCode,Code,EntryTime,DimissionTime as DimissionTime,'Modify',Status from inserted) end else begin if exists (select Id from inserted) begin insert into dbo.HR_SA_Employee (Id,Name,CompanyCode,Code,EntryTime,DimissionTime,Remark,Status) (select Id, Name,CompanyCode,Code,EntryTime,DimissionTime ,'Insert',Status from inserted); end else begin update dbo.HR_SA_Employee set Remark = 'Delete' from dbo.HR_SA_Employee,deleted where dbo.HR_SA_Employee.id = deleted.id; end end 有两个表 HR_HM_Employee 这个是员工表 HR_SA_Employee 这个是薪资表 我需要员工表里面的Id,Name,CompanyCode,Code,EntryTime,DimissionTime,Remark,Status 这些字段修改后 HR_SA_Employee 这个薪资表里面的这些字段也修改 现在的触发器是 删掉薪资表里面的数据 再插入一条 我现在是要修改 不是删除后再插入 大神求救啊
SQL死机会不会因为这个触发器引起的?
ALTER TRIGGER [dbo].[salefpclear] ON [dbo].[ICTSale] AFTER DELETE AS BEGIN SET NOCOUNT ON; DECLARE @fid int declare tab cursor for select fid from deleted open tab fetch next from tab into @fid while @@FETCH_STATUS=0 update icsaleentry set FEntrySelfI0567=0,FEntrySelfI0468=0 from icsaleentry t1 inner join [dbo].[ICTSaleEntry] t2 on t1.FInterID=t2.fid_src and t1.FEntryID=t2.FEntryID_Src and t1.FItemID=t2.FItemID where t2.fid=@fid FETCH NEXT FROM tab into @fid end close tab deallocate tab
在ORACLE上定义触发器,但是似乎无效,求大神解答
在oracle sql developer中定义了一个触发器,记录下每个用户对数据库的表进行数据操纵的次数 首先创建了一个audit_table表(user_name,table_name,del,ins,upd) 在表中插入一个元组:"user1","student",0,0,0; 然后定义了触发器: create or replace trigger audit_student after delete or insert or update on student for each row begin if deleting then update audit_table set del=del+1 where user_name=user and table_name='student'; elsif inserting then update audit_table set ins=ins+1 where user_name=user and table_name='student'; else update audit_table set upd=upd+1 where user_name=user and table_name='student'; end if; end; 接下来我用用户user1对student表进行增删改操作后(已经给user1赋予了对表student的所有权限),查看audit_table表内并无变化 ![图片说明](https://img-ask.csdn.net/upload/201704/19/1492596334_342864.png) ![图片说明](https://img-ask.csdn.net/upload/201704/19/1492596365_194956.png) 想问下,各位大神,这是为什么
链接服务器的 OLE DB 访问接口 "DB2OLEDB" 不支持所需的事务接口?
最近在跑一个实验,在SQLSERVER中test表创建了一个触发器,当对该表进行操作时,对远程链接的db2中test执行相同的操作(主要就是select,delete,update)。使用了Microsoft OLE DB Provider for DB2创建好了链接服务器,触发器创建完毕,结果执行操作是提示--链接服务器 "SAMPLE" 的 OLE DB 访问接口 "DB2OLEDB" 不支持所需的事务接口。不知道是怎么回事?请求大神指导!!!感谢!
数据库触发器怎么指定数据库创建
CREATE TRIGGER trigger_name ON table_name [WITH ENCRYPTION] FOR [DELETE, INSERT, UPDATE] AS T-SQL语句 GO 这段语法怎么知道为哪个数据库创建呢? 比如系统中有A数据库,B数据库,都有table_name这张表,我哪知道为哪个数据库创建啊。
Sql2008 表数据删除咨询
Sql2008 有个单据表,数据正常保存,但是不定期会丢失一些数据记录, 有没有什么办法能监视到数据删除的操作原因。 现在已经写了一个Delete 触发器。能控制表不能删除,但是不方便,我正常的单据删除都无法进行。
在mysql5.7中实现级联删除,即删除主表中信息的同时删除参照表中对应记录,求大神指导
参照表中设置了级联删除和级联更新但是没有实现。。 上网搜索后用触发器如下 ``` CREATE TRIGGER deleUser_trigger BEFORE DELETE ON users FOR EACH ROW BEGIN DELETE FROM stuinfo WHERE stu_id=old.id; END; ``` 然后。。。报错 ``` You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4 ``` mysql版本5.7 不知道该怎么解决,新手求指导 (另外这一过程也可以在java中实现,但觉得在数据库中实现更好些,所以想在问一下,这两种实现方式有哪些区别吗,是减少java中代码量吗)
SQL server 2008如何在datediff函数增加一个计算条件
如题,我现在有个存储过程,这个存储过程是用来计算当table4插入的记录的时间差(用的是datediff函数),存储过程的执行是靠table4中的触发器来触发执行的,触发器的执行条件是(当table4中每当machine-statu字段s有非0记录数据插入,且下一条记录machine-status字段是为0的时候,则执行该存储过程) 触发器代码: ALTER trigger [dbo].[trigger4_2] on [dbo].[table4] after insert,update,delete as declare @insertCount int declare @deleteCount int declare @t4Id bigint begin -- 删除数量 select @deleteCount=COUNT(1) from deleted; -- 新增数量 select @insertCount=COUNT(1) from inserted; if (@insertCount=1 and @deleteCount=0) -- 插入动作 begin select @t4Id=id from inserted; if exists (select * from table4 where id = @t4Id and machine_status = 0) exec sp_table5_insert @t4Id; end 目前存储过程的计算代码是这样: ALTER proc [dbo].[sp_table5_insert] @_T4ID BIGINT -- machine-status=0的自增id as BEGIN -- 上一条错误代码记录id DECLARE @_T4ErrorCodeID BIGINT -- 分钟时差 DECLARE @_timeDifferenceMin INT --时间段变量 DECLARE @shi int set @shi=Datename(HOUR,GetDate()) --星期段变量 DECLARE @xingqi nvarchar(255) set datefirst 1 set @xingqi=Datename(WEEKDAY,GETDATE()) -- 开始时间 DECLARE @_machineItime VARCHAR(50) -- 获取上一条错误代码记录id并且计算以分钟为单位的时差 SELECT TOP 1 @_T4ErrorCodeID = id, @_timeDifferenceMin = DATEDIFF(SS,ng_itime,(SELECT machine_itime FROM table4 WHERE id = @_T4ID)) FROM table4 WHERE id < @_T4ID AND location IS NOT NULL AND pointer IS NOT NULL AND ng_itime IS NOT NULL ORDER BY id DESC; --判断时间,星期三早8点到星期三晚8点 set datefirst 1 set @xingqi=Datename(WEEKDAY,GETDATE()) if(@xingqi='星期三') and (@shi>8 and @shi<20) begin --对T5表操作存在类型累加时间不存在新增 IF EXISTS (SELECT * FROM table5 AS t5 LEFT JOIN table4 AS t4 ON t4.location=t5.location AND t4.pointer=t5.pointer WHERE t4.id=@_T4ErrorCodeID) --修改 UPDATE table5 SET [Wedtime_8:00AM-8:00PM] = ISNULL([Wedtime_8:00AM-8:00PM] ,0) + @_timeDifferenceMin FROM table5 AS t5, table4 AS t4 WHERE t4.location=t5.location AND t4.pointer=t5.pointer AND t4.id=@_T4ErrorCodeID; ELSE --插入 INSERT INTO table5(location,pointer,[Wedtime_8:00AM-8:00PM]) SELECT location,pointer,@_timeDifferenceMin FROM table4 WHERE id = @_T4ErrorCodeID; END 由此可见,我的存储过程计算时间差是根据table4插入记录出现的先后顺序来配对计算的,但是现在发现,这样计算出来的结果有问题,详细的异常问题解释可到我另一个问答中查看,https://ask.csdn.net/questions/691300(在一个热心导师的回复下知道了问题所在) 重点不是这个,因为现在找出问题所在了。 现在我在table4中新加了一个字段used,并且设置了它的默认值为0,我想在datediff函数计算时间差的同时,加上一个used = 0 的条件,意思是计算的两条记录还要符合used = 0 才开始计算这两条记录的时间差, 当计算完后,并把计算的两条记录的时间差结果赋值到table5中,并且同时把这条记录的used = 0值更新为used= 1,表示已经计算过了 这么做的目的是,想给计算的两条记录建立一个配对关系,这样好让程序知道计算并赋值 附上我的table4,table5表结构 table4: ![图片说明](https://img-ask.csdn.net/upload/201806/11/1528684135_418523.jpg) table5: ![图片说明](https://img-ask.csdn.net/upload/201806/11/1528684145_747174.jpg) 可是不知道该怎么编写这个条件语句和更新语句,本人小白一枚,刚从学校出来实习,项目一个人做,没人带,本来这个礼拜就要测试项目,可是现在出了这个问题,根本就测试不了,求CSDN内的各位SQL server大佬和专家帮我写下这个语句代码,留下我的QQ:584958184,还有哪里不清楚可以跟我说,我可以再解释,现在真的很急,跪求跪求帮助啊~!!!
Jdbc连接数据库Column 'EmployeeId' cannot be null
一直出现以下错误:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'EmployeeId' cannot be null ![图片说明](https://img-ask.csdn.net/upload/201801/04/1515057353_712815.png) 因为题目要求主键自增,类型是varchar,所以我用了触发器进行自增 begin set new.employeeid=concat('E',lpad(((select substring(employeeid,2,3) from epoint_employee where employeeid=(select employeeid from epoint_employee order by employeeid desc limit 1))+1),3,0)); end 以下是java代码: Test Employee EmployeeImpl import java.sql.SQLException; public class Test { public static void main(String[] args) throws SQLException { // TODO Auto-generated method stub EmployeeImpl ei=new EmployeeImpl(); System.out.println(ei.save("E001", "123", "SWEET", 22, 4325)); // System.out.println(ei.save("E002", "321", "TINA", 21, 4000)); // System.out.println(ei.save("E003", "111", "JACK", 21, 4000)); // System.out.println(ei.save("E004", "222", "MARK", 21, 4000)); // System.out.println(ei.save("E005", "123", "NICK", 22, 4325)); // System.out.println(ei.delete("004")); // System.out.println(ei.update("001", "22222", "ZS", 22, 4325)); // ei.find("001"); } } import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class EmployeeImpl implements Employee { public static String driver = "com.mysql.jdbc.Driver"; public static String url = "jdbc:mysql://localhost:3306/epoint?characterEncoding=utf8&useSSL=true"; public static String user = "sa"; public static String pwd = "11111"; public String EmployeeId;// 员工账号 public String Password; // 员工密码 public String Name; // 姓名 public int Age; // 年龄 public double Salary; // 工资 public Connection getConnection() { Connection con = null; try { Class.forName(driver); con = DriverManager.getConnection(url, user, pwd); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return con; } public boolean save(String employeeid, String password, String name, int age, double salary){ Connection con = new EmployeeImpl().getConnection(); PreparedStatement pst=null; // boolean b=true; try { pst=con.prepareStatement("insert into Epoint_EMPLOYEE(EmployeeId,Password,Name,Age,Salary) values(?,?,?,?,?)");//?: 占位符 //占位符有几个就写几个,否则会报错 pst.setString(1, employeeid); pst.setString(2, password); pst.setString(3, name); pst.setInt(4, age); pst.setDouble(5, salary); // b=pst.execute();//返回Boolean类型,false表示执行CUD语句,true为R int i=pst.executeUpdate();//返回受影响的行数 System.out.println(i); // System.out.println(pst.getUpdateCount());//打印了几行 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } public boolean update(String employeeid, String password, String name, int age, double salary){ Connection con = new EmployeeImpl().getConnection(); PreparedStatement pst=null; boolean b=true; try { pst=con.prepareStatement("update Epoint_EMPLOYEE set password=? where employeeid=?");//?: 占位符 //占位符有几个就写几个,否则会报错 pst.setString(1, password); pst.setString(2, employeeid); b=pst.execute();//返回Boolean类型,false表示执行CUD语句,true为R // int i=pst.executeUpdate();//返回受影响的行数 // System.out.println(i); // System.out.println(pst.getUpdateCount());//打印了几行 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } public boolean delete(String employeeid) { Connection con = new EmployeeImpl().getConnection(); PreparedStatement pst=null; boolean b=true; try { pst=con.prepareStatement("delete from Epoint_EMPLOYEE where employeeid=?"); //占位符有几个就写几个,否则会报错 pst.setString(1, employeeid); b=pst.execute();//返回Boolean类型,false表示执行CUD语句,true为R // int i=pst.executeUpdate();//返回受影响的行数 // System.out.println(i); // System.out.println(pst.getUpdateCount());//打印了几行 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } public void find(String employeeid){ Connection con = new EmployeeImpl().getConnection(); ResultSet rs = null; PreparedStatement pst=null; try { pst=con.prepareStatement("select * from Epoint_EMPLOYEE where employeeid=?"); //占位符有几个就写几个,否则会报错 pst.setString(1, employeeid); rs = pst.executeQuery(); while (rs.next()) { System.out.println(rs.getString(1)); System.out.println(rs.getString(2)); System.out.println(rs.getString(3)); System.out.println(rs.getInt(4)); System.out.println(rs.getDouble(5)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (rs != null && !rs.isClosed()) { rs.close(); } if (pst != null && !pst.isClosed()) { pst.close(); } if (con != null && !con.isClosed()) { con.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } import java.sql.SQLException; public interface Employee { public boolean save(String employeeid, String password,String name, int age, double salary); public boolean update(String employeeid, String password,String name, int age, double salary); public boolean delete(String employeeid); public void find (String employeeid); }
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
python学习方法总结(内附python全套学习资料)
不要再问我python好不好学了 我之前做过半年少儿编程老师,一个小学四年级的小孩子都能在我的教学下独立完成python游戏,植物大战僵尸简单版,如果要肯花时间,接下来的网络开发也不是问题,人工智能也可以学个调包也没啥问题。。。。。所以python真的是想学就一定能学会的!!!! --------------------华丽的分割线-------------------------------- ...
python 简易微信实现(注册登录+数据库存储+聊天+GUI+文件传输)
socket+tkinter详解+简易微信实现 历经多天的努力,查阅了许多大佬的博客后终于实现了一个简易的微信O(∩_∩)O~~ 简易数据库的实现 使用pands+CSV实现数据库框架搭建 import socket import threading from pandas import * import pymysql import csv # 创建DataFrame对象 # 存储用户数据的表(...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
Python实例大全(基于Python3.7.4)
博客说明: 这是自己写的有关python语言的一篇综合博客。 只作为知识广度和编程技巧学习,不过于追究学习深度,点到即止、会用即可。 主要是基础语句,如三大控制语句(顺序、分支、循环),随机数的生成,数据类型的区分和使用; 也会涉及常用的算法和数据结构,以及面试题相关经验; 主体部分是针对python的数据挖掘和数据分析,主要先攻爬虫方向:正则表达式匹配,常用数据清洗办法,scrapy及其他爬虫框架,数据存储方式及其实现; 最后还会粗略涉及人工智能领域,玩转大数据与云计算、进行相关的预测和分析。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
JavaScript 为什么能活到现在?
作者 | 司徒正美 责编 |郭芮 出品 | CSDN(ID:CSDNnews) JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用JavaScript的选项。甚至在jQuery时代有人问出这样的问题,jQuery与JavaScript哪个快?在Babel.js出来之前,发明一门全新的语言代码代替JavaScript...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
相关热词 c#中dns类 c#合并的excel c# implicit c#怎么保留3个小数点 c# 串口通信、 网络调试助手c# c# 泛型比较大小 c#解压分卷问题 c#启动居中 c# 逻辑或运算符
立即提问