JDBC学习笔记

JDBC-1

1. JDBC的概述

​ JDBC是什么?/

img

​ 什么是数据库驱动?

​ 驱动:两个设备(应用)之间通信的桥梁。

2.使用JDBC

2.1 使用JDBC的四个步骤(记住!)

加载驱动

1
Class.forName("com.mysql.jdbc.Driver");

获得连接

1
2
3
4
5
String url = "jdbc:mysql://localhost:3306/test01";  //默认不开启批处理 
// 开启批处理需在 url后加上 "?rewriteBatchedStatements = ture"
username = "root";
password = "abc";
Connection conn = DriverManager.getConnection(url,username,password);

执行SQL

1
2
3
4
5
6
7
8
9
10
// 1.创建SQL语句执行对象
Statement stmt = conn.createStatement();
// 2.编写SQL语句
String sql = "select * from user";
// 3.执行SQL语句
ResultSet rs = stmt.executeQuery(sql);
// 4.遍历结果集
while(rs.next()){
System.out.println(rs.getInt("id")+" "+rs.getString("username")+" "+rs.getString("password"));
}

释放资源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if(rs != null){
try{
rs.close();
}catch(Exception e){
e.printStackTrace();
}
rs = null;//加快被垃圾回收器处理
}

if(stmt != null){
try{
stmt.close();
}catch(Exception e){
e.printStackTrace();
}
stmt = null;
}
if(conn != null){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
conn = null;//加快被垃圾回收器处理
}

2.2 JDBC的4个API

DriverManager

​ 作用一:注册驱动

img

这个方法可以完成驱动的注册,但是实际开发中一般不会使用这个方法完成驱动的注册!!!

原因:

如果需要注册驱动,就会使用DriverManager.registerDriver(new Driver());,但是查看源代码发现,在代码中有一段静态代码块,静态代码块已经调用了注册驱动的方法。

img

l 如果再手动调用该方法注册驱动,就会导致驱动被注册两次。实际开发中一般会采用:

img

作用二:获得连接

img

这个方法就是用来获得与数据库连接的方法:这个方法中有三个参数:

l url :与数据库连接的路径

l user :与数据库连接的用户名

l password :与数据库连接的密码

主要关注的是url的写法:

jdbc:mysql://localhost:3306/web_test3

l jdbc :连接数据库的协议

l mysql :是jdbc的子协议

l localhost :连接的MySQL数据库服务器的主机地址。(连接是本机就可以写成localhost),如果连接不是本机的,就需要写上连接主机的IP地址。

l 3306 :MySQL数据库服务器的端口号

l web_test3 :数据库名称

url如果连接的是本机的路径,可以简化为如下格式:

jdbc:mysql:///web_test3


Connection

作用一:创建执行SQL语句的对象

1558603443765

执行SQL语句对象:
 Statement :执行SQL
 CallableStatement :执行数据库中存储过程
 PreparedStatement :执行SQL.对SQL进行预处理。解决SQL注入漏洞

作用二:管理事务

1558603549213


Statement

作用一:执行SQL

1558603617085

 boolean execute(String sql); 执行查询,修改,添加,删除的SQL语句。
 ResultSet executeQuery(String sql); 执行查询(执行select语句)。
 int executeUpate(String sql); 执行修改,添加,删除的SQL语句。

作用二:执行批处理

1558603744629


ResultSet

​ ResultSet:结果集

​ 通过select语句的查询结果。

img

结果集遍历原理

img

代码实现

img

结果集的获取

1558603990700

 结果集获取可以使用结果集中的:
getXXX();方法通常都会有一个重载的方法。
 getXXX(int columnIndex);
 getXXX(String columnName);


3. 使用JDBC去实现增删改查(补齐)

1
2


4. SQL注入漏洞

​ 原因: 在变量中存在SQL中的关键字

​ or

​ –

​ 处理方案:使用预编译的statement PreparedStatement
​ 编写SQL时 参数需要用?代替 编译之后再给占位符上的参数赋值

改写案例:
使用JDBC去实现增删改查(普通的statement替换成PreparedStatement)

5. 批处理:

addBatch(String sql)
excuteBatch();
clearBatch();

数据库默认没有开启批处理
url=jdbc:mysql://locahost:3306/test?rewriteBatchedStatements=true