1. JDBC介绍
我们之前学习MYSQL时,为了使用MYSQL服务,我们通常要使用客户端与MYSQL服务进行连接,然后才能输入SQL语句进行数据库 的各种操作。客户端有命令行与图形界面2种。 但是在更多的环境下,由我们人直接操作数据是很低效的,比如双11这种业务场景下,一秒中往往要在库中生成上千万甚至几亿 条数据,靠人来手工操作是不现实的,只能依赖于程序进行这种高并发的操作。 程序语言有多种,比如Java、Python、C/C++等,程序语言如果想执行SQL语句,也必须要先与数据库进行连接,数据库也有多 种,比如MySQL、Oracle、SQL Server等。 不同的程序语言去连接不同的数据库,如果没有一个统一的标准或者规范,肯定是相当混乱的。Java语言对此的解决方案就是 JDBC。 JDBC定义了一套规范标准,它对应的是各种接口与抽象类(通常对应java.sql包下面的各种类与接口),具体实现交给各数据 库厂商去完成,MySQL的有自己的实现类并打成jar包发布,供程序开发人员使用;Oracle也有自己的实现jar包。 我们开发人员在使用的时候,要根据连接数据库的不同,去对应的官网上下载对应数据库版本与程序语言的数据库驱动(Java语 言对应的是一个jar包)。(比如我们使用MySQL 5.1,就要去MySQL官网下载Java语言对应的jar包)
JDBC : Java DataBase Connectivity ?(java数据库链接) ? 是让java链接数据库的API API : Application Programming Intergace (应用程序接口) ? ? 就是函数库 所以 JDBC 就是提供java连接数据库的应用程序接口的,只是接口或者抽象类 而JDBC就是java中提供的一个规范,基本都是接口和抽象类作为父类,具体的实现,是数据库厂商去弄的,只不过这些厂商需要按 照我的接口标准来实现 如果我们要想操作数据库,就需要把厂商开发的实现类,导入进来
2. JDBC使用步骤
?? ?第0步: 导包 ?? ?第1步:注册驱动 (仅仅做一次) ?? ?第2步:建立连接(Connection) ?? ?第3步:创建运行SQL的语句对象(Statement) ?? ?第4步:运行语句 ?? ?第5步:处理运行结果(ResultSet) ?? ?第6步:释放资源 ?? ?
package mian;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Jdbc_01 {
//第0步: 导包
//第1步:注册驱动 (仅仅做一次)
//第2步:建立连接(Connection)
//第3步:创建运行SQL的语句对象(Statement)
//第4步:运行语句
//第5步:处理运行结果(ResultSet)
//第6步:释放资源
public static void main(String[] args) throws Exception {
//第1步:注册驱动 (仅仅做一次)
Class.forName("com.mysql.jdbc.Driver");
//第2步:建立连接(Connection)\
Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/_217_zuoye","root","224562");
//第3步:创建运行SQL的语句对象(Statement)
String sql="select * from test_jdbc";
Statement statement= conn.createStatement();
//第4步:运行语句
ResultSet resultSet = statement.executeQuery(sql);
//第5步:处理运行结果(ResultSet)
while(resultSet.next()){
System.out.print(resultSet.getString(1)+" ");
System.out.print(resultSet.getString(2)+" ");
System.out.print(resultSet.getString(3)+" ");
System.out.println();
//System.out.println("标签打印"+resultSet.getString( "name"));
}
//第6步:释放资源
resultSet.close();
statement.close();
conn.close();
}
}
事务
什么是事务?
在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)
四大特性
四大特性: ACID
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离 的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性 的。接下来的其他操作或故障不应该对其有任何影响。
连接池
?? ?数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一 个; ?? ?释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。 ?? ?这项技术能明显提高对数据库操作的性能 ?创建连接池工具类
public class BasicDataSourceUtil {
private BasicDataSource bds;
private static BasicDataSourceUtil bdsu;
/**
* 把初始化数据库链接的代码,放到了 单例模式的构造方法中
*
* 因为当前类是单例的,所以构造方法只能被执行一次,那么链接池对象也就成了单例
*/
private BasicDataSourceUtil() {
bds = new BasicDataSource();
Properties properties = PropertiesUtil.getProperties();
bds.setDriverClassName(properties.getProperty("driver"));
bds.setUrl(properties.getProperty("url"));
bds.setUsername(properties.getProperty("username"));
bds.setPassword(properties.getProperty("password"));
}
/**
* 主要为了解决高并发,所以需要线程安全的单例模式
*
* @return
*/
public static BasicDataSourceUtil getInstance() {
if (bdsu == null) {
synchronized (BasicDataSourceUtil.class) {
if (bdsu == null) {
bdsu = new BasicDataSourceUtil();
}
}
}
return bdsu;
}
/**
* 提供一个获取链接对象的方法
*
* @return
*/
public BasicDataSource getBasicDataSource() {
return bds;
}
}
|