文章目录
JDBC
一、概述
1.简述
Java Data Base Connectivity(Java数据库连接),它是Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API,根本上说JDBC是一种规范,它提供的接口,一套完整的,允许便捷式访问底层数据库。可以用JAVA来写不同类型的可执行文件:JAVA应用程序、JAVA Applets、Java Servlet、JSP等,不同的可执行文件都能通过JDBC访问数据库,又兼备存储的优势。简单说它就是JAVA与数据库的连接的桥梁或者插件,用JAVA代码就能操作数据库的增删改查、存储过程、事务等。
2.工作原理图
二、JDBC使用步骤
1.初始化驱动
- 导入需要操作的数据库jdbc驱动包
- 初始化驱动类com.mysql.jdbc.Driver
class TestJDBC{
public static void main(String[] args) {
//初始化驱动
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("数据库驱动加载成功 !");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
2.建立JDBC和数据库之间的Connection连接
// 这里需要提供:
// 数据库所处于的ip:127.0.0.1 (本机)
// 数据库的端口号: 3306 (mysql专用端口号)
// 数据库名称 zzyyp
// 编码方式 UTF-8
// 账号 root
// 密码。。。。。。
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
class TestJDBC {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/zzyyp?characterEncoding=UTF-8",
"root", "密码");
System.out.println("连接成功,获取连接对象: " + c);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3.创建Statement或者PreparedStatement接口,执行SQL语句
作用
-
Statement:用于执行SQL语句的工具接口。该对象及可以执行DDL/DCL语句,也可以用于执行DML语句,还可以用于执行SQL查询,返回查询到的结果集。常用方法如下:
a. ResultSet executeQuery(String sql)throws SQLException:该方法用户执行查询语句,并返回查询结果对应的ResultSet对像。该方法只能用于执行查询语句。
b. int executeUpdate(String sql)throws SQLException:该方法用于执行DML语句,并返回受影响的行数;该方法也可以用于执行DDL语句,执行DDl语句将返回为0;
c. boolean execute(String sql)throws SQLException:该方法可以执行任何SQL语句。如果执行后第一个结果为ResultSet对象,则返回TRUE;如果执行后第一个结果为受影响的行 数或者没有任何结果,则返回false; -
PreparedStatement:同样有executeUpdate() executeQuery() execute()三个方法,只是这个三个方法无需接收SQL字符串,因为PrepareStatement对象已经与变异了SQL命令,只要为这些命令传入参数即可。
// 准备sql语句
String sql = " ******** "
s.execute(sql);
System.out.println("success");
差异
- Statement接口在创建语句对象时,不带参数,进行查询更新操作时,再传入完整的SQL 语句。而PreparedStatement接口创建预处理语句对象时,传入带SQL语句,进行查询更新操作时,不带参数。
- PreparedStatement接口代码可读性高,无需拼接SQL语句,语句和代码分离。
- PreparedStatement接口执行效率高,它预编译和缓存了结构相同的SQL语句,想String常量池。
- PreparedStatement接口安全性更高,避免了产生SQL漏洞注入。
4.处理和显示结果
ResultSet executeQuery(String sql)
5.释放资源
数据库的连接是有限资源,先关闭Statement,后关闭Connection.
finally {
// 先关闭Statement
if (s != null)
try {
s.close();
} catch (SQLException e) {
e.printStackTrace();
}
// 后关闭Connection
if (c != null)
try {
c.close();
} catch (SQLException e) {
e.printStackTrace();
}
三、JDBC事务
1.事务概念
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如 begin transaction 和 end transaction 语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
2.事务的特性
-
原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。
-
一致性(consistency):事务在完成时,必须是所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
-
隔离性(isolation):一个事务的执行不能被其他事务所影响。
-
持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中。即使此时再执行回滚操作也不能撤消所做的更改。
3.JDBC事务使用
conn.setAutoCommit(0);//修改系统非自动提交。
conn.commit();//事务提交
conn.rollback();//事务回滚
SavePoint sp=con.setSavePoint();//设置保存点
conn.rollback(sp);//返回保存点
conn.setTransactionIsolation();//设置隔离级别
conn.getTransactionIsolation();//获取隔离级别