c3p0連接池和DBCP連接池及其DBUtils對數據庫的操作

一:c3p0連接池:

使用c3p0連接池,使用外部文件,外部文件的命名爲c3p0-config.xml.在lib裏面添加c3p0-XXX.jar包

我們連接數據庫裏面的數據庫名、用戶名、密碼 全部都使用在xml文件裏面:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
//默認加載
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
	<property name="jdbcUrl">jdbc:mysql:///數據庫名</property>
	<property name="user">root</property>
	<property name="password">123456</property>
	<property name="initialPoolSize">5</property>
	<property name="maxPoolSize">20</property>
  </default-config>
  //指定加載
  <named-config name="oracle"> 
    <property name="driverClass">com.mysql.jdbc.Driver</property>
	<property name="jdbcUrl">jdbc:mysql:///web_07</property>
	<property name="user">root</property>
	<property name="password">123</property>
  </named-config>
  

</c3p0-config>

使用

ComboPooledDataSource DataSource = new ComboPooledDataSource();來加載c3p0-config.xml文件,且默認加載

ComboPooledDataSource datasource = new ComboPooledDataSource("oracle");指定加載,這樣簡單地就完成了數據庫的連接。但是我們得對數據庫操作,所以定義一個工具類:

package utils;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;
public class c3p0Utils {
	ComboPooledDataSource DataSource = new ComboPooledDataSource();
	public DataSource getDataSource() {
		return DataSource;
	}
	public Connection getConnection() {
		Connection conn = null;
		try {
			conn = DataSource.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

}

測試類:

@Test
	public void login1() {
		ComboPooledDataSource datasource = new ComboPooledDataSource();
		//ComboPooledDataSource datasource = new ComboPooledDataSource("oracle");
		try {
			conn = datasource.getConnection();
			String sql = "insert into t_user values(null,?,?,?,?,?,?)";
			preps = conn.prepareStatement(sql);
			preps.setString(1, "lis");
			preps.setString(2, "123234");
			preps.setInt(3, 22);
			preps.setInt(4, 23);
			preps.setString(5, "123");
			preps.setInt(6, 23);
			int row = preps.executeUpdate();
			if (row > 0) {
				System.out.println("添加成功!");
			} else {
				System.out.println("添加失敗!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				JDBCUtils.release(conn, preps, null);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

二.DBCP連接池

DBCP的外部配置文件XXX.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/數據庫名?useUnicode=true&characterEncoding=utf8
username=root
password=root

它的加載方法和JDBC的差不多,所以直接寫出工具類:

package utils;

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 java.util.ResourceBundle;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class JDBCUtils2 {
	public static DataSource dataSource;
	public static String driver;
	public static String url;
	public static String username;
	public static String password;

	static {

		try {

			InputStream is = JDBCUtils2.class.getClassLoader().getResourceAsStream("db.properties");
			Properties prop = new Properties();
			prop.load(is);
			dataSource = BasicDataSourceFactory.createDataSource(prop);
			driver = prop.getProperty(driver);
			url = prop.getProperty(url);
			username = prop.getProperty(username);
			password = prop.getProperty(password);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public static Connection getConnection() {
		Connection conn = null;
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}

	public static void release(Connection conn, PreparedStatement prep, ResultSet rs) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (prep != null) {
			try {
				prep.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

三:DBUtils對數據庫的操作

BDUtils是JDBC的簡化開發工具包,需要的jar包:c3p0-XXX.jar,commons-dbcp-XX.jar,commons-dbutils-XX.jar,commons-pool-XXX.jar,在對數據庫的增刪改時,會出現很多的冗餘代碼,我們使用DBUtils大大的減少了冗餘代碼:

import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test;
import utils.c3p0Utils;
public class TestMyConnection {

	
	@Test
	public void login1() {
		try {
			QueryRunner runner = new QueryRunner(c3p0Utils.getDataSource());
			String sql = "insert into t_user values(null,?,?,?,?,?,?)";
			Object[] params  = {"wer","75",32,31,"567",12};
			int row = runner.update(sql,params);
			if (row > 0) {
				System.out.println("添加成功");
			}else {
				System.out.println("添加失敗");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

而在進行查的時候,需要我們進行創建一個javaBean,一個類對應一張數據庫表,類中的屬性對於着一個字段,在進行查的時候,將數據庫中的數據存在JavaBean中:所以在進行查的時候,創建一個JavaBean.

這就是查詢當前表中有多少條數據:

@Test
	public void login1() {
		try {
			QueryRunner runner = new QueryRunner(c3p0Utils.getDataSource());
			String sql = "select count(*) from t_user";
			Object[] params = {};
			Long nn=(Long) runner.query(sql, new ScalarHandler());
			
			System.out.println(nn);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

鏈接:https://pan.baidu.com/s/1Gyq7ERrCh8xDzFbl2YFhxw 
提取碼:d3bk 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章