可以写触发器trriger,在更新主表的主键前将从表的键值改掉再更新主表的键值。
举个例子。
CREATE OR REPLACE TRIGGER TRG_触发器名 ,创建触发器。BEFORE INSERT OR UPDATE ,意思是在插入或更新 *** 作之前。ON 主表名,为主表创建。
REFERENCING OLD AS OLDROW NEW AS NEWROW ,定义数据行。FOR EACH ROW ,BEGIN。IF INSERTING THEN,向主表插入时做的 *** 作。ELSE,更新主表时做的 *** 作。Update 从表的 *** 作写在这里就可以。END IF;END;
例如我们新建了一张表T_User,字段如下u_id,主键,为标示符,user_name然后我们来执行一个新增插入 *** 作:
insert into T_User(user_name,user_password,user_email,user_ip)
values('admin','123456','32962435@qqcom','582015820') ;
有一天,我们想在新增插入数据的时候获取到插入这条数据的u_id的值是多少,我们知道从MSSQL2005以后新增了一个output,用来输入某个值,我们就可以利用它来实现
解决的方法有两种:
1、一种是直接输入某个字段,如:
insert into T_User(user_name,user_password,user_email,user_ip) output insertedu_id //output
insertedu_id一定要放在 values之前,不能放在sql语句的最后面,不然是出错的,inserted是固定的,你想输入当前插入的某个字段就在后面接这个字段即可,我们想获得的是u_id所以是insertedu_id
values('admin','123456','32962435@qqcom','582015820') ;
2、另一种方法是使用@@identity,@@identity是系统内置的一个全局变量,其作用就是输入最后一次的标示符,我们可以两步走也可以通过一步实现
一步实现的代码如下
insert into T_User(user_name,user_password,user_email,user_ip) output @@identity
values('admin','123456','32962435@qqcom','582015820') ;
volist标签通常用于查询数据集,关系数据库依赖于主键---它是数据库物理模式的基石,主键生成方式 1, 支持主键自增,例如MySQL,SQL Server数据库 2) 不支持主键自增,例如Oracle数据库 需求: 插入一条新数据,立马查询这条数据2获取主键值3对于JDBC原生代码,需要在预编译语句中设置返回参数,然后通过输出获取自增的主键值。4对于mybatis,若数据库支持自动生成主键的字段(比如 MySQL 和 SQL
查询数据库利用上边的要领数据库如何设置主键可以由记载生成对象,但是你仍然得用SQL语句来查询数据库,这需要对数据库布局有深切的相识这还是没有解决问题,虽则我们能够不佣人的劳力地般配数据库表和类的名儿,但是还是必需手工编写SQL语句这就是说每一次修改数据库布局后,将不得不手工编辑这些查询语句不外,我们仍然可以利用前文所述的要领来越过这个障碍通常而言,查询关系数据库时,你将会用到属于主键或索引的字段名和值一言弊之,如果或人向你供给了适当的字段名和字段值
,你就可以从响应的数据库中抽取符合要求的记载(或字段)而DatabaseMetaData对象不单可以被用于检索一系列的表名(见上所述数据库主键是啥子),并且可以获得一系列的主键及索引字段上边的问题由此可以迎刃而解
通过填入一系列适当的(字段名,字段值)对,可以利用相对于而言少得多的代码使成为事实对关系数据库的查询你可以将对子中的所有字段名和数据库中的主健及索引字段相般配每一当你找到了名儿列表中响应的主健或索引字段,可以根据响应的数值来生成一个SQL语句,执行它来获取RecordSet,并通过ClassforName()构造机
制将结果转化为对象使成为事实这一设法要求可以以(名,值)对的方式对与数据库表相干的每个类的数据元素进行存取但是这类要领只有通过上节所述的通用父类才能趋于完美清单3和4利用伪码表示数据库主键是啥子了这一要领
Openthedatabaseconnection
Retrievealistofuserdefinedtables
foreachtable
{
Checkwherethereisacorrespondingclassfile
if(itisavailabe)
{
loadtheclassfile
Retrievelistsofkeyfieldsandindecesfort你好stable
StoretheselistsinhashtablesforeasyAccess
}
elsethrowanexception
}
· 清单3:初始化数据库毗连的伪码
TakeanobjectAcontainingaseriesof(name,value)pairs
foreachtableT
{
foreach(name,value)pair
{
if(namematchesprimary_key_fieldorindex_field)
storearefrencetobothnameandvalue
}
ifallkey_fieldswerefound
createaquerystringusingkeynamesandvalues
elseifallindex_fieldswerefound
createaquerystringusingindexnamesandvalues
executethequerytoobtainaResultSet
ForeachrecordintheResultSet
{
CreateanobjectoftheclassassociatedwithtableT
initializetheobjectusingtherecord''''scontents
Addtheobjecttotheresults,eg,attac你好ttoA
}
}
· 清单4:描写数据库查询的伪码
Java镜像和JavabeansJava11研发套件(JDK)的引入,为我们带来了很多壮大的新性能,例如全新的用户界面接口类有两个新的JDKAPI尤其值当注重:镜像机制(javalangreflect包)和JavaBeans组件的应用程序接口(javabeans包)这两个API将会帮助我们创立高明的数据库类,使我们可以利用有关类的meta-信息,以此来解决研发通用数据库类中的问题
领有forName()和newInstance()要领的Class类,仅只是镜象(reflection)功效的一个简略例子真正重要的是,forName()字符串参数不必需是源程序中出现的字符串只要给出一个名儿(这个名儿可从任何地方取来),你就可以载入并实例化任何一个类对于我们的数据库类数据库如何设置主键,我们可以直接从数据库自身的表名中得到类名这就是说,与数据库表相干的Java类名其实不需要出现在源程序中响应地,当表名改变或某个表被加入到数据库中时,不需要修改源码,只要确信带有新名儿的类已存在你的体系中
镜像类象征着可以在及时运行中获取、储存和处置惩罚Java程序中的类信息它们的实例能够象任何Java对象同样被运用,你可以象修改字符串和整儿同样,去修改类、数据类型、返回类型、要领参照和参数在源程序级,这个镜像的观点看起来并无啥子价值——因为可以应用你自己的编码直接存取你所需要的有关类、要领及参数的所有信息但是,镜像(reflection)将数据库修改主键会在java的编译文件中发挥作用JavaBeanSAPI的作用是:通过应用程序的构造机制利用来自于全然不同的研发者或产商所编写的类
JavaBeans规范为类成员的名儿制定一系列的条例以确保要领函数的名儿能体系地描写它们的功效任何一个符正当则的Java类均可以被一个Bean的内化实例(通过镜像)查抄,以展现其举动的重要特征——诸如对于啥子样的事件类将有所响应,和该类将会孕育发生啥子样的事件等等任何符合这些规范的类都是高效的Bean,因而是一个组件有理论上,这象征着你可以从各类来历网络一系列beans,当需要它们时可以将其其及时地绑在一路一个Bean的例子
在底下一个名为Translation的Bean中数据库主键生成计谋,有一个构造函数和两个要领来 *** 作一个名为“language”的属性这里我想夸大的是,既然你可以通过查抄一个类的代码来相识它的构造函数、要领及属性,那么Bean的内化器(Introspector)也能做到
publicclassTranslationextendsObject
{
intlanguage;
publictranslation()
{
}
publicintgetlanguage()
{
return(language);
}
publicvoidsetLanguage(intlanguage)
{
t你好slanguage=language;
}
}
------解决方案-------------------------------------------------------- EF实体类是对数据库对象封装的吧,原则上来说就是避免logical code中与表名直接接触的
至于映射关系,你看看自动生成的edmx文件,里面有------解决方案-------------------------------------------------------- 表名是实现细节,你的程序不应该依赖于表的名字
在你数据进行绑定的时候用RowDataBound这个事件,在这个事件里
LinkButton
linkbutton
=
(LinkButton)eRowCells[0]FindControl("lbProjectName");
linkbuttonCommandArgument
=
eRowRowIndexToString();其中
linkbuttonCommandArgument就是给你要执行的命令行设置一个行索引
这样你在你RowCommand事件里直接用eCommandArgument就可以得到某一行的索引,然后通过这个索引就可以获取主键的值
以上就是关于如何用java中取到作为数据库主键的值全部的内容,包括:如何用java中取到作为数据库主键的值、如何获取数据库新插入数据的主键id、volist循环出的主键怎么获取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)