一: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