JDBC
JDBC全称是java DataBase Connectivity 是java连接数据库的一套API,也是一套标准,该标准中定义了一系列接口,由数据库厂商根据自身数据库的特点分别实现,由开发者根据接口调用实现类的方法,这样无论连接什么样的数据库都是一套API,开发者开发时,可以屏蔽不同数据库的差异
驱动包
驱动包是数据库厂商针对JDBC规范所写的实现类,
连接不同数据库,应使用不同数据库厂商提供的驱动包
开发流程
JDBC主要完成数据库的磁盘数据和内存对象数据的交互,本质是流操作
- 建立连接
- 执行sql语句
- 关闭连接
怎么用JDBC
关键字:DriverManager
作用:
用于管理数据库驱动列表,使用通信子协议将来自Java的连接请求与适当的数据库驱动程序相匹配
使用:
DriverManager(url,username,password)
url:地址,具有特殊写法,比如“jdbc:mysql//localhost:3306/table_name"
username:登录数据库的用户名
password:登录数据库的密码
关键字:Connection
作用:
该类具有用于联系数据库的所有方法
使用:
Connect conn=DriverManager(url,username,password);
关键字:PreparedStatement
作用:
自动排除注入攻击;将从控制台获取的数据注入SQL语句
创建:
PreparedStatement ps=conn.preparedStatement();
注入:
根据数据类型分类注入,并输入要注入的字段在SQL语句中的位置与要注入的内容
ps.setInt(1,int i); //在select语句的第一处条件字段注入一个int值
ps.setString(2,String str); //在select语句的第二处条件字段注入一个字符串
关键字:ResultSet
作用:
作为迭代器,遍历state对象
前提:
state对象成功执行用于查询的SQL语句
创建:
ResultSet rs=state.executeQuery(select语句);
遍历:rs.next()
移动指针,若指向的数据不为null,则返回true;否则,返回false
获取:
根据数据类型分类获取,并输入要获取的字段在返回表中的位置(从1开始),如果成功返回收到影响的行数
rs.getInt(ColumnIndex); //获取整数型
rs.getString(ColumnIndex); //获取字符型
SQL注入
在执行SQL语句时,如果通过拼接字符串方式插入SQL语句的值,当值中有非法字符,或SQL语句关键字时,会导致SQL语句语法错误,或执行结果不正确的情况,这称为SQL注入
Statement和PrepareStatement的区别
Statement是PrepareStatement的父接口,在执行SQL语句时,只能通过拼接字符串方式插入SQL语句的值,不但效率低,而且容易引起SQL注入
PreparedStatement提供占位符方式插入SQL语句的值,SQL语句只会编译一次,效率较高。而且无论是什么值,都当字符串处理,不会引起SQL注入