java se 6 是什么意思(Java SE 6 新特性: Java DB&n)
大家好,今天来为大家解答java se 6 是什么意思这个问题的一些问题点,包括Java SE 6 新特性: Java DB&n也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
java是什么意思
[编辑本段]Java简介
Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。
Java平台由Java虚拟机(Java Virtual Machine)和Java应用编程接口(Application Programming Interface、简称API)构成。Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.4,最近版本为Java1.7。
Java分为三个体系JavaSE(Java2 Platform Standard Edition,java平台标准版),JavaEE(Java 2 Platform,Enterprise Edition,java平台企业版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。
2009年04月20日,oracle(甲骨文)宣布收购sun。
1991年,Sun公司的James Gosling。Bill Joe等人,为电视、控制烤面包机等家用电器的交互操作开发了一个Oak(一种橡树的名字)软件,他是Java的前身。当时,Oak并没有引起人们的注意,直到1994年,随着互联网和3W的飞速发展,他们用Java编制了HotJava浏览器,得到了Sun公司首席执行官Scott McNealy的支持,得以研发和发展。为了促销和法律的原因,1995年Oak更名为Java。Java的得名还有段小插曲呢,一天,Java小组成员正在喝咖啡时,议论给新语言起个什么名字的问题,有人提议用Java(Java是印度尼西亚盛产咖啡的一个岛屿),这个提议得到了其他成员的赞同,于是就采用Java来命名此新语言。很快Java被工业界认可,许多大公司如IBM Microsoft.DEC等购买了Java的使用权,并被美国杂志PC Magazine评为1995年十大优秀科技产品。从此,开始了Java应用的新篇章。
Java的诞生时对传统计算机模式的挑战,对计算机软件开发和软件产业都产生了深远的影响:
(1)软件4A目标要求软件能达到任何人在任何地方在任何时间对任何电子设备都能应用。这样能满足软件平台上互相操作,具有可伸缩性和重要性并可即插即用等分布式计算模式的需求。
(2)基于构建开发方法的崛起,引出了CORBA国际标准软件体系结构和多层应用体系框架。在此基础上形成了Java.2平台和.NET平台两大派系,推动了整个IT业的发展。
(3)对软件产业和工业企业都产生了深远的影响,软件从以开发为中心转到了以服务为中心。中间提供商,构件提供商,服务器软件以及咨询服务商出现。企业必须重塑自我,B2B的电子商务将带动整个新经济市场,使企业获得新的价值,新的增长,新的商机,新的管理。
(4)对软件开发带来了新的革命,重视使用第三方构件集成,利用平台的基础设施服务,实现开发各个阶段的重要技术,重视开发团队的组织和文化理念,协作,创作,责任,诚信是人才的基本素质。
总之,目前以看到了Java对信息时代的重要性,未来还会不断发展,Java在应用方面将会有更广阔的前景。
[编辑本段]JAVA-名字起源
Java自1995诞生,至今已经14年历史。Java的名字的来源:Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。Java语言中的许多库类名称,多与咖啡有关,如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans(对象豆)等等。SUN和JAVA的标识也正是一杯正冒着热气的咖啡。
据James Gosling回忆,最初这个为TV机顶盒所设计的语言在Sun内部一直称为Green项目。我们的新语言需要一个名字。Gosling注意到自己办公室外一棵茂密的橡树Oak,这是一种在硅谷很常见的树。所以他将这个新语言命名为Oak。但Oak是另外一个注册公司的名字。这个名字不可能再用了。
在命名征集会上,大家提出了很多名字。最后按大家的评选次序,将十几个名字排列成表,上报给商标律师。排在第一位的是Silk(丝绸)。尽管大家都喜欢这个名字,但遭到James Gosling的坚决反对。排在第二和第三的都没有通过律师这一关。只有排在第四位的名字、得到了所有人的认可和律师的通过,这个名字就是Java。
10多年来,Java就像爪哇咖啡一样誉满全球,成为实至名归的企业级应用平台的霸主。而Java语言也如同咖啡一般醇香动人。
[编辑本段]Java语言特点
Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。那么Java到底有何神奇之处呢?
Java语言其实最早诞生于1991年,起初被称为OAK语言,是SUN公司为一些消费性电子产品而设计的一个通用环境。他们最初的目的只是为了开发一种独立于平台的软件技术,而且在网络出现之前,OAK可以说是默默无闻,甚至差点夭折。但是,网络的出现改变了OAK的命运。
在Java出现以前,Internet上的信息内容都是一些乏味死板的HTML文档。这对于那些迷恋于WEB浏览的人们来说简直不可容忍。他们迫切希望能在WEB中看到一些交互式的内容,开发人员也极希望能够在WEB上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保障。对于用户的这种要求,传统的编程语言显得无能为力。SUN的工程师敏锐地察觉到了这一点,从1994年起,他们开始将OAK技术应用于WEB上,并且开发出了HotJava的第一个版本。当SUN公司1995年正式以Java这个名字推出的时候,几乎所有的WEB开发人员都心生感叹:噢,这正是我想要的!于是Java成了一颗耀眼的明星,丑小鸭一下子变成了白天鹅。
[编辑本段]Java主要特性
1、Java语言是简单的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
3、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
4、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
6、Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
7、Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
8、Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
9、Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
10、Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
11、Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。
[编辑本段]Java版本历史
1995年5月23日,Java语言诞生
1996年1月,第一个JDK-JDK1.0诞生
1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
1996年9月,约8.3万个网页应用了JAVA技术来制作
1997年2月18日,JDK1.1发布
1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
1997年9月,JavaDeveloperConnection社区成员超过十万
1998年2月,JDK1.1被下载超过2,000,000次
1998年12月8日,JAVA2企业平台J2EE发布
1999年6月,SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)
2000年5月8日,JDK1.3发布
2000年5月29日,JDK1.4发布
2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机
2001年9月24日,J2EE1.3发布
2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升
2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME
2006年12月,SUN公司发布JRE6.0
目前JDK7.0已经在研发中.
[编辑本段]Java与Internet
我们知道,早先的www仅可以传送文本和图片,Java的出现实现了互动的页面,是一次伟大的革命。
Java并不是为Internet、www而设计的,它也可以用来编写独立的应用程序。Java是一种面向对象语言,Java语言类似于C++语言,所以已熟练掌握C++语言的编程人员,再学习Java语言就容易得多!Java程序需要编译,它被放置在Internet服务器上,当用户访问服务器时,Java程序被下载到本地的用户机上,由浏览器解释运行。实际上有两种Java程序:一种Java应用程序是一个完整的程序,如Web浏览器。另一种Java小应用程序是运行于Web浏览器中的一个程序。
Java程序和它的浏览器HotJava,提供了可让你的浏览器运行程序的方法。你能从你的浏览器里直接播放声音,你还能播放页面里的动画,Java还能告诉你的浏览器怎样处理新的类型文件。当我们能在2400 baud线上传输视频图象时,HotJava将能显示这些视频。
[编辑本段]Java与电子商务
电子商务是当今的热门话题,然而传统的编程语言难以胜任电子商务系统,电子商务要求程序代码具有基本的要求:安全、可靠、同时要求能与运行于不同平台的机器的全世界客户开展业务。Java以其强安全性、平台无关性、硬件结构无关性、语言简洁同时面向对象,在网络编程语言中占据无可比拟的优势,成为实现电子商务系统的首选语言。
[编辑本段]Java的八大基本数据类型及其包装类
原始类型包装类原始类型所占的字节数
short Short 2个字节
int Integer 4个字节
long Long 8个字节
float Float 4个字节
double Double 8个字节
byte Byte 1个字节
char Character 2个字节
boolean Boolean这个试编译环境而定
[编辑本段]第一个JAVA程序HelloWorld
//文件名 HelloWorld.java
//声明一个类
public class HelloWorld{
//声明一个方法
public static void main(String[] args){//程序的入口
//输出
System.out.println("hello world!");
}
}
//例子
package Text;
public class Test(
public static void main(String[] args){
short d= 12;//短整型
System.out.println(d);//输出d
long c= 144L;//长整型,要加l
System.out.println(c);//输出c
int z= 15;//整型
System.out.println(z);//输出z
char e='我';//字符型"我"
System.out.println(e);//输出e
}
)
[编辑本段]Java新手入门很重要的几个基本概念
[1][2][3]final类:为防止他人从你的类上派生新类,此类是不可扩展的。
动态调用比静态调用花费的时间要长。
抽象类:规定一个或多个抽象方法的类本身必须定义为abstract。
例: public abstract string getDescripition
Java中的每一个类都是从Object类扩展而来的。
object类中的equal和toString方法。
equal用于测试一个对象是否同另一个对象相等。
toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示。
(toString方法是一个很重要的方法)
通用编程:任何类类型的所有值都可以同object类型的变量来代替。
数组列表:ArrayList动态数组列表,是一个类库,定义在java.uitl包中,可自动调节数组的大小。
class类 object类中的getclass方法返回class类型的一个实例,程序启动时包含在main方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类。
就业方向:
可以从事JSP网站开发、Java编程、Java游戏开发、Java桌面程序设计,以及其他与Java语言编程相关的工作。可进入电信、银行、保险专业软件开发公司等从事软件设计和开发工作。
Java SE 6 新特性: Java DB&n
年底 Sun公司发布了 Java Standard Edition(Java SE)的最终正式版代号 Mustang(野马)跟 Tiger(Java SE)相比 Mustang在性能方面有了不错的提升与 Tiger在 API库方面的大幅度加强相比虽然 Mustang在 API库方面的新特性显得不太多但是也提供了许多实用和方便的功能在脚本 WebService XML编译器 API数据库 JMX网络和 Instrumentation方面都有不错的新特性和功能加强本系列文章主要介绍 Java SE在 API库方面的部分新特性通过一些例子和讲解帮助开发者在编程实践当中更好的运用 Java SE提高开发效率
本文是系列文章的第篇介绍了 Java SE在数据库编程方面的新特性
Java DB Java里的数据库
新安装了 JDK的程序员们也许会发现除了传统的 bin jre等目录 JDK新增了一个名为 db的目录这便是 Java的新成员 Java DB这是一个纯 Java实现开源的数据库管理系统(DBMS)源于 Apache软件基金会(ASF)名下的项目 Derby它只有 MB大小对比动辄上 G的数据库来说可谓袖珍但这并不妨碍 Derby功能齐备支持几乎大部分的数据库应用所需要的特性更难能可贵的是依托于 ASF强大的社区力量 Derby得到了包括 IBM和 Sun等大公司以及全世界优秀程序员们的支持这也难怪 Sun公司会选择其版本纳入到 JDK中作为内嵌的数据库这就好像为 JDK注入了一股全新的活力 Java程序员不再需要耗费大量精力安装和配置数据库就能进行安全易用标准并且免费的数据库编程在这一章中我们将初窥 Java DB的世界来探究如何使用它编写出功能丰富的程序
Hello Java DB内嵌模式的Derby
既然有了内嵌(embedded)的数据库就让我们从一个简单的范例(代码在清单中列出)开始试着使用它吧这个程序做了大多数数据库应用都可能会做的操作在 DBMS中创建了一个名为 helloDB的数据库创建了一张数据表取名为 hellotable向表内插入了两条数据然后查询数据并将结果打印在控制台上最后删除表和数据库释放资源
清单 HelloJavaDB的代码
public class HelloJavaDB{ public static void main(String[] args){ try{// load the driver Class forName( apache derby jdbc EmbeddedDriver) newInstance(); System out println( Load the embedded driver); Connection conn= null; Properties props= new Properties(); props put( user user); props put( password user);//create and connect the database named helloDB conn=DriverManager getConnection( jdbc:derby:helloDB;create=true props); System out println( create and connect to helloDB); conn setAutoCommit(false);// create a table and insert o records Statement s= conn createStatement(); s execute( create table hellotable(name varchar() score int)); System out println( Created table hellotable); s execute( insert into hellotable values( Ruth Cao)); s execute( insert into hellotable values( Flora Shi));// list the o records ResultSet rs= s executeQuery( SELECT name score FROM hellotable ORDER BY score); System out println( name\t\tscore); while(rs next()){ StringBuilder builder= new StringBuilder(rs getString()); builder append( \t); builder append(rs getInt()); System out println(builder toString());}// delete the table s execute( drop table hellotable); System out println( Dropped table hellotable); rs close(); s close(); System out println( Closed result set and statement); mit(); conn close(); System out println( Committed transaction and closed connection); try{// perform a clean shutdown DriverManager getConnection( jdbc:derby:;shutdown=true);} catch(SQLException se){ System out println( Database shut down normally);}} catch(Throwable e){// handle the exception} System out println( SimpleApp finished);}}
随后我们在命令行(本例为 Windows平台当然其它系统下稍作改动即可)下键入以下命令
清单运行 HelloJavaDB命令
java–cp;%JAVA_HOME%\db\lib\derby jar HelloJavaDB
程序将会按照我们预想的那样执行图是执行结果的一部分截屏
图 HelloJavaDB程序的执行结果
上述的程序和以往没什么区别不同的是我们不需要再为 DBMS的配置而劳神因为 Derby已经自动地在当前目录下新建了一个名为 helloDB的目录来物理地存储数据和日志需要做的只是注意命名问题在内嵌模式下驱动的名字应为 apache derby jdbc EmbeddedDriver创建一个新数据库时需要在协议后加入 create=true另外关闭所有数据库以及 Derby的引擎可以使用以下代码
清单关闭所有数据库及 Derby引擎
DriverManager getConnection( jdbc:derby:;shutdown=true);
如果只想关闭一个数据库那么则可以调用
清单关闭一个数据库
DriverManager getConnection( jdbc:derby:helloDB;shutdown=true);
这样使用嵌入模式的 Derby维护和管理数据库的成本接近于这对于希望专心写代码的人来说不失为一个好消息然而有人不禁要问既然有了内嵌模式为什么大多数的 DBMS都没有采取这样的模式呢?不妨做一个小实验当我们同时在两个命令行窗口下运行 HelloJavaDB程序结果一个的结果与刚才一致而另一个却出现了错误如图所示
图内嵌模式的局限
错误的原因其实很简单在使用内嵌模式时 Derby本身并不会在一个独立的进程中而是和应用程序一起在同一个 Java虚拟机(JVM)里运行因此 Derby如同应用所使用的其它 jar文件一样变成了应用的一部分这就不难理解为什么在 classpath中加入 derby的 jar文件我们的示例程序就能够顺利运行了这也说明了只有一个 JVM能够启动数据库而两个跑在不同 JVM实例里的应用自然就不能够访问同一个数据库了
鉴于上述的局限性和来自不同 JVM的多个连接想访问一个数据库的需求下一节将介绍 Derby的另一种模式网络服务器(Neork Server)
网络服务器模式
如上所述网络服务器模式是一种更为传统的客户端/服务器模式我们需要启动一个 Derby的网络服务器用于处理客户端的请求不论这些请求是来自同一个 JVM实例还是来自于网络上的另一台机器同时客户端使用 DRDA(Distributed Relational Database Architecture)协议连接到服务器端这是一个由 The Open Group倡导的数据库交互标准图说明了该模式的大体结构
由于 Derby的开发者们努力使得网络服务器模式与内嵌模式之间的差异变小使得我们只需简单地修改清单中的程序就可以实现如清单所示我们在 HelloJavaDB中增添了一个新的函数和一些字符串变量不难看出新的代码只是将一些在上一节中特别指出的字符串进行了更改驱动类为 apache derby jdbc ClientDriver而连接数据库的协议则变成了 jdbc:derby://localhost:/这是一个类似 URL的字符串而事实上 Derby网络的客户端的连接格式为 jdbc:derby://server[:port]/databaseName[;attributeKey=value]在这个例子中我们使用了最简单的本地机器作为服务器而端口则是 Derby默认的端口
图 Derby网络服务器模式架构
清单网络服务器模式下的 HelloJavaDB
public class HelloJavaDB{ public static String driver= apache derby jdbc EmbeddedDriver; public static String protocol= jdbc:derby:; public static void main(String[] args){// same as before} private static void parseArguments(String[] args){ if(args length==|| args length>){ return;} if(args[ ] equalsIgnoreCase( derbyclient)){ framework= derbyclient; driver= apache derby jdbc ClientDriver; protocol= jdbc:derby://localhost:/;}}}
当然仅仅有客户端是不够的我们还需要启动网络服务器 Derby中控制网络服务器的类是 apache derby drda NeorkServerControl因此键入以下命令即可如果想了解 NeorkServerControl更多的选项只要把 start参数去掉就可以看到帮助信息了关于网络服务器端的实现都被 Derby包含在 derbynet jar里
清单启动网络服务器
java cp; C:\Program Files\Java\jdk \db\lib\derby jar; C:\Program Files\Java\jdk \db\lib\derbynet jar apache derby drda NeorkServerControl start
相对应的网络客户端的实现被包含在 derbyclient jar中所以只需要在 classpath中加入该 jar文件修改后的客户端就可以顺利地读取数据了再一次尝试着使用两个命令行窗口去连接数据库就能够得到正确的结果了如果不再需要服务器那么使用 NeorkServerControl的 shutdown参数就能够关闭服务器
更多
至此文章介绍了 Java SE中的新成员 Java DB(Derby)也介绍了如何在内嵌模式以及网络服务器模式下使用 Java DB当然这只是浅尝辄止更多高级的选项还需要在 Sun和 Derby的文档中寻找在这一章的最后我们将简单介绍几个 Java DB的小工具来加快开发速度它们都位于 apache derby tools包内在开发过程中需要获取信息或者测试可以用到
ij一个用来运行 SQL脚本的工具 dblook为 Derby数据库作模式提取(Schema extraction)生成 DDL的工具 sysinfo显示系统以及 Derby信息的工具类JDBC新功能新 API
如果说上一章介绍了 Java中的一个新成员它本来就存在但是没有被加入进 JDK那么这一章我们将关注在 JDBC中又增加了哪些新功能以及与之相对应的新 API
自动加载驱动
在 JDBC之前编写 JDBC程序都需要加上以下这句有点丑陋的代码
清单注册 JDBC驱动
Class forName( apache derby jdbc EmbeddedDriver) newInstance();
Java sql DriverManager的内部实现机制决定了这样代码的出现只有先通过 Class forName找到特定驱动的 class文件 DriverManager getConnection方法才能顺利地获得 Java应用和数据库的连接这样的代码为编写程序增加了不必要的负担 JDK的开发者也意识到了这一点从 Java开始应用程序不再需要显式地加载驱动程序了 DriverManager开始能够自动地承担这项任务作为试验我们可以将清单中的相关代码删除重新编译后在 JRE下运行结果和原先的程序一样
好奇的读者也许会问 DriverManager为什么能够做到自动加载呢?这就要归功于一种被称为 Service Provider的新机制熟悉 Java安全编程的程序员可能对其已经是司空见惯而它现在又出现在 JDBC模块中 JDBC的规范规定所有 JDBC的驱动 jar文件必须包含一个 java sql Driver它位于 jar文件的 META INF/services目录下这个文件里每一行便描述了一个对应的驱动类其实编写这个文件的方式和编写一个只有关键字(key)而没有值(value)的 properties文件类似同样地#之后的文字被认为是注释有了这样的描述 DriverManager就可以从当前在 CLASSPATH中的驱动文件中找到它应该去加载哪些类而如果我们在 CLASSPATH里没有任何 JDBC的驱动文件的情况下调用清单中的代码会输出一个 sun jdbc odbc JdbcOdbcDriver类型的对象而仔细浏览 JDK的目录这个类型正是在%JAVA_HOME%/jre/lib/resources jar的 META INF/services目录下的 java sql Driver文件中描述的也就是说这是 JDK中默认的驱动而如果开发人员想使得自己的驱动也能够被 DriverManager找到只需要将对应的 jar文件加入到 CLASSPATH中就可以了当然对于那些 JDBC之前的驱动文件我们还是只能显式地去加载了
清单罗列本地机器上的 JDBC驱动
Enumeration<Driver> drivers= DriverManager getDrivers();while(drivers hasMoreElements()){ System out println(drivers nextElement());}
RowId
熟悉 DB Oracle等大型 DBMS的人一定不会对 ROWID这个概念陌生它是数据表中一个隐藏的列是每一行独一无二的标识表明这一行的物理或者逻辑位置由于 ROWID类型的广泛使用 Java SE中新增了 java sql RowId的数据类型允许 JDBC程序能够访问 SQL中的 ROWID类型诚然不是所有的 DBMS都支持 ROWID类型即使支持不同的 ROWID也会有不同的生命周期因此使用 DatabaseMetaData getRowIdLifetime来判断类型的生命周期不失为一项良好的实践经验我们在清单的程序获得连接之后增加以下代码便可以了解 ROWID类型的支持情况
清单了解 ROWID类型的支持情况DatabaseMetaData meta= conn getMetaData();System out println(meta getRowIdLifetime());
Java SE的 API规范中 java sql RowIdLifetime规定了种不同的生命周期 ROWID_UNSUPPORTED ROWID_VALID_FOREVER ROWID_VALID_OTHER ROWID_VALID_SESSION和 ROWID_VALID_TRANSACTION从字面上不难理解它们表示了不支持 ROWID ROWID永远有效等等具体的信息还可以参看相关的 JavaDoc读者可以尝试着连接 Derby进行试验会发现运行结果是 ROWID_UNSUPPORTED即 Derby并不支持 ROWID
既然提供了新的数据类型那么一些相应的获取更新数据表内容的新 API也在 Java中被添加进来和其它已有的类型一样在得到 ResultSet或者 CallableStatement之后调用 get/set/update方法得到/设置/更新 RowId对象示例的代码如清单所示
清单获得/设置 RowId对象
// Initialize a PreparedStatementPreparedStatement pstmt= connection prepareStatement( SELECT rowid name score FROM hellotable WHERE rowid=?);// Bind rowid into prepared statement pstmt setRowId( rowid);// Execute the statementResultSet rset= pstmt executeQuery();// List the recordswhile(rs next()){ RowId id= rs getRowId();// get the immutable rowid object String name= rs getString(); int score= rs getInt();}
鉴于不同 DBMS的不同实现 RowID对象通常在不同的数据源(datasource)之间并不是可移植的因此 JDBC的 API规范并不建议从连接 A取出一个 RowID对象将它用在连接 B中以避免不同系统的差异而带来的难以解释的错误而至于像 Derby这样不支持 RowId的 DBMS程序将直接在 setRowId方法处抛出 SQLFeatureNotSupportedException
SQLXML
SQL标准引入了 SQL/XML作为 SQL标准的扩展 SQL/XML定义了 SQL语言怎样和 XML交互如何创建 XML数据如何在 SQL语句中嵌入 XQuery表达式等等作为 JDBC的一部分 Java增加了 java sql SQLXML的类型 JDBC应用程序可以利用该类型初始化读取存储 XML数据 java sql Connection createSQLXML方法就可以创建一个空白的 SQLXML对象当获得这个对象之后便可以利用 setString setBinaryStream setCharacterStream或者 setResult等方法来初始化所表示的 XML数据以 setCharacterStream为例清单表示了一个 SQLXML对象如何获取 java io Writer对象从外部的 XML文件中逐行读取内容从而完成初始化
清单利用 setCharacterStream方法来初始化 SQLXML对象
SQLXML xml= con createSQLXML();Writer writer= xml setCharacterStream();BufferedReader reader= new BufferedReader(new FileReader( test xml));String line= null;while((line= reader readLine()!= null){ writer write(line);}
由于 SQLXML对象有可能与各种外部的资源有联系并且在一个事务中一直持有这些资源为了防止应用程序耗尽资源 Java提供了 free方法来释放其资源类似的设计在 java sql Array Clob中都有出现
至于如何使用 SQLXML与数据库进行交互其方法与其它的类型都十分相似可以参照 RowId一节中的例子在 Java SE的 API规范中找到 SQLXML中对应的 get/set/update方法构建类似的程序此处不再赘述
SQLExcpetion的增强
在 Java SE之前有关 JDBC的异常类型不超过个这似乎已经不足以描述日渐复杂的数据库异常情况因此 Java SE的设计人员对以 java sql SQLException为根的异常体系作了大幅度的改进首先 SQLException新实现了 Iterable<Throwable>接口清单实现了清单程序的异常处理机制这样简洁地遍历了每一个 SQLException和它潜在的原因(cause)
清单 SQLException的 for each loop
// Java codecatch(Throwable e){ if(e instanceof SQLException){ for(Throwable ex:(SQLException)e){ System err println(ex toString());}}}
此外图表示了全部的 SQLException异常体系除去原有的 SQLException的子类 Java中新增的异常类被分为种 SQLReoverableException SQLNonTransientException SQLTransientException在 SQLNonTransientException和 SQLTransientException之下还有若干子类详细地区分了 JDBC程序中可能出现的各种错误情况大多数子类都会有对应的标准 SQLState值很好地将 SQL标准和 Java类库结合在一起
图 SQLException异常体系
在众多的异常类中比较常见的有 SQLFeatureNotSupportedException用来表示 JDBC驱动不支持某项 JDBC的特性例如在 Derby下运行清单中的程序就可以发现 Derby的驱动并不支持 RowId的特性另外值得一提的是 SQLClientInfoException直接继承自 SQLException表示当一些客户端的属性不能被设置在一个数据库连接时所发生的异常
小结更多新特性与展望
在本文中我们已经向读者介绍了 Java SE中 JDBC最重要的一些新特性它们包括嵌在 JDK中的 Java DB(Derby)和 JDBC的一部分当然还有很多本文还没有覆盖到的新特性比如增加了对 SQL语言中 NCHAR NVARCHAR LONGNVARCHAR和 NCLOB类型的支持在数据库连接池的环境下为管理 Statement对象提供更多灵活便利的方法等
lishixinzhi/Article/program/Java/JSP/201311/19343Java (TM) SE Runtime Enrironment 6 Update 是什么程序
Java(TM) SE Runtime Enrironment 6 Update
JAVA(TM): JAVA的注册商标
SE:Standard Edition标准版
Runtime Environment:运行环境
即:java标准版6的升级程序
====================
JDK:java development kid,java的开发平台
====================
有的XP系统在安装的时候就带这么个更新程序,这个程序一些软件和浏览网页的插件(主要是浏览网页的时候)需要有java的环境下才能正常工作,这个不耽误你正常使用电脑,可以放心
关于本次java se 6 是什么意思和Java SE 6 新特性: Java DB&n的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。