JDBC、c3p0连接池

JDBC : JAVA DataBase Connectivity - java数据库连接,是一套由java代码编写的开发数据库应用程序的标准。是用于Java应用程序连接各种数据库的标准方法。
JDBC连接数据库的步骤
1.加载驱动
语法:Class.forName(“classname”); 功能:获取字符串参数指定的类,并初始化该类。例如加载mysql的驱动语句是:
Class.forName(“com.mysql.jdbc.Driver”);
2.创建连接
//2.1.数据库的连接地址
String url=“jdbc:mysql://localhost:3306/student?characterEncoding=utf-8”;
//2.2.数据库的用户名
String userName=“root”;
//2.3.数据库密码
String password=“336029”;
//2.4建立连接
conn=DriverManager.getConnection(url, userName, password);
3. 创建执行对象
//sql语句
String id=“1”;
String sql=“delete from stu where stuid=”+id;
st=conn.createStatement();
4.执行并返回执行结果
result=st.executeUpdate(sql);
5. 关闭连接
st.close(); //销毁执行对象
conn.close(); //关闭连接通道

/**
 * 1.DriverManager:管理一组jdbc驱动服务,负责创建connection对象
 * 2.connection对象:连接对象,负责和数据库进行连接,只有连接成功后才能对数据库进行相应的操作,但是在连前,我需要知道数据库的连接地址、用户名和密码
 * 3.Statement:执行对象,由connection进行创建,负责把SQL语句发送给数据库服务器。 需要拼接SQL语句,不安全,容易引起SQL注入
 */
public class TestJdbc {
public static void main(String[] args) {
	//创建连接对象
	Connection conn=null;
	//定义一个执行对象
	Statement st=null;
	//创建一个变量接收数据库服务器返回的结果
	int result=0;
	try {
		//第一步:加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		//第二步:建立连接
		//1.数据库的连接地址
		String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
		//2.数据库的用户名
		String userName="root";
		//3.数据库密码
		String password="336029";
		//建立连接
		conn=DriverManager.getConnection(url, userName, password);
		//System.out.println(conn);
		//第三步:创建执行对象
		//sql语句
		String id="1";
		String sql="delete from stu where stuid="+id;
		st=conn.createStatement();
		//第四步:执行并返回执行结果
		result=st.executeUpdate(sql);
	} catch (Exception e) {
		e.printStackTrace();
	}finally{
	//第五步:关闭连接
		try {
			st.close();		//销毁执行对象
			conn.close();	//关闭连接通道
		} catch (Exception e2) {
			e2.printStackTrace();
		}
	}
	if(result>0) {
		System.out.println("删除成功");
	}else {
		System.out.println("删除失败");
	}
}
}

预编译执行对象

/**
* PreparedStatement:预编译执行对象,它是Statement对象的子接口
 * 把sql语句预编译并存储到PreparedStatement对象中
 * 它允许该sql语句有占位符,创建完成后对占位符进行赋值,占位符的坐标从1开始
 */
public class DeleteStudent {

public static void main(String[] args) {
	//连接对象
	Connection conn=null;
	//创建连接对象
	PreparedStatement pst=null;
	//创建变量接受结果
	int result=0;
	
	//1.加载驱动
	try {
		Class.forName("com.mysql.jdbc.Driver");
		//2.建立连接
		String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
		String userName="root";
		String password="336029";
		conn=DriverManager.getConnection(url, userName, password);
		//3.创建执行对象
		//sql
		String sql="delete from stu where stuid=?";
		//创建执行对象
		pst=conn.prepareStatement(sql);
		//赋值
		pst.setInt(1, 2);
		//4.执行并返回信息
		result=pst.executeUpdate();
		//5.关闭连接		
	} catch (Exception e) {			
		e.printStackTrace();
	}finally {
		try {
			pst.close();//销毁执行对象
			conn.close();
		} catch (Exception e2) {				
			e2.printStackTrace();
		}
	}
	if(result>0) {
		System.out.println("删除成功");
	}else {
		System.out.println("删除失败");
	}
}
}

ResultSet:结果集对象

/*
 * ResultSet:结果集对象,查询结果返回
 */
public class SelectStudent {

public static void main(String[] args) {
	select();
}
public static void select() {
	//连接对象
	Connection conn=null;
	//执行对象
	PreparedStatement pst=null;
	//定义结果集对象
	ResultSet rs=null;
	//定义一个集合去接收结果集中的值
	List<Student> list = new ArrayList<Student>();
	
	try {
		//第一步 加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		//第二步 建立连接
		//1.数据库的连接地址
		String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
		//2.数据库用户名
		String user="root";
		//3.数据库密码
		String password="336029";
		//建立连接
		conn=DriverManager.getConnection(url, user, password);
		//第三步 创建执行对象
		//sql
		String sql="select * from stu";
		pst=conn.prepareStatement(sql);
		//第四步 执行并返回结果
		rs=pst.executeQuery();
		while(rs.next()) { //rs包含所有数据,next()表示向下走一行
			Student stu = new Student();
			stu.setStuid(rs.getInt("stuid"));
			stu.setStuname(rs.getString("stuname"));
			stu.setAge(rs.getInt("age"));
			stu.setAddress(rs.getString("address"));
			//向集合中添加数据
			list.add(stu);
		}
		//遍历集合
		for(Student stu1:list) {
			System.out.println(stu1);
		}
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		//第五步 关闭资源
		try {
			rs.close();
			pst.close();
			conn.close();
		} catch (Exception e2) {
			e2.printStackTrace();
		}
	}
}

}
数据库连接池:
数据库连接池的优点:

  1. 资源重用
  2. 更快的系统反应速度
  3. 新的资源分配手段
  4. 统一的连接管理,避免数据库连接泄露

c3p0的使用步骤
1.导入c3p0的jar包
2.创建数据源类(DataSource),负责初始化连接池,并提供数据库连接获取方法
3.定义ComboPooledDataSource变量
4.设置连接池参数(建议使用配置文件设定参数)
5.获取数据库连接

c3p0的配置文件信息:

<?xml version="1.0" encoding="UTF-8"?>
<default-config>
	<!-- 基本配置 -->
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/bigdata2</property>
	<property name="driverClass">com.mysql.jdbc.Driver</property>
	<property name="user">root</property>
	<property name="password">123456</property>
	<!-- 每次增量,当需要创建Connection对象时,一次创建几个 -->
	<property name="acquireIncrement">3</property>
	<!-- 当创建池对象后,池中应该有几个Connection对象 -->
	<property name="initialPoolSize">10</property>
	<!-- 池中最少Connection个数,如果少于这个值,就会创建Connection -->
	<property name="minPoolSize">2</property>
	<!-- 池中最大连接个数 -->
	<property name="maxPoolSize">10</property>
</default-config>
<!-- 命名配置,new ComboPooledDataSource("mysql-config")时,使用的就是这个配置 -->
<named-config name="mysql-config">
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/bigdata2</property>
	<property name="driverClass">com.mysql.jdbc.Driver</property>
	<property name="user">root</property>
	<property name="password">123456</property>
	<property name="acquireIncrement">3</property>
	<property name="initialPoolSize">10</property>
	<property name="minPoolSize">2</property>
	<property name="maxPoolSize">10</property>
</named-config>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值