JDBC(一)
1.JDBC基础知识
1.概念:
Java Data Base Connectivity(Java数据库连接)
一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
2.通过Java API完成:
1.建立与数据库的连接
2.向服务器提供要执行的SQL语句
3.处理数据库返回的结果集
3.连接数据库的实现步骤:
1.建立数据源;
2.导入.jar包,引入java.sql包
--常用接口:
Driver接口:驱动接口
DriverManager类:建立与驱动程序的连接Connection
Connection:数据库连接对象
Statement:用于发送基本sql语句
PreparedStatement:执行sql的对象
ResultSet:获取查询结果集
3.加载驱动程序
把用户对数据库的访问请求转换为数据库可以理解的方式,然后把数据库的执行结果返回给用户。
Class.forName("com.mysql.jdbc.Driver");
4.获取数据库连接对象,建立与数据库的连接
方法:static Connection getConnection(String url, String user, String password)
参数:
url:指定连接的路径:jdbc:mysql://ip地址(域名):端口号/数据库名称
jdbc:mysql://localhost:3306/student
如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
user:用户名
password:密码
5.创建用于执行语句对象
Statement stmt = conn.createStatement();
或 PreparedStatement pstmt=conn.prepareStatement(sql);
注意:用PreparedStatement对象后,一定要记得在执行sql语句前给?赋值
方法: setXxx(参数1,参数2)
* 参数1:?的位置编号
* 参数2:?的值
6.定义sql语句
* 添加:insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
* 修改:update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
* 查询:select * from 表名;
* 删除:delete from 表名 [where 条件]
7.执行sql语句
int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,否则失败。
ResultSet executeQuery(String sql) :执行DQL(select)语句
返回结果集
8.处理数据
用next方法判断是否有纪录
用getString等方法从结果集获取信息
9.关闭相关对象,释放资源
连接对象、语句对象、结果集对象
如:s.close(); stmt.close(); conn.close();
10.异常处理
抽取JDBC工具类可以简化代码
代码如下:
package cn.itwyl.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JdbcDemo1 {
public static void main(String[] args) throws Exception {
//1.导入驱动jar包
//复制,add as library
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库连接对象
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","wuy");
//4.定义sql语句
String sql="INSERT INTO salarygrade VALUES(6,40010,120000);";
//5.获取执行sql的对象Statement
Statement sta=conn.createStatement();
//6.执行sql
int count=sta.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
sta.close();
conn.close();
}
}
2.简单事务处理
1.概念:
由一系列基本操作组成的不可分割的逻辑单位。这多个操作要么同时成功,要么同时失败。
2.特性:
原子性,一致性,隔离性,时效性
3.使用JDBC接口进行事务处理
*开启事务:conn.setAutoCommit(false);调用该方法设置参数为false,即开启事务
*提交事务:conn.commmit();
*回滚事务:conn.rollback();
3.JDBC连接池
1.JDBC数据库连接池的必要性
连接池通过共享连接来减少连接的创建和释放需要的时间,从而提高效率。
(1)普通数据库连接使用DriverManager来获取,每次需要建立连接时都要将Connection加载到内存中。需要数据库连接就向数据库申请,执行完后又要释放资源,这样会导致大量资源和时间消耗。
(2)如果连接过多,可能导致内存泄露,服务器崩溃。
2.概念:为数据库连接创建一个缓冲池,预先在其中放入一定数量的连接,当需要建立连接时,就从缓冲池中取出一个,用完后再放回去。
优点:资源重用;减少时间开销,高效访问;统一管理,避免内存泄露。
3.实现
接口:DataSource javax.sql包下的。包含连接池和连接池管理,取代了DriverManager来获取Connection。
数据库访问完后要归还连接:conn.close();此时没有关闭连接,只是把连接释放归还到连接池。
4.C3P0:数据库连接池技术
步骤:
1. 导入jar包 c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,数据库驱动jar包
2. 定义配置文件:
* 名称: c3p0.properties 或者 c3p0-config.xml
* 路径:直接将文件放在src目录下即可。
3. 创建核心对象 数据库连接池对象 ComboPooledDataSource
4. 获取连接: getConnection
package cn.itwyl.jdbcTemplate;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class C3P0Demo1 {
public static void main(String[] args) throws Exception {
//导包
//创建数据库连接池对象
DataSource ds=new ComboPooledDataSource();
//获取连接对象
Connection conn=ds.getConnection();
System.out.println(conn);
}
}
5.Druid:数据库连接池实现技术,由阿里巴巴提供的
步骤:
1. 导入jar包 druid-1.0.9.jar,数据库驱动jar包
2. 定义配置文件:
* 是properties形式的
* 可以叫任意名称,可以放在任意目录下,需要自己加载配置文件
3. 加载配置文件。Properties
4. 获取数据库连接池对象:通过工厂来来获取 DruidDataSourceFactory
5. 获取连接:getConnection
package cn.itwyl.jdbcTemplate;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo {
public static void main(String[] args) throws Exception {
//1.导包
//2.定义配置文件
//3.加载配置文件
Properties pro=new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//4.获取连接池对象
DataSource ds=DruidDataSourceFactory.createDataSource(pro);
//5.获取连接
Connection conn = ds.getConnection();
System.out.println(conn);
}
}
可以定义一个工具类
1. 定义一个类 JDBCUtils
2. 提供静态代码块加载配置文件,初始化连接池对象
3. 提供方法
1. 获取连接方法:通过数据库连接池获取连接
2. 释放资源
3. 获取连接池的方法