java c3po_java c3p0

c3p0的配置

使用c3p0数据库连接池实现连接

1.1. 需要引入c3p0 .jar 包

1.2. 新建配置文件[src 目录下面新建c3p0-config.xml]

root

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/java

5

10

10

50

20

5

JdbcUtils.java

负责连接数据库

package com.curtis.jdbc;

import java.sql.Connection;

import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JdbcUtils {

private static DataSource dataSource = null;

static {

// 数据源只能被创建一次

// 这个mvcapp跟数据库连接池里面的对应

dataSource = new ComboPooledDataSource("mvcapp");

}

public static Connection getConnection() throws SQLException {

return dataSource.getConnection();

}

public static void releaseConnection(Connection connection) {

try {

if (connection != null) {

connection.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

DAO.java[带泛型的参数]

接口:数据库交互用到方法[查询所有记录、查询单条记录、增删改、查询单个值...]

package com.curtis.dao;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.List;

public interface DAO {

void batch(Connection connection, String sql, Object[]... args)

throws SQLException;

// 查询单个值

E getValue(Connection connection, String sql, Object... args)

throws SQLException;

// 查询所有数据

List getAllList(Connection connection, String sql, Object... args)

throws SQLException;

// 查询一条数据

T getOne(Connection connection, String sql, Object... args)

throws SQLException;

// insert update delete

void update(Connection connection, String sql, Object... args)

throws SQLException;

}

JdbcDaoImpl.java[带泛型的参数]

通过QueryRunner 实现DAO接口里面的方法

package com.curtis.dao;

import java.lang.reflect.ParameterizedType;

import java.lang.reflect.Type;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.List;

import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.handlers.BeanHandler;

import org.apache.commons.dbutils.handlers.BeanListHandler;

import org.apache.commons.dbutils.handlers.ScalarHandler;

public class JdbcDaoImpl implements DAO {

private QueryRunner queryRunner = null;

private Class clazz;

// 构造函数

@SuppressWarnings("unchecked")

public JdbcDaoImpl() {

queryRunner = new QueryRunner();

Type superClass = getClass().getGenericSuperclass();

if (superClass instanceof ParameterizedType) {

ParameterizedType parameterizedType = (ParameterizedType) superClass;

Type[] typeArgs = parameterizedType.getActualTypeArguments();

if (typeArgs != null && typeArgs.length > 0) {

if (typeArgs[0] instanceof Class) {

clazz = (Class) typeArgs[0];

}

}

}

}

@Override

public void batch(Connection connection, String sql, Object[]... args)

throws SQLException {

queryRunner.batch(connection, sql, args);

}

@SuppressWarnings("unchecked")

@Override

public E getValue(Connection connection, String sql, Object... args)

throws SQLException {

return (E) queryRunner

.query(connection, sql, new ScalarHandler(), args);

}

@Override

public List getAllList(Connection connection, String sql, Object... args)

throws SQLException {

return queryRunner.query(connection, sql, new BeanListHandler<>(clazz),

args);

}

@Override

public T getOne(Connection connection, String sql, Object... args)

throws SQLException {

return queryRunner.query(connection, sql, new BeanHandler<>(clazz),

args);

}

@Override

public void update(Connection connection, String sql, Object... args)

throws SQLException {

queryRunner.update(connection, sql, args);

}

}

实体类继承JdbcDaoImpl.java,指明具体的实体

package com.curtis.table;

public class Student {

private int flow_id;

private int type;

private String id_card;

private String student_name;

private String location;

private int grade;

public int getFlow_id() {

return flow_id;

}

public void setFlow_id(int flow_id) {

this.flow_id = flow_id;

}

public int getType() {

return type;

}

public void setType(int type) {

this.type = type;

}

public String getId_card() {

return id_card;

}

public void setId_card(String id_card) {

this.id_card = id_card;

}

public String getStudent_name() {

return student_name;

}

public void setStudent_name(String student_name) {

this.student_name = student_name;

}

public String getLocation() {

return location;

}

public void setLocation(String location) {

this.location = location;

}

public int getGrade() {

return grade;

}

public void setGrade(int grade) {

this.grade = grade;

}

@Override

public String toString() {

return "Student [flow_id=" + flow_id + ", type=" + type + ", id_card="

+ id_card + ", student_name=" + student_name + ", location="

+ location + ", grade=" + grade + "]";

}

}

package com.curtis.table;

import com.curtis.dao.JdbcDaoImpl;

public class StudentDao extends JdbcDaoImpl {

}

单元测试类测试各个方法是否愉快

@Test

public void testGet() {

Connection connection = null;

try {

connection = JdbcUtils.getConnection();

String sql = "select flow_id,type,id_card,student_name,location,grade from student where flow_id=?";

Student student=studentDao.getOne(connection, sql, 1001);

System.out.println(student);

} catch (Exception e) {

e.printStackTrace();

} finally{

JdbcUtils.releaseConnection(connection);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值