JDBC、数据库连接池

JDBC连接数据库的步骤:
JDBC连接数据库就是通过JDBC标准,应用程序提供API,数据库厂商提供服务,使得JAVA应用程序平台和数据库管理平台建立联系。

*1. 加载驱动 Class.forName(“com.mysql.jdbc.Driver”);
2. 创建连接,连接到具体哪个数据库服务器和哪个数据库(url)
String URL = “jdbc:mysql://localhost:3306/db1”;
String USER = “root”;
String PWD = “admin”;
Connection conn = DriverManager.getConnection(URL, USER, PWD);
3. 创建执行对象,执行对象(Statement)是通过连接对象(Connection)来创建的。stmt = conn.createStatement(); 说明该执行对象是在当前连接下执行,因为连接对象指定了具体的数据库,所以执行对象的执行也就针对了哪个数据库执行。
4. 执行,对于Statement,我们通常叫它执行对象,但它不会在java环境中执行sql语句的,本质上是它通过驱动将要执行的sql语句发送到数据库服务器执行,
result = stmt.executeUpdate(sql); //将sql语句发送到数据库服务器执行
5.关闭资源,在执行完所有操作后,需要对访问数据库所创建的资源释放,也就是关闭资源,类似于IO流,操作完成后要关闭IO流一样。

测试连接类:
public static void main(String[] args) {
//1 加载驱动(mysql的驱动类名)
try {
Class.forName(“com.mysql.jdbc.Driver”);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//2创建连接(连接具体的mysql数据库)
//url:jdbc:mysql://IP地址:3306/数据库名
String url = “jdbc:mysql://localhost:3306/jdbcdb”;
String user = “root”;
String pwd = “admin”;
Connection conn = null; //连接对象
try {
//创建连接对象
conn = DriverManager.getConnection(url, user, pwd);
} catch (SQLException e) {
e.printStackTrace();
}
//打印连接对象
System.out.println(conn);
}

查询操作使用的方法是executeQuery(),返回的是结果集
增删改操作使用的是executeUpdate(),返回的是影响的行数(int)。

Statement :
根据学号删除学生信息类:
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”;
//2.数据库的用户名
String userName=“root”;
//3.数据库密码
String password=“123456”;
//建立连接
conn=DriverManager.getConnection(url, userName, password);
//System.out.println(conn);
//第三步 创建执行对象
//sql语句
int id=1001;
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):
PreparedStatement继承自Statement,特征是对sql语句进行了预编译,提高了执行效率

查询所有学生信息类:
public static void main(String[] args) {
//连接对象
Connection conn=null;
//执行对象
PreparedStatement pst=null;
//定义结果集对象
ResultSet rs=null;
//定义一个集合去接收结果集中的值
List list=new ArrayList();
//1.第一步 加载驱动
try {
Class.forName(“com.mysql.jdbc.Driver”);
//2.建立连接
String url=“jdbc:mysql://localhost:3306/student”;
String userName=“root”;
String password=“123456”;
conn=DriverManager.getConnection(url, userName, password);
//3.创建执行对象
//sql
String sql=“select * from stu”;
pst=conn.prepareStatement(sql);
//第四步 执行并返回结果
rs=pst.executeQuery();
while(rs.next()) {//rs所有数据,next()表示向下走一行
Student s1=new Student();
s1.setStuid(rs.getInt(“stuid”));
s1.setStuname(rs.getString(“stuname”));
s1.setAge(rs.getInt(“age”));
s1.setAddress(rs.getString(“address”));
//向集合中添加数据
list.add(s1);
}
// //遍历集合
// for(Student s1:list) {
// System.out.println(s1);
// }

// for(int i=0;i<list.size();i++) {
// Student s1=list.get(i);
// System.out.println(s1);
// }
//迭代器
Iterator i=list.iterator();
while(i.hasNext()) {
Student s1=i.next();
System.out.println(s1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
rs.close();
pst.close();
conn.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}

Statement与PreparedStatement 对比:

Statement:
String sql = “拼接完整的sql语句”;
创建:
stmt = conn.createStatement();
执行:
int result = stmt.executeUpdate(sql);
PreparedStatement :
String sql = “允许带参数的sql语句”;
创建:
Pstmt = conn.prepareStatement(sql);
如果有参数,需要给参数赋值
执行:
int result = pstmt.executeUpdate();

数据库连接池:
在系统初始化的时候,将数据库连接作为对象存储在内存中,
当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。

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

c3p0-config 使用XML文件(必须在src下):

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<!-- 默认配置,当使用ComboPooledDataSource无参构造器时,使用的就是这个配置 -->
	<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>
</c3p0-config>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值