您的位置:首页 > 其它

jdbc---连接池----->dbutil总结

2015-08-25 00:57 309 查看
jdbc总结:

SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC

,也可以叫协议吧.

我是这样理解 连接池----->dbutil--->手动获得conn的.(连接池省略了写properties文件和加载XXX然后获得conn的痛苦.而DBUtil省略了我们写关闭和exec...q..方法的痛苦.)

各司其职把

------------------------------------------------------------------------------------------------------------------------

1:其实sun公司提供的语法也是比较麻烦的,用到了很多对象DriverManager,Statement,ResultSet

这个情况之下出现了一些框架,这个DbUtils 就是其中一个,他帮助我们封装了很多方法,如获取链接,关闭数据

DbUtils :提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:

public static void close(…) throws java.sql.SQLException: DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。

public static void closeQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。

public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。

public static boolean loadDriver(java.lang.String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。

------------------------------------------------------------------------------------------------------------------------

但是DbUtils 的创建需要到数据源,什么是数据源呢?就是javax.sql.DataSource 就是获取conn的.而我们上课的时候一直用的都是数据库连接池里面获得的javax.sql.DataSource 不是我们自己写的.

2:所以到最后说白了:如果你不用数据库连接池,那么你就不需要使用DataSource,那么你也不能使用DbUtils 这个框架了.你可以很原始写一个怎么获得数据库conn的方法,然后调用很长的一个语法exec...Query...运行sql语句.这个时候如果你希望简化代码量的话可以写一个DBmanager来封装一些获得数据的的方法和关系数据的方法.这个就是很传统的时代了.如果你这个时候也想通过数据库连接池获得数据的话你可以自己编写数据库连接池,继承DataSource,然后慢慢写,

-------------------------------------------------------------------------------------------------------------

如何编写自己的数据库连接池----思路就是一下子创建好的的连接,然后放到一个LinkedList里面.然后用的时候从里面拿,关闭的时候还给这个LinkedList就行了.他会帮我们完成关闭conn工作.

编写连接池需实现java.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:

Connection getConnection()

Connection getConnection(String?username, String?password)

实现DataSource接口,并实现连接池功能的步骤:

在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。

实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。

当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。

Collection保证将自己返回到LinkedList中是此处编程的难点。

------------------------------------------------------------------------------------------------------------------------

但是更好的方法就是使用一些开源的数据库连接池来完成我们需要的工作.

综上所述,我们平时开发的时候首先我们不会习惯去写一个javax.sql.DataSource ,所以我们不用到开源的数据库连接池的时候,我们就不会去管什么连接池的情况.也就是满老师现在经常使用的方法,自己写DBmanager加上原始的语句进行编程,没有连接池.

其次,我们在开发的时候更多使用的情况时使用数据库连接池,这个时候我们就会习惯性的使用c3p0或者DBCP.但是这个只是一个获得javax.sql.DataSource的方法,并不简化我们的其他工作.只是简化了我们获得conn的过程.这个时候我们一般还会使用一些框架去简化我们写代码的过程,就会使用Apache—DBUtils框架等.这个时候我们就写一个工具栏帮我们获得javax.sql.DataSource 然后一切借给DBUtils就OK了!!!!!

QueryRunner runner = new QueryRunner(DBManager.getDataSource());这个代码也验证了我的说法,就是传递一个javax.sql.DataSource 进去而不是传递一个连接池进去,我以前理解错误了!真是被自己骗了好久,今晚的总结彻底搞清楚了!

<<<<===!!!====搞了半天原来private static ComboPooledDataSource ds ;不是一个池,NND就是一个javax.sql.DataSource,通过很复杂的继承关系继承到了他自己.

比较强大的只是你在创建他的时候做了好多的工作.而且不用的时候还会主动还给连接池.

===>>>>

最后我们使用的时候注意:当你不同数据库连接池的时候就记得关闭conn等.他们之间是没有依赖关系的.可以不用其中的任何一个,如果你不想使用DButil的话,你可以自己写一个工具类就行了,把那些exec...Query封装一把就行了,其实我们那天上课的时候老师也是先在没有告知我们的情况下完成了一个工具类才告诉我们又DButil的.

3:自己写的很原始的DNmanager只有几个功能,一般是搞一个静态代码块来加载数据库(这个时候你还需要些一个properties文件,配置你数据库的信息,还是你的用户名密码),封装一个获得连接的方法.再封装一个关闭连接的方法.dao方法很是会有很多的try catch方法.

oracle的分页语句:select * from (select rownum r_, row_.* from (select * from student order by id) row_ where rownum <=5) where r_>=1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: