java基础_数据库JDBC_c3p0
拒绝窘境,当你不停滞不前的时候,就已经在退步了。
Akino·杜菲 版本声明:原创内容,请勿转载,否则将追究法律责任!
c3p0数据源:
1. 本数据库需要给java导入jar包:
- 针对MySQL数据库,导入
- 针对Oracle数据库,导入c3p0-oracle-thin-extras-0.9.1.2.jar ,
2.使用jar包步骤
第一步:创建一个lib:单击鼠标右键——选择New——选择Floder——输入名称:lib
第二步:将jar包复制到lib下,单击该jar包,点击鼠标右键——Build Path——Add to Build Path
第三步:完毕,会出现在Referenced Libaries下方,有c3p0-0.9.1.2.jar表示导入成功。
3.写一个关于c3p0的例子
package com.c3p0demo; import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import com.mchange.v2.c3p0.ComboPooledDataSource; /* * c3p0数据源 * */ public class Demo { public static void main(String[] args) throws Exception { //通过四大参数创建连接池,就可以获取连接 ComboPooledDataSource ds = new ComboPooledDataSource();//创建连接池对象,用空参构造 ds.setDriverClass("com.mysql.jdbc.Driver");//里面是字符串,固定的 ds.setJdbcUrl("jdbc:mysql:///mydb123");//连接MySQL数据库,mydb123是数据库名 ds.setUser("root");//root是MySQL数据库的登录用户名 ds.setPassword("root");//root是MySQL数据库的登录密码 //池参数,有很多如:ds.setMaxIdleTime()是最大空闲时间;ds.setMaxPoolSize()是最大池连接数;
//ds.setMaxStatements()是最大执行器语句数;ds.setMaxConnectionAge()是最大连接存活时间;
//获取连接对象 Connection conn = ds.getConnection();//返回值是个接口,是所有厂商需要执行的规范 Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("select * from student");//查询语句 while(rs.next()){//有内容就取出来 System.out.println(rs.getString(1)+","+rs.getString(2)+","+rs.getString(3)); }//取出三列内容 //释放资源 rs.close(); st.close(); //把连接还给池!!!而不是关闭的意思。与上面两个关闭性质不一样。 conn.close(); } }
说明:想要运行上面的代码需要包的导入,导入方法同2。
需要你有一个MySQL数据库中,数据库名为mydb123,内容如同:
建议MySQL可视化软件为:,网上版本有的很多。
运行上述代码结果:
说明:会输出如上内容,红色部分是日志信息,不是错误哦!
非红色部分是真实输出的内容。将表student中的信息输出。
4.优化上面的例子
优化思想:因为上面的例子将端口号,数据库,用户名,用户密码写死了,不能改变。因此我们需要使用配置文件将上面代码进行优化。
注意:c3p0数据源的配置文件很特殊
- 文件名特殊:c3p0-config.xml。
- 配置位置特殊:必须在src下!
- c3p0-config.xml是一种超文本编辑模式,里面有标签,相当于一个数据库。
- xml这种格式通常用来做配置文件
(1)使用c3p0-config.xml
在src上单击鼠标右键——选择New——选择File——输入名称:c3p0-config.xml—点击Finish即可。
(2)双击c3p0-config.xml,进入后可以看到两种格式:
第一种是表格型的,Design
第二种是代码型的,Source
(3)设置c3p0-config.xml,将代码粘贴到Source中
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///mydb123</property>
<property name="user">root</property>
<property name="password">123</property>
</default-config>
</c3p0-config>
(4)配合下面代码使用
package com.c3p0demo; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.mchange.v2.c3p0.ComboPooledDataSource; public class Demo2 { public static void main(String[] args) throws Exception { ComboPooledDataSource ds = new ComboPooledDataSource(); //获取连接对象 Connection conn = ds.getConnection(); System.out.println(conn);//com.mchange.v2.c3p0.impl.NewProxyConnection@ed17bee //c3p0数据源使用的是动态代理模式生成的connection对象!!! Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("select * from student"); while(rs.next()){ System.out.println(rs.getString(1)+","+rs.getString(2)+","+rs.getString(3)); } rs.close(); st.close(); conn.close(); } }
(5)c3p0和dbcp的不同原理
dbcp是大的连接池里面试连接对象,通过get取出,使用的是装饰者模式。
而c3p0是动态代理模式生成的。
你不愿意改变的时候,往往就是你最需要改变的时候。让你变得更加专业,成为一个it精英。只有经历才能让我们更加认识自己,不经历历练就无法看见阳光。 欢迎加入BigBang高级大数据之路,qq群号:945694891。