#博学谷IT学习技术支持##博学谷IT学习技术支持#
JDBC概念:
JDBC( Java DataBase Connectivity ) Java 数据库连接 ,就是使用Java语言操作关系型数据库的一套API。
同一套Java代码操作不同的关系型数据库,而此时sun公司就指定了一套标准接口(JDBC),JDBC中定义了所有操作关系型数据库的规则。众所周知接口是无法直接使用的,我们需要使用接口的实现类,而这套实现类(称之为:驱动)就由各自的数据库厂商给出。1.2 JDBC本质
JDBC本质:
1.官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口
2.各个数据库厂商去实现这套接口,提供数据库驱动jar包
3.我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
JDBC好处:
1.各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
2.可随时替换底层数据库,访问数据库的Java代码基本不变
通过Java操作数据库的流程:
1.编写Java代码
2.Java代码将SQL发送到MySQL服务端
3.MySQL服务端接收到SQL语句并执行该SQL语句
4.将SQL语句执行的结果返回给Java代码
代码编写步骤:
1.创建工程,导入驱动jar包
2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
3.获取连接
Connection conn = DriverManager.getConnection(url, username, password);
4.定义SQL语句
String sql = “update…” ;
5.获取执行SQL对象
Statement stmt = conn.createStatement();
6.执行SQL
stmt.executeUpdate(sql);
7.处理返回结果
8.释放资源
Connection:
Connection(数据库连接对象)作用:
1.获取执行 SQL 的对象。
2.管理事务。
获取执行对象:
1.普通执行SQL对象。
Statement createStatement()
2.预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
通过这种方式获取的 PreparedStatement
SQL语句执行对象,它可以防止SQL注入。
3.执行存储过程的对象
CallableStatement prepareCall(sql)
通过这种方式获取的 CallableStatement
执行对象是用来执行存储过程的,而存储过程在MySQL中并不常用。
Connection接口中定义的3个方法:
1.开启事务
2.提交事务
3.回滚事务
代码如下:
/**
* JDBC API 详解:Connection
*/
public class JDBCDemo3_Connection {
public static void main(String[] args) throws Exception {
//1. 注册驱动
//Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接:如果连接的是本机mysql并且端口是默认的 3306 可以简化书写
String url = "jdbc:mysql:///db1?useSSL=false";
String username = "root";
String password = "****";
Connection conn = DriverManager.getConnection(url, username, password);
//3. 定义sql
String sql1 = "update account set money = 3000 where id = 1";
String sql2 = "update account set money = 3000 where id = 2";
//4. 获取执行sql的对象 Statement
Statement stmt = conn.createStatement();
try {
// ============开启事务==========
conn.setAutoCommit(false);
//5. 执行sql
int count1 = stmt.executeUpdate(sql1);//受影响的行数
//6. 处理结果
System.out.println(count1);
int i = 3/0;
//5. 执行sql
int count2 = stmt.executeUpdate(sql2);//受影响的行数
//6. 处理结果
System.out.println(count2);
// ============提交事务==========
//程序运行到此处,说明没有出现任何问题,则需求提交事务
conn.commit();
} catch (Exception e) {
// ============回滚事务==========
//程序在出现异常时会执行到这个地方,此时就需要回滚事务
conn.rollback();
e.printStackTrace();
}
//7. 释放资源
stmt.close();
conn.close();
}
}