DriverManager(驱动管理类)作用:
注册驱动:
Class.forName("com.mysql.jdbc.Driver");
内部调用了DriverManager.registerDriver(new Driver());
获取数据库连接:
Connection connection = DriverManager.getConnection(url, username, password);
Connection作用:
- 获取执行SQL的对象
- 管理事务
获取执行对象:
Statement statement = connection.createStatement();
预编译SQL的执行SQL对象,防止SQL注入
PreparedStatement preparedStatement = connection.prepareStatement(sql);
Statement和Preparedstatment的执行区别:
PrepareStatement:
为了防止SQL注入,在参数处使用的是?
//3.定义sql
String name = "zhangsan";
String pwd = "123";
String sql = "select * from tb_user where username = ? and password = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,name);
preparedStatement.setString(2,pwd);
ResultSet resultSet = preparedStatement.executeQuery();
Statement:
String sql = "drop database db2";
//4.获取执行sql的对象
Statement statement = connection.createStatement();
//5.执行sql
int i = statement.executeUpdate(sql);
结果集:ResultSet
和类结合在一起,使用ArrayList接收
ArrayList<Stu> stus = new ArrayList<>();
while(resultSet.next()){
Stu stu = new Stu();
stu.setPassword(resultSet.getString("password"));
stu.setName(resultSet.getString("name"));
stu.setAge(resultSet.getInt("age"));
stu.setSalary(resultSet.getInt("salary"));
stus.add(stu);
}
System.out.println(stus);
Preparedstatment防止注入原理:
把用户非法输入的单引号进行转义,最终传入参数作为一个整体执行,从而防止SQL注入。而Statement对象不会进行此操作。
Druid数据池:
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。数据库连接池其实就是一个容器(集合),存放着数据库连接。
标准接口:DataSource
使用流程:
- 导入jar包
- 定义配置文件
- 加载配置文件
- 获取数据库连接对象
- 获取数据库连接
//1.导入jar包
//2.druid配置
//3.加载配置
Properties prop = new Properties();
prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
//4.获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//5.获取数据库连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
对应的增删查改调用对应方法