(一)、jdbc概念
java操作数据的驱动程序是这样的
有了jdbc后是这样的
由此可见,jdbc是为了简化开发人员对数据库的操作而产生的java操作数据库的规范。
(二)、DBC使用案例
package JDBC.jdbcDemo;
import java.sql.*;
public class JDBCDemo01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
加载驱动
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&cjaracterEncoding=utf-8&useSSL=true";
String username = "root";
String password = "root";
// 使用url,username,password常见连接对象
Connection connection = DriverManager.getConnection(url, username, password);
// 创建sql执行对象
Statement statement = connection.createStatement();
String sql = "select * from student";
执行sql返回结果集
ResultSet resultSet = statement.executeQuery(sql);
// 遍历得到结果
while(resultSet.next()){
System.out.println(resultSet.getObject("id"));
System.out.println(resultSet.getObject("name"));
}
// 关闭资源(后使用的先关闭)
resultSet.close();
statement.close();
connection.close();
}
}
(三)、JDBC中常用方法
方法 | 描述 |
---|---|
statement.executeQuery(); | 查询操作,返回查询结果集 |
statement.execute() ; | 可执行所有sql,但需要判断,效率比较低 |
statement.executeUpdate(); | 执行更新、插入、删除操作,返回受影响的行数 |
resultSet.beForeFirst(); | 将游标移到最前面 |
resultSet.afterLast(); | 将游标移动到最后面 |
resultSet.next(); | 将游标移动到下一行 |
resultSet.previous(); | 将游标移动到前一行 |
resultSet.absolute(); | 将游标移动到指定行 |
(四)、SQL注入
1、什么是SQL注入
一般登录时将用户输入的用户名和密码拼接成sql时这个样子:
select * from user where username = ‘1234’ and password = ‘qwer’
但是有人找到了漏洞,输入用户名和密码时这样输入
用户名:’ ’ or 1=1,密码:’ ’ or 1 = 1
使得字符串拼接成的sql语句为这样:
select * from user where username = ’ ’ or 1=1 and password = ’ ’ or 1 = 1;
这样也使得sql语句成立,从而查询出数据库的数据来。
2、防止SQL注入的方法
再使用jdbc时,sql语句执行对象使用PreparedStatement(预编译sql),且该对象的执行效率更高
PreparedStatement preparedStatement = connection.prepareStatement(sql);//预编译sql,先写sql,虽然不执行
preparedStatement.setInt(1,4);
preparedStatement.setString(2,"hx");
//执行
preparedStatement.executeUpdate();
(五)、数据库连接池
频繁的对数据操作:连接、执行、释放 ,是十分消耗性能的
数据库连接池就是提前准备一些链接放在池子中,需要用时从连接池中去除连接,使用完毕后将连接放回连接池中,这样避免了重复连接和释放连接。
常见的开源数据库连接池有:DBCP、C3PO、Druid…