透明 发表于 2015-1-18 11:41:58

JAVA编程:Java中数据库事件处置的完成

在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。事件处置|数据|数据库 择要本文先容在Java中举行事件处置的办法,经由过程实例分离报告了怎样接纳JavaBean、Ejb组件完成J2EE使用服务器撑持的JDBC事件、JTA(JavaTransactionAPI)事件。

  关头词JavaBean,EJB,数据库,事件处置,JTA

  JavaBean

  JavaBean是用Java言语编写的与平台有关的组件。它是形貌Java的软件组件模子,有点相似于Microsoft的COM组件的观点。在Java模子中,经由过程JavaBean能够无穷扩大Java程序的功效,经由过程JavaBean的组合能够疾速的天生新的使用程序。JavaBean能够完成代码的反复使用,关于程序的易保护性也有严重的意义。非可视化的JavaBean,在JSP程序中经常使用来封装事件逻辑、数据库操纵等,能够很好的完成营业逻辑和前台程序的分别。JavaBean在服务器真个使用方面体现出了愈来愈强的性命力。

  EJB

  EJB手艺界说了一组可重用的组件:EnterpriseJavaBeans。你能够使用这些组件,像搭积木一样的创建你的散布式使用程序。当你把代码写好以后,这些组件就被组合到特定的文件中往。每一个文件有一个或多个EnterpriseBeans,在加上一些设置参数。最初,这些EnterpriseBeans被设置到一个装了EJB容器的平台上。客户可以经由过程这些Beans的home接口,定位到某个beans,并发生这个beans的一个实例。如许,客户就可以够挪用Beans的使用办法和远程接口。EJB手艺简化了用JAVA言语编写的企业使用体系的开辟、设置和实行。有三品种型的Enterprisebeans:Sessionbeans、entitybeans和Message-drivenBeans。

  事件处置

  信息是任何企奇迹单元的主要资产,任何企业部门都包括着信息的流进、流出,任何企业部门都把持着某些信息。同时,信息必需在得当的机会传布给必要的人。并且,信息还必要平安束缚,一般依据信息的范例和内容实行会见把持。为了包管数据的平安无效和准确牢靠,数据库办理体系(DBMS)必需供应一致的数据回护功效。

  事件是古代数据库实际中的中心观点之一。假如一组处置步骤大概全体产生大概一步也不实行,我们称该组处置步骤为一个事件。当一切的步骤像一个操纵一样被完全地实行,我们称该事件被提交。因为个中的一部分或多步实行失利,招致没有步骤被提交,则事件必需回滚(回到最后的体系形态)。事件必需从命ISO/IEC所制订的ACID准绳。ACID是原子性(atomicity)、分歧性(consistency)、断绝性(isolation)和耐久性(durability)的缩写。事件的原子性暗示事件实行过程当中的任何失利都将招致事件所做的任何修正生效。分歧性暗示当事件实行失利时,一切被该事件影响的数据都应当恢复到事件实行前的形态。断绝性暗示在事件实行过程当中对数据的修正,在事件提交之前对其他事件不成见。耐久性暗示已提交的数据在事件实行失利时,数据的形态都应当准确。

  鄙人面我们枚举一个利用SQLServer数据库举行事件处置的例子。主表是一个规章轨制信息表(bylaw),次要字段有纪录编号、题目、作者、誊写日期等。两个子表分离是附件表(bylaw_affix)和文本信息表(bylaw_content)。表布局见所示。bylaw表的纪录编号与bylaw_affix表的纪录编号、bylaw_content表的纪录编号是对应的,每次对规章轨制信息的操纵也就是对这三个表的团结操纵。比方要删除规章轨制中的一笔记录,假如不利用事件,便可能会呈现如许的情形:第一个表中乐成删除后,数据库俄然呈现不测情况,而第2、三个表中的操纵没有完成,如许,删除操纵并没有完成,乃至已损坏数据库中的数据。要制止这类情形,就应当利用事件,它的感化是:要末三个表都操纵乐成,要末都失利。换句话说,就是坚持数据的分歧性。以是,为了确保对数据操纵的完全和分歧,在程序计划时要充实思索到事件处置方面的成绩。


示例表布局

  Java中的事件处置

  一样平常情形下,J2EE使用服务器撑持JDBC事件、JTA(JavaTransactionAPI)事件、容器办理事件。一样平常情形下,最好不要在程序中同时利用上述三种事件范例,好比在JTA事件中嵌套JDBC事件。第二方面,事件要在尽量短的工夫内完成,不要在分歧办法中完成事件的利用。上面我们枚举两种事件处置体例。

  1、JavaBean中利用JDBC体例举行事件处置

  在JDBC中如何将多个SQL语句组分解一个事件呢?在JDBC中,翻开一个毗连对象Connection时,缺省是auto-commit形式,每一个SQL语句都被看成一个事件,即每次实行一个语句,城市主动的失掉事件确认。为了能将多个SQL语句组分解一个事件,要将auto-commit形式屏障失落。在auto-commit形式屏障失落以后,假如不挪用commit()办法,SQL语句不会失掉事件确认。在比来一次commit()办法挪用以后的一切SQL会在办法commit()挪用时失掉确认。

publicintdelete(intsID){
 dbc=newDataBaseConnection();
 Connectioncon=dbc.getConnection();
 try{
  con.setAutoCommit(false);//变动JDBC事件的默许提交体例
  dbc.executeUpdate("deletefrombylawwhereID="+sID);
  dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
  dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
  con.commit();//提交JDBC事件
  con.setAutoCommit(true);//恢复JDBC事件的默许提交体例
  dbc.close();
  return1;
 }
 catch(Exceptionexc){
  con.rollBack();//回滚JDBC事件
  exc.printStackTrace();
  dbc.close();
  return-1;
 }
}

  2、SessionBean中的JTA事件

  JTA是事件服务的J2EE办理计划。实质上,它是形貌事件接口(好比UserTransaction接口,开辟职员间接利用该接口大概经由过程J2EE容器利用该接口来确保营业逻辑可以牢靠地运转)的J2EE模子的一部分。JTA具有的三个次要的接口分离是UserTransaction接口、TransactionManager接口和Transaction接口。这些接口共享大众的事件操纵,比方commit()和rollback(),可是也包括特别的事件操纵,比方suspend(),resume()和enlist(),它们只呈现在特定的接口上,以便在完成中同意必定水平的会见把持。比方,UserTransaction可以实行事件分别和基础的事件操纵,而TransactionManager可以实行高低文办理。

  使用程序能够挪用UserTransaction.begin()办法入手下手一个事件,该事件与使用程序正在个中运转确当前列程相干联。底层的事件办理器实践处置线程与事件之间的联系关系。UserTransaction.commit()办法停止与以后线程联系关系的事件。UserTransaction.rollback()办法将保持与以后线程联系关系确当前事件。

publicintdelete(intsID){
 DataBaseConnectiondbc=null;
 dbc=newDataBaseConnection();
 dbc.getConnection();
 UserTransactiontransaction=sessionContext.getUserTransaction();//取得JTA事件
 try{
  transaction.begin();//入手下手JTA事件
  dbc.executeUpdate("deletefrombylawwhereID="+sID);
  dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
  dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
  transaction.commit();//提交JTA事件
  dbc.close();
  return1;
 }
 catch(Exceptionexc){
  try{
   transaction.rollback();//JTA事件回滚
  }
  catch(Exceptionex){
   //JTA事件回滚堕落处置
   ex.printStackTrace();
  }
  exc.printStackTrace();
  dbc.close();
  return-1;
 }
}




C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.

谁可相欹 发表于 2015-1-18 16:33:37

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

再见西城 发表于 2015-1-22 12:38:16

Java 编程语言的风格十分接近C、C++语言。

透明 发表于 2015-1-24 14:04:46

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

第二个灵魂 发表于 2015-1-24 18:39:38

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

若天明 发表于 2015-1-26 20:03:08

至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。

精灵巫婆 发表于 2015-1-31 22:31:26

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言

柔情似水 发表于 2015-2-4 20:24:34

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

变相怪杰 发表于 2015-2-10 06:29:59

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

因胸联盟 发表于 2015-2-25 06:44:02

Java 编程语言的风格十分接近C、C++语言。

莫相离 发表于 2015-3-7 17:21:10

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

若相依 发表于 2015-3-10 18:26:44

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

小女巫 发表于 2015-3-11 14:58:53

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

飘飘悠悠 发表于 2015-3-12 09:33:44

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

海妖 发表于 2015-3-19 19:34:53

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

灵魂腐蚀 发表于 2015-4-4 12:23:55

是一种使网页(Web Page)产生生动活泼画面的语言

山那边是海 发表于 2015-4-17 16:58:14

Java是一种计算机编程语言,拥有跨平台、面向对java

爱飞 发表于 2015-4-23 21:59:11

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

简单生活 发表于 2015-4-26 11:10:21

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
页: [1]
查看完整版本: JAVA编程:Java中数据库事件处置的完成