jdbc的概述 【重点】
jdbc的入门程序 【重点】
jdbc的API 【重点】
jdbc的增删改查操作 【重点】
SQL注入问题及解决 【重点】
连接池技术 【重点】
jdbc的练习 【重点】
jdbc的概述
什么是jdbc
Java database connectivity Java数据库连接技术
这门技术可以让我们使用Java代码操作数据库
jdbc本质上其实是Java官方提供的一个规范(标准/接口),不同的关系型的数据库厂商如果
想要能通过Java代码操作其数据库,就必须实现这个规范,由于规范是统一的,不同的数据库厂商
的实现是不同的,所以我们使用jdbc操作不同的数据库的时候,Java代码基本上是一样,但是不同的
数据库厂商提供的驱动jar包是不同的。
驱动jar包:不同的数据库厂商实现了jdbc规范之后的代码打成一个包,就是驱动jar包。
JDBC底层还是在通过SQL操作数据库,只不过通过网络技术将Java代码中嵌套的SQL发送到数据库进行操作,
数据库操作完毕之后会将操作的结果再发送回Java代码
jdbc的入门程序
步骤:
0、导入驱动jar包
1、注册驱动
2、获取连接对象
3、获取SQL的执行者对象
4、定义SQL
5、执行SQL,获取结果
6、操作结果
7、释放资源
jdbc的API
DriverManager类:驱动管理类
* 注册驱动
static void registerDriver(Driver driver)
注册驱动的两种方式:
(1)Class.forName("com.mysql.jdbc.Driver");
(2)DriverManager.registerDriver(new Driver());
以上两种方式我们推荐使用第(1)种,因为第(2)种方式也加载两次驱动
* 获取连接
static Connection getConnection(String url, String user, String password)
String url, 连接的url
MySQL的url格式:
协议://ip:端口号/数据库名称
jdbc:mysql://localhost:3306/db6
注:
1、不同的数据库url格式不同
2、如果连接的是本机的默认端口的MySQL数据库,url可以简写:
jdbc:mysql:///db6
String user, 数据库用户名
String password 数据库密码
Connection接口:连接对象
* 获取SQL的执行者对象
Statement createStatement()
PreparedStatement prepareStatement(String sql)
* 事务管理 【了解】
void setAutoCommit(boolean autoCommit):传递false表示开启
void commit()
void rollback()
Statement接口:SQL的执行者对象
* 执行SQL
int executeUpdate(String sql)
* 执行DML和DDL语句
参数:要执行的SQL
返回值:影响的行数
ResultSet executeQuery(String sql)
* 执行DQL语句
ResultSet接口:结果集对象
只有查询才会涉及该对象的,增删改不会涉及该对象
该对象中封装了查询出来的结果
* 获取数据
boolean next() :
1、光标往下一行
2、返回是否是有效数据
xxx getXxx(int columnIndex)
xxx getXxx(String columnLabel)
其中的xxx表示的是数据类型,比如:
int getInt(int columnIndex)
double getDouble(int columnIndex)
String getString(int columnIndex)
参数:
int columnIndex:列的编号,编号从1开始
String columnLabel:列的名称 【推荐】
PreparedStatement接口:预编译的SQL的执行者对象
PreparedStatement是Statement的子接口
相比Statement的好处:
1、可以预编译,效率高
2、可以防止SQL注入问题
结论:以后我们都使用PreparedStatement,而不选择Statement
PreparedStatement执行的SQL如果有动态数据,不是直接拼接,而是先用占位符进行占位,然后再
给占位符进行赋值,使用?作为占位符。
* 执行SQL
int executeUpdate() :执行DML和DDL语句
ResultSet executeQuery() :执行DQL语句
* 设置占位符的值
void setXxx(int parameterIndex, xxx x)
Xxx表示数据类型,比如:
void setString(int parameterIndex, String x)
void setInt(int parameterIndex, int x)
void setDouble(int parameterIndex, double x)
jdbc的增删改查操作
SQL注入问题及解决
SQL注入问题演示
SQL注入问题:通过输入值和SQL拼接在一起,从而改变了SQL本来的含义,从而达到一种对系统进行攻击的目的
a' or 'a' = 'a
b' or 'b' = 'b
2' or '1' = '1
SQL注入问题解决
连接池技术
什么是连接池
用于管理和存储数据库连接(Connection对象)的容器
连接池有一个规范(DataSource接口),也是Java官方提供的,所有的连接池技术都必须实现这个规范
连接池获取连接对象的共性操作,是定义在DataSource接口中的:
* Connection getConnection()
连接池的好处
1、提高资源的复用
2、提高响应速度
3、方便统一管理
常见的连接池技术
C3P0
dbcp
druid
Druid的使用
1、导入jar包
2、复制并修改配置文件
3、加载配置文件
4、获取连接池对象
5、获取连接
jdbc的练习
需求
完成商品品牌数据的增删改查操作
查询:查询所有数据
添加:添加品牌
修改:根据id修改
删除:根据id删除
步骤:
1、准备工作
(1)创建表,准备表数据
(2)定义一个标准类Brand,用于存储商品信息
(3)导入驱动jar包、导入druid连接池的jar
2、查询
3、添加
4、修改
5、删除