---->>Propretites+druid+c3p0+Junit操作c3p0,druid连接池的代码<<------(_)
javaJdbc分为四个阶段
一:原始的jdbc,连接关闭数据库一个类,增删改查和事件写在一起。
二 :Dao阶段entity(对应数据库的实体类)(dao专门写针对数据库专门用的表)的类。Dao包下Dao类,entity包下user类(对应数据库的user表,user表中有id,name,pass。那么user类中就private 对应表中的数据类型比如说,数据库中user表id字段是int类型,那么java中user类就private Integer(包装器类型,不包装就是int,建议包装)int;完整的一行代码是private Integer int;私有化属性,公开getset方法,有参无参属性构造,实现Serializable 生成唯一序列号)。
在这个阶段开始有了实体包entity,专写增删改查方法dao包(很多代码都是一样的,所以用spring。主要精力放在业务逻辑,比如包裹从A地到B地其中的临时站点存放,物流仓库分拣等等),连接关闭数据库DBUtils包。
三:实现第二个阶段后,因为DBUtils包下的DBConn类(专用连关数据库)中的私有化属性被写固定值,肯定是不方便****的。比如说这样—>>那么为了方便就应该从propertites文件中获得建立db.propertites
放在src目录下,其中写数据库四要素
因为proppertites是采用键值的形式,在DBConn类中得到四要素就可以从propertites中获得了。这样就方便了,可以使用mysql数据库,oracle数据库,而不用改变源代码,只需改变pro…文件中的值即可。
四:就应该使用数据库连接池技术了c3p0,druid(阿里),hk(日本最新最快)。用main方法测试有暴露的风险。所以新建一个JUnit case test 。和Test类中写一个main方法。在新建的JUnit case test类中方法上标有@Test的方法就是转到Test类中的main方法进行调用。
五:因为增删改查都一样,所以有了框架,Spring框架。使得程序员能把主要精力放在业务逻辑上而不是重复的代码上。
贴代码:基本上按操作复制粘贴即可。操作c3p0,druid连接池的代码
结构:
注释的代码是有可能恢复的代码。
dao包下UserDao(大驼峰式命名)类:
/**
*
*/
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane.RestoreAction;
import DBUtils.DBConnJDBC;
import DBUtils.DBConnProC3p0;
import DBUtils.DBConnProDruid;
import DBUtils.DBConnProJD;
/**
* @author sq
* @date 2020年7月4日
* @Desription: TODO
*/
public class UserDao {
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
public static void addUserJD(){ // 原始jdbc
String sql="insert into tb_user(username,password)values('1211100','2')";
conn=DBConnJDBC.getConnection();
try {
ps=conn.prepareStatement(sql);
ps.executeUpdate();
System.out.println("添加成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("添加失败");
}finally{
DBConnJDBC.close(conn, ps);
}
}
public static void addUserPro(){ // jdbcpro
String sql="insert into tb_user(username,password)values('10211','2')";
conn=DBConnProJD.getConnection();
try {
ps=conn.prepareStatement(sql);
ps.executeUpdate();
System.out.println("添加成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("添加失败");
}finally{
DBConnProJD.close(conn, ps);
}
}
public static void addUserC3p0(){ // jdbc c3p0
String sql="insert into tb_user(username,password)values('12110001','2')";
conn=DBConnProC3p0.getConnection();
try {
ps=conn.prepareStatement(sql);
ps.executeUpdate();
System.out.println("添加成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("添加失败");
}finally{
DBConnProC3p0.close(conn, ps);
}
}
public static void addUserDruid(){ // jdbc druid
String sql="insert into tb_user(username,password)values('12100101001','2')";
conn=DBConnProDruid.getConnection();
try {
ps=conn.prepareStatement(sql);
ps.executeUpdate();
System.out.println("添加成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("添加失败");
}finally{
DBConnProDruid.close(conn, ps);
}
}
}
DBUtils包下DBConnJDBC类:
/**
*
*/
package DBUtils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/**
* @author sq
* @date 2020年7月4日
* @Desription: TODO
*/
public class DBConnJDBC {
// 四要素
private static final String DRIVER="com.mysql.jdbc.Driver"; // 驱动
private static final String URL="jdbc:mysql://localhost:3306/girls"; // 地址
private static final String USER="root"; // 数据库用户名
private static final String PASSWORD="123456";// 数据库密码
// 加载
static{
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 加载驱动
}
// 打开连接
public static Connection getConnection(){
Connection conn=null;
try {
conn=DriverManager.getConnection(URL,USER,PASSWORD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
// 关闭连接
public static void close(Connection conn,PreparedStatement ps,ResultSet rs){
try {
if (conn!=null) {
conn.close();
}
if (ps!=null) {
ps.close();
}if (rs!=null) {
rs.close();
}
System.out.println("关闭成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void close(Connection conn,PreparedStatement ps){
close(conn,ps);
}
public static void close(Connection conn){
close(conn,null,null);
}
}
DBUtils包下DBConnProC3p0类:
/**
*
*/
package DBUtils;
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* @author sq
* @date 2020年7月4日
* @Desription: TODO
*/
public class DBConnProC3p0 {
private static ComboPooledDataSource dataSource=new ComboPooledDataSource(); // 创建连接池
static{
InputStream is=DBConnProJD.class.getResourceAsStream("/db.Properties"); // 加载db.propertites文件
System.out.println("找到文件");
Properties prop=new Properties();
try {
prop.load(is);
dataSource.setDriverClass(prop.getProperty("c3p0.driver"));// c3p0连接池得到驱动已加载驱动 // 将tb.pr... 文件中的driver键所对应的值赋值给本页面定义的变量dataSource
dataSource.setJdbcUrl(prop.getProperty("c3p.url")); // 可以自定义properties中的c3p0键名
dataSource.setUser(prop.getProperty("c3p0.user"));
dataSource.setPassword(prop.getProperty("c3p0.password"));
System.out.println("加载成功");
//System.out.println(dataSource.getPassword());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection(){ // 打开连接
Connection conn=null;
try {
conn=dataSource.getConnection(); // 连接池中加载了url,name,pass
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn,PreparedStatement ps,ResultSet rs){ // 关闭连接
try {
if (conn!=null) {
conn.close();
}
if (ps!=null) {
ps.close();
}if (rs!=null) {
rs.close();
}
System.out.println("关闭成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void close(Connection conn,PreparedStatement ps){
close(conn,ps);
}
public static void close(Connection conn){
close(conn,null,null);
}
}
DBUtils包下DBConnProDruid类:
/**
*
*/
package DBUtils;
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* @author sq
* @date 2020年7月4日
* @Desription: TODO
*/
public class DBConnProDruid {
private static DataSource dataSource; // 创建连接池
static{
InputStream is=DBConnProJD.class.getResourceAsStream("/db.Properties"); // 加载db.propertites文件
System.out.println("找到文件");
Properties prop=new Properties();
try {
prop.load(is);
dataSource=DruidDataSourceFactory.createDataSource(prop);
System.out.println("加载成功");
//System.out.println(dataSource.getPassword());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection(){ // 打开连接
Connection conn=null;
try {
conn=dataSource.getConnection(); // 连接池中加载了url,name,pass
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn,PreparedStatement ps,ResultSet rs){ // 关闭连接
try {
if (conn!=null) {
conn.close();
}
if (ps!=null) {
ps.close();
}if (rs!=null) {
rs.close();
}
System.out.println("关闭成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void close(Connection conn,PreparedStatement ps){
close(conn,ps);
}
public static void close(Connection conn){
close(conn,null,null);
}
}
DBUtils包下DBUtils包下DBConnProDruid类:
/**
*
*/
package DBUtils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/**
* @author sq
* @date 2020年7月4日
* @Desription: TODO
*/
public class DBConnProJD {
private static String dirve; // 驱动
private static String url; // 地址
private static String user; // 数据库用户名
private static String password;// 数据库密码
static{
InputStream is=DBConnProJD.class.getResourceAsStream("/db.Properties"); // 加载db.propertites文件
System.out.println("找到文件");
Properties prop=new Properties();
try {
prop.load(is);
dirve=prop.getProperty("jdbc.driver"); // 将tb.pr... 文件中的driver键所对应的值赋值给本页面定义的变量dirver
url=prop.getProperty("jdbc.url");
user=prop.getProperty("jdbc.user");
password=prop.getProperty("jdbc.password");
System.out.println("加载成功");
Class.forName(dirve); // 加载驱动
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection(){ // 打开连接
Connection conn=null;
try {
conn=DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn,PreparedStatement ps,ResultSet rs){ // 关闭连接
try {
if (conn!=null) {
conn.close();
}
if (ps!=null) {
ps.close();
}if (rs!=null) {
rs.close();
}
System.out.println("关闭成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void close(Connection conn,PreparedStatement ps){
close(conn,ps);
}
public static void close(Connection conn){
close(conn,null,null);
}
}
entity包下User类(对应数据库表中的类):
/**
*
*/
package entity;
import java.io.Serializable;
import java.util.Date;
/**
* @author sq
* @date 2020年7月4日
* @Desription: TODO
*/
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 2280691281494912509L; // 实现ser...接口生成一个序列化
private Integer uid; // 使用者id号
private String userName;// 用户名
private String password; // 密码
private Integer status; // 用户状态
private Date regtime; // 日期
private double money; // 金钱
/**
*
*/
public User() {
super();
// TODO Auto-generated constructor stub
}
/**
* @param userName
* @param password
* @param status
* @param regtime
* @param money
*/
public User(String userName, String password, Integer status, Date regtime, double money) {
super();
this.userName = userName;
this.password = password;
this.status = status;
this.regtime = regtime;
this.money = money;
}
/**
* @param uid
* @param userName
* @param password
* @param status
* @param regtime
* @param money
*/
public User(Integer uid, String userName, String password, Integer status, Date regtime, double money) {
super();
this.uid = uid;
this.userName = userName;
this.password = password;
this.status = status;
this.regtime = regtime;
this.money = money;
}
public Integer getUid() {
return uid;
}
/**
* @param uid uid
*/
public void setUid(Integer uid) {
this.uid = uid;
}
/**
* @return userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName userName
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @return password
*/
public String getPassword() {
return password;
}
/**
* @param password password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return status
*/
public Integer getStatus() {
return status;
}
/**
* @param status status
*/
public void setStatus(Integer status) {
this.status = status;
}
/**
* @return regtime
*/
public Date getRegtime() {
return regtime;
}
/**
* @param regtime regtime
*/
public void setRegtime(Date regtime) {
this.regtime = regtime;
}
/**
* @return money
*/
public double getMoney() {
return money;
}
/**
* @param money money
*/
public void setMoney(double money) {
this.money = money;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "UserDao [uid=" + uid + ", userName=" + userName + ", password=" + password + ", status=" + status
+ ", regtime=" + regtime + ", money=" + money + "]";
}
}
Test包下建Jt.Junit Test Case
/**
*
*/
package Test;
import static org.junit.Assert.*;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import dao.UserDao;
/**
* @author sq
* @date 2020年7月4日
* @Desription: TODO
*/
public class Jt {
/**
* @author sq
* @param @throws java.lang.Exception
* @return void
* @time 2020年7月4日 下午7:47:15
* @Desription: TODO
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
/**
* @author sq
* @param @throws java.lang.Exception
* @return void
* @time 2020年7月4日 下午7:47:15
* @Desription: TODO
* @throws java.lang.Exception
*/
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Test// c3p0连接池
public void testC3p0() {
UserDao.addUserC3p0();
}
@Test// jdbc原始连接
public void testJD(){
UserDao.addUserJD();
}
@Test // Projdbc
public void testProJD(){
UserDao.addUserPro();
}
@Test // Prodruid
public void testProDruid(){
UserDao.addUserDruid();
}
}
因为是从上往下运行所以,想要运行某一个方法时:
在目录结构下选中某一个方法运行。
Test包下建一个Test类
/**
*
*/
package Test;
/**
* @author sq
* @date 2020年7月4日
* @Desription: TODO
*/
public class Test {
public static void main(String[] args) {
}
}
src目录下的db.propertites文件中
mysql\u6570\u636E\u5E93 -->jdbc\u8FDE\u63A5\u65B9\u5F0F 原始jdbc
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/girls
jdbc.user=root
jdbc.password=123456
mysql\u6570\u636E\u5E93 -->C3p0\u8FDE\u63A5\u65B9\u5F0F c3p0连接池
c3p0.driver=com.mysql.jdbc.Driver
c3p.url=jdbc:mysql://localhost:3306/girls
c3p0.user=root
c3p0.password=123456
c3p0.initPoolSize = 10
c3p0.maxPoolSize = 20
c3p0.minPoolSize = 5
c3p0.maxStatements = 30
c3p0.maxIdleTime = 300
mysql\u6570\u636E\u5E93 -->druid\u8FDE\u63A5\u65B9\u5F0F druid连接池
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/girls
username=root
password=123456
pool.init=1
pool.minIdle=3
pool.maxActive=20
需要包:
资源地址:各位大佬如果对您有帮助请给个赞加好评,谢谢。入军github。
链接: https://pan.baidu.com/s/1B-zgMfVCP3xEpz_o0Tm9Zg 提取码: q9ck