Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。
1、JDBC事务
JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。 java.sql.Connection 提供了以下控制事务的方法:
public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()
使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。
2、JTA(Java Transaction API)事务
JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。
JTA允许应用程序执行分布式事务处理–在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。
如果计划用 JTA 界定事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。
您将需要用应用服务器的管理工具设置 XADataSource 。从应用服务器和 JDBC 驱动程序的文档中可以了解到相关的指导。
J2EE 应用程序用 JNDI 查询数据源。一旦应用程序找到了数据源对象,它就调用 javax.sql.DataSource.getConnection() 以获得到数据库的连接。
XA 连接与非 XA 连接不同。一定要记住 XA 连接参与了 JTA 事务。这意味着 XA 连接不支持 JDBC 的自动提交功能。同时,应用程序一定不要对 XA 连接调用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。相反,应用程序应该使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() 。
3、容器事务
容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。相对编码实现JTA事务 管理,我们可以通过EJB容器提供的容器事务管理机制(CMT)完成同一个功能,这项功能由J2EE应用服务器提供。这使得我们可以简单的指定将哪个方法 加入事务,一旦指定,容器将负责事务管理任务。这是我们土建的解决方式,因为通过这种方式我们可以将事务代码排除在逻辑编码之外,同时将所有困难交给 J2EE容器去解决。使用EJB CMT的另外一个好处就是程序员无需关心JTA API的编码,不过,理论上我们必须使用EJB。
一些容易混淆的介词
1.表示时间的at、on、in的用法区别
at主要表示:
(1)在某具体时刻之前,如at seven o’ clock,at 7:30。
(2)在固定短语中,如:at noon,at night,at that time,at the age of at the weekend,at Christmas。
On用来表示“在……天”,如:On Monday,On May lst,On Children’s Day。
in用来表示:
(1)在某年、某月、某季节。
(2)在—段时间之后,如:in two hours,in a few days。
注意:在纯粹地表示在上午/下午/晚上时,用in the morning/afternoon/evening,但在某一天的上午、下午、晚上前要用介词on。如:on Monday morning,on the morning of Children’ s Day。
2. 表示地点的at,in,on的用法区别
(1) at通常指小地方,in一般指大地方。
(2) at 所指范围不太明确,in指“在……里”。
(3) in指在内部,on指“在……之上”。
3.表示“一段时间”的for与since的用法区别
for后面接时间段,since之后接时间点。
4.表示时间的before与by的用法区别
before与by都可表示“在……之前”,但by含有“不迟于……”、“到……为止”的意思。如果by后是将来的时间,则与将来时连用,若by后是过去的时间,则与过去完成时连用。
5.over与above(under与below)
over,above都表示“在……的上面”,over表示“正上方”,而above只表示“在上方”但不一定在“正上方”。above还可表示温度、水 位等“高于”,over还可表示“越过……”。over的反义词是under,above的反义词是below.例如:
There is a bridge over the river
Our plane flew above the clouds.
6.表示“用”的with,by,in的用法
with多指用工具,用身体的部位或器官;by表示使用的方法、手段;in指使用某种语言。如:
We see with our eyes.
We go there by bike.
Please say it out in English.
He cut it open with a knife.
介词的省略
表示时间介词at, on, in 的省略
(1) 在 next, last, this, these, today, yesterday, tomorrow, one, every, each, all等词前,一般不用 at, in, on.
(2) 在某些名词词组前,可以省略(也可不省)如: (on) that day, (in)the year before last
常见搭配
1.动词+介词,如:
listen to, laugh at, write to, hear from, get to, look at, shout at, shout to, knock at, look for, look at, ask for, wait for, get on, get to, put on, turn on, operate on, take off, turn off, learn from, worry about …
2.形容词+介词,如:
afraid of, full of, angry with, strict with, busy with, good at, good/bad for, late for, sorry for, ready for, famous for, polite to, far from…
3.名词+介词 / 介词+名词
key to, visit to, at home, in surprise, after class, for ever, on time, at last, at first, for example…
Oracle创建一个这样的字段,格式如:YYYYMMDD-0000X,
YYYYMMDD是当天的年月日,X是自增的数字,起始从0000X开始.
SQL> create table test (id varchar2(20),name varchar2(16));
表已创建。
SQL> create sequence seq_test_id
2 start with 1
3 increment by 1;
序列已创建。
SQL> create or replace trigger trig_test
2 before insert on test
3 for each row
4 declare
5 -- local variables here
6 begin
7 SELECT to_char(SYSDATE,'yyyymmdd')||'-'||lpad(seq_test_id.NEXTVAL,5,'0'
) INTO :new.id FROM dual;
8 end trig_test;
9 /
触发器已创建
SQL> insert into test (name) values ('AC米兰');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from test;
ID NAME
-------------------- ----------------
20100324-00002 AC米兰
SQL>
21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。这其实需要二步,第一步是将各种数据转化为一个字符串,也就是数据的串行化(serialization),第二步才是交换这个字符串。
当时通用的数据交换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是Json。
Json的规格非常简单,只用一个页面、几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。
1) 并列的数据之间用逗号(“,”)分隔。
2) 映射用冒号(“:”)表示。
3) 并列数据的集合(数组)用方括号(“[]“)表示。
4) 映射的集合(对象)用大括号(“{}”)表示。
上面四条规则,就是Json格式的所有内容。
比如,下面这句话:
“北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。”
写成json格式就是这样:
[
{"城市":"北京","面积":16800,"人口":1600},
{"城市":"上海","面积":6400,"人口":1800}
]
如果事先知道数据的结构,上面的写法还可以进一步简化:
[
["北京",16800,1600],
["上海",6400,1800]
]
由此可以看到,json非常易学易用。所以,在短短几年中,它就取代xml,成为了互联网上最受欢迎的数据交换格式。
