一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入

一、JDBC的概述
###<1>概念
JDBC:java database connection ,java数据库连接技术
是java内部提供的一套操作数据库的接口(面向接口编程),实现对数据库的统一访问。

###<2>作用
是连接java应用程序和数据库的一个桥梁和纽带
体现了java的one write , run anywhere
![](1.png)

###<3>组成
DriverManager类:驱动管理类,用于注册驱动
Connection接口:数据库连接接口,和数据库连接
Statement接口:操作数据库中数据的接口,执行sql语句
PreparedStatement接口:操作数据库中数据的接口,执行sql语句,预处理的能力
ResultSet接口:结果集接口,封装了查询的结果数据
![](2.png)

# 二、通过JDBC实现对数据库的操作
###<1>准备
1. 创建一张表
create table person(
id smallint primary key auto_increment,
name varchar(20)not null,
age tinyint unsigned not null,
gender enum('男','女'),
shows varchar(50)
)

2. 创建一个Bean对象
class Person{
int id;
}

3. 导入MySQL数据库厂商提供的驱动

4. 操作数据,使用JDBC访问数据库的步骤:(记住)
1. 加载数据库驱动程序
2. 获取数据库连接对象
3. 编写SQL语句
4. 获取Statement对象,执行SQL语句
5. 处理结果集数据
6. 释放资源

###<2>实现:使用jdbc实现数据插入操作
1. 加载数据库驱动程序
Class.forName("com.mysql.jdbc.Driver");
2. 获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?user=root&password=123");
3. 编写SQL语句
String insertSQL = "insert person value(null,'北川杏树',39,2,'一个粗犷的老男人')";
4. 获取Statement对象,执行SQL语句
Statement st = conn.createStatement();
st.executeUpdate(insertSQL);
5. 处理结果集数据
6. 释放资源
st.close();
conn.close();

###<3>DriverManager类介绍
作用:注册数据库驱动
获取数据库连接对象

3.1 注册数据库驱动,方式一:
DriverManager.registerDriver(new 具体的驱动对象);

注册数据库启动,方式二:
Class.forName("驱动的全路径");

特点:方式一,程序的依赖性强,驱动注册了两次
方式二,程序更灵活,拓展性强

3.2 获取连接对象
DriverManager.getConnection(String url,String username,String password);
DriverManager.getConnection(String url,Properties info);
DriverManager.getConnection(String url_user_pwd);

参数一:连接数据库的URL
URL的组成:协议 + ip地址 + 端口号 + 数据库名称
例如:jdbc:mysql 127.0.0.1 3306 db1

参数二:用户名,root
参数三:密码,123

###<4>Connection接口介绍:
作用:和数据库建立起连接
方法:Statement createStatement();
创建一个Statement对象,执行SQL语句

事务操作的方法:


###<5>Statement接口介绍:
作用:执行SQL语句(将SQL语句发送到数据库)
返回结果集对象
方法:
int executeUpdate(String sql) 更新数据
ResultSet executeQuery(String sql) 查询数据

批处理方法:
void addBatch(String sql)
将SQL语句添加到Statement的执行列表中
int[] executeBatch()
将一批命令提交给数据库执行

###<6>ResultSet接口介绍:
作用:用来封装结果集数据,内部含有一个游标,默认指向数据前
方法:
boolean next() 将游标从当前位置向下移动一行
getObject(String columnName) 获取数据
getObject(int columnIndex) 获取数据

注意1:结果数据中字段的顺序和数据库表中字段顺序没有关系。
通过getObejct(int index)方式获取数据时,从1开始
推荐使用getObject(String columnName) 获取数据
![](3.png)

注意2:
在finally代码块中释放资源
在释放资源之前需要做非空判断

# 练习
使用JDBC实现数据的插入操作
使用JDBC实现对数据库数据的修改和删除

# 三、封装JDBC访问数据库的工具类(重点)
优化代码:提高代码的重用性,将一个公用的代码提取成方法

// 加载驱动
static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

// 获取数据库连接对象
public static Connection getConnection(String url, String root, String pwd) throws SQLException {
Connection conn = DriverManager.getConnection(url,root,pwd);
return conn;
}

// 释放资源
public static void closeRes(Connection conn, Statement st, ResultSet rs) {
if (rs != null)rs.close();
if (st != null)st.close();
if (conn != null)conn.close();
}

提取数据库配置信息:
java中提供了properties配置文件,存储配置信息。
文件类型.properties,文件内容:键=值 的方式存储信息。
使用#注释信息


1.编写MySQL相关参数的配置文件
mysqlDriver=com.mysql.jdbc.Driver
mysqlURL=jdbc:mysql://localhost:3306/db1
mysqlUser=root
mysqlPwd=123

2. 加载配置文件中的数据
// 加载驱动
static{
//加载配置文件
//参数一:配置文件的路径
ResourceBundle rb = ResourceBundle.getBundle("cn.xdl.demo.db_config");
USER = rb.getString("mysqlUser");
PWD = rb.getString("mysqlPwd");
URL = rb.getString("mysqlURL");
DRIVER = rb.getString("mysqlDriver");

System.out.println(USER+","+PWD);

try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

# 练习
使用JDBC查询数据库中的数据
封装操作数据库的工具类

# 四、使用JDBC实现登陆和注册功能
分析:
cn.xdl.client
ClientMain
cn.xdl.entity
UserBean
cn.xdl.service 业务逻辑处理包
ApplicationService
cn.xdl.util
DBUtils

创建用户表:
create table user(
id int primary key auto_increment,
user varchar(20) not null unique,
pwd varchar(20) not null
)

# 练习
实现注册和登陆功能

# 五、防止SQL注入
###<1>PreparedStatement接口介绍:
使用:
在预处理操作中使用'?'进行占位操作。
执行sql语句时,进行数据的动态设置

好处:安全较高
性能能搞,书写灵活

方法:
PreparedStatement pst = Connection对象.preparedStatement(sql语句);
补全:
setObject(位置,数值);
注意,位置从1开始

执行:
ResultSet rs = pst.executeQuery();
int result = pst.executeUpdate();

不忘初心,方得始终! 坚持!坚持!坚持!!
原文地址:https://www.cnblogs.com/sumboy/p/9058628.html