第一个问题:rowset
查看jdk1.4 api文档,你可以看到很详细的说明。我在这里说一些个人理解:
rowset是javax.sql.*这个包中的接口,而resultset或者是statement等都是标准的java.sql.*包中定义的接口,因而可以看出rowset应该是标准jdbc接口的一些补充。从其继承关系看,rowset接口继承自resultset,从使用的角度看,从api文档可以看出,rowset的出现是为了java bean而设计的。javabean是java组件式开发的组成部分,如果你用过windows平台的快速开发工具开发过的话,你会理解什么是组件式开发。rowset的功能跟delphi中的数据组件很类似,本身可以维护数据库连接,有更新功能,可以供开发时实时连接到数据库中进行设计,也可以断开连接,必要时再连上。可以说rowset比java.sql.*包中提供的功能更加丰富,是jdbc驱动的更上一层的接口,是用来规范各个java bean提供商创建相应的bean时共同遵循的接口。因此,在做比较底层开发的时候,不适合使用rowset.在执行sql语句的时候,rowset应该是调用了底层的驱动接口(象statement)来完成,没有太大区别。第二个问题:
connection当中没有getStatement这个方法,有preparedstatement这个方法,createStatement返回的是Statement接口,preparedstatement返回的是PreparedStatment接口,后者继承自前者,由于PreparedStatement使用了precompile,因而执行sql语句更高效,所谓的高效就是在sql语句解析执行时,速度更快。建议使用preparedstatement.第三个问题:
class.forname是检测类是否已经安装,或者说是注册,也就是说当前类路径里能否找到该类,同时也起到显式加载jdbc驱动的作用,以给drivermanager在进行驱动查找时找到合适的驱动联系到数据库当中,因此可在程序中先用class.forname来先对驱动进行加载。
在java api文档里头,提到datasource是优先采用的数据库连接方式。datasource是一种工厂类型的数据库连接方式,实现了这类接口的数据库驱动在运行中通过jndi来注册,调用方可以通过jndi名来查找以获得对数据库的连接。这种工厂方式跟drivermanager有很大的不同,如上面所说的jndi名注册与查找,还可以支持连接池来提高连接效率,并可给中间件服务器提供事务控制,另外就是获得独立性,因为是通过命名来获得连接,所以调用时不用知道使用了那种驱动来连接,或者连接到什么数据库,当要连接数据库类型变化的时候,可以在配置当中更改驱动和url连接字串即可,给编程带来很大的独立性,也给实际的数据库连接带来很大的灵活性。j2ee开发就是使用了这种先进的方式。
查看jdk1.4 api文档,你可以看到很详细的说明。我在这里说一些个人理解:
rowset是javax.sql.*这个包中的接口,而resultset或者是statement等都是标准的java.sql.*包中定义的接口,因而可以看出rowset应该是标准jdbc接口的一些补充。从其继承关系看,rowset接口继承自resultset,从使用的角度看,从api文档可以看出,rowset的出现是为了java bean而设计的。javabean是java组件式开发的组成部分,如果你用过windows平台的快速开发工具开发过的话,你会理解什么是组件式开发。rowset的功能跟delphi中的数据组件很类似,本身可以维护数据库连接,有更新功能,可以供开发时实时连接到数据库中进行设计,也可以断开连接,必要时再连上。可以说rowset比java.sql.*包中提供的功能更加丰富,是jdbc驱动的更上一层的接口,是用来规范各个java bean提供商创建相应的bean时共同遵循的接口。因此,在做比较底层开发的时候,不适合使用rowset.在执行sql语句的时候,rowset应该是调用了底层的驱动接口(象statement)来完成,没有太大区别。第二个问题:
connection当中没有getStatement这个方法,有preparedstatement这个方法,createStatement返回的是Statement接口,preparedstatement返回的是PreparedStatment接口,后者继承自前者,由于PreparedStatement使用了precompile,因而执行sql语句更高效,所谓的高效就是在sql语句解析执行时,速度更快。建议使用preparedstatement.第三个问题:
class.forname是检测类是否已经安装,或者说是注册,也就是说当前类路径里能否找到该类,同时也起到显式加载jdbc驱动的作用,以给drivermanager在进行驱动查找时找到合适的驱动联系到数据库当中,因此可在程序中先用class.forname来先对驱动进行加载。
在java api文档里头,提到datasource是优先采用的数据库连接方式。datasource是一种工厂类型的数据库连接方式,实现了这类接口的数据库驱动在运行中通过jndi来注册,调用方可以通过jndi名来查找以获得对数据库的连接。这种工厂方式跟drivermanager有很大的不同,如上面所说的jndi名注册与查找,还可以支持连接池来提高连接效率,并可给中间件服务器提供事务控制,另外就是获得独立性,因为是通过命名来获得连接,所以调用时不用知道使用了那种驱动来连接,或者连接到什么数据库,当要连接数据库类型变化的时候,可以在配置当中更改驱动和url连接字串即可,给编程带来很大的独立性,也给实际的数据库连接带来很大的灵活性。j2ee开发就是使用了这种先进的方式。
解决方案 »
- 结 帖 发 帖 回 复 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 从Jsp页面传参数到action最后一个字变乱码"?",怎么解决啊
- 大家都什么时候学习啊?
- 求助:struts应用helloapp出错
- 连接不上MYSQL数据库啊,菜鸟在线狂等
- Struts+hibernate Servlet action is not available 在线等
- 请给出一个判断是否为IP地址的完整的JS代码?
- 请教关于dto的细节问题
- 用dom怎么得到XML文件里的所有的节点和其子节点还有它的值啊?
- vector和arraylist的区别
- 运行 ejb 的 HelloWorld 客户程序出现的问题
- 客户端调用无状态sessionbean的时候,产生异常,哪个高人能帮我看一下,100分
- JSP如何调用web service?急...分不够的话,可以再加。。
Connection conn=DriverManager.getConnection(url,"sa","");
还有种是通过datasource来连接,两者有什么区别啊
用Datasource连接一般采用数据库连接池技术~~~他只是通过DataSource得到本来就存在的一个数据库连接而已,而Connection conn=DriverManager.getConnection(url,"sa","");他要每次都去连接一次数据库~~相对来说比通过Connection pool要慢些~~~
1. CachedRowSet类:非连接类型rowset,不适合于较大量的数据集,适用于PDA或者网络计算机。
2. JDBCRowSet:连接型rowset,主要对ResultSet进行羽量及wrapper,使jdbc驱动可以象javabeans那样来使用。
3. WebRowSet:连接型rowset,基于http协议来访问提供数据获取渠道的servlet,使瘦的web客户端可以获取与更新数据。Rowset可以在这些场合来使用:
1.两层CS, 客户端的Rowset可以直接连接到数据库进行操作。
2.三层:
Intranet内部,rowset1运行在客户端的一个application,客户端访问ejb服务器,通过一个ejb来获得一个rowset2,rowset2被序列化返回到客户端,在客户端被解析还原,赋给rowset1,这时候,尽管rowset1没有连接数据库,但是可以工作在断开的状态,这时候rowset1就相当于一个本地数据容器,可以进行前端数据操作。
Internet: 如上面提到的一种可能实现方式WebRowSet,但其如何访问servlet,具体的工作方式,估计sun也没有很多具体的描述。总结:
1.RowSet首先是一个javabean组件,提供了跟其他javabean协同工作的机制,比如,假设有一个JGridBean可以用RowSet来集成表述数据,前者作为数据敏感bean组件,后者提供数据源。
2.RowSet与jdbc driver和jdbc api分离,使其变为轻量级,其可断开的特性,及java bean所拥有的组合性,使得在多层环境下非常适合于做前端表述组件。
3.轻量级使网络传输变得简单且有效。
因而,虽然同样是jdbc的api, 但是RowSet跟ResultSet的实现和应用是完全不同层次,前者的实现依赖于底层的api实现,应用中侧重于合理有效的数据表述与传输,由于提供了属性和事件支持,因而在数据操作功能上比ResultSet要丰富;后者是驱动级别的api,主要是获得数据库一线操作的数据集合,是前者底层支持者。这里可以看一段代码: Connection con = null; try {
con = ds.getConnection("managerID", "mgrPassword");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(
"select * from coffees");
CachedRowSet rset = new CachedRowSet();
rset.populate(rs);//注意这里
rs.close();
stmt.close();
return rset;
} finally {
if (con != null) con.close();
} 值得注意的是,RowSet仍是一个不成熟的技术,还在发展之中。参考:http://developer.java.sun.com/developer/Books/JDBCTutorial/chapter5.html