1、什么是JDBC?
Java DataBase Connectivity
在java语言中编写sql语句,对mysql数据库中的数据进行CRUD操作。
JDBC就是一堆接口,负责连接数据库的.
2、JDBC相关的类库在哪里?
java.sql.*;
3、JDBC本质上是一堆什么呢?
java.sql.*;
这个包下都是JDBC的接口,SUN公司制定的!
JDBC是体现“接口作用”的非常经典的例子。
JDBC降低了耦合度,提高了扩展力。
对于java程序员来说,不需要关心数据库是哪个品牌。只要面向JDBC接口编程就行!
JDBC整个程序的结构当中有三波人!
- 第一波:SUN公司,负责制定JDBC接口。这些接口已经写好了,在java.sql.*;
- 第二波:java.sql.*下面的所有接口都要有实现类,这些实现类是数据库厂家编写的【简称jar包】。
- 第三波:我们java程序员,面向JDBC接口写代码就行!
4、JDBC开发之前的准备工作?
eg. IDEA工具:
创建lib文件夹,把jar包复制进去,然后鼠标右击jar包,选择add as library…
5、JDBC编程六步
- 注册驱动
- 获取链接
- 获取数据库对象
- 执行SQL语句
- 处理查询结果集【注: 只有执行select语句才有第5步】
- 释放资源
6、JDBC代码模板
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2、获取数据库连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名", "用户名", "密码");
//3、获取数据库对象
stmt = conn.createStatement();
//4、执行sql语句
String sql = "SQL语句";
//int count = stmt.executeUpdate(sql);//执行insert、update、delete时用
rs = stmt.executeQuery(sql);//执行select时用
//5、处理操作结果集
while (rs.next()){
//操作
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//6、释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
9、Statement和PreparedStatement的区别
9.1、前言:什么是SQL注入?
模拟用户登录:
用户名:fdsa
密码:fdsa'or'1'='1
select * from t_user where login_name='fdsa' and login_pud='fdsa' or '1'='1'
登录成功!
以上随意输一个用户名和密码,登录成功了,这种现象被称为SQL注入现象!
9.1.1、号致SQL注人的想本原团是什么?怎么解决?
导致SQL注人的根本原因是:用户不是一般的用户,用户是懂得程序的,输入的用户名信息以及密码信息中含有SQL语句的关键字,这个SQL语句的关键字和底层的SQL语句进行“字符串拼接”,导致原SQL语句的含义被扭曲了。
最最最最最最主要的原因是:用户提供的信息参与了SQL 语句的编译。
9.1.2、主要团素是
这个程序是先进行的字符的拼接,然后再进行SQL语句的编译,正好被注入。|
9.2、Statement【父接口】
java.sql.Statement接口的特点:先进行字符的拼接,然后再进行sqL语句的编译。
优点: 使用statement 可以进行sql 语句的拼接。
缺点: 因为拼接的存在,导致可能给不法分子机会。
9.3、PreparedStatement【子接口】【可以避免SQL注入】
java.sql.PreparedStatement接口的特点: