Day19-JDBC
JDBC
数据库驱动
由数据库厂商提供,连接应用程序和数据库,如同显卡需要安装驱动
什么是JDBC
sun公司为了简化开发人员对于数据库的操作 ,提供了一个java操作数据库的规范,俗称JDBC
除java.sql和javax.sql还需要导入一个数据库连接包,需要和数据库版本相同
Java使用JDBC
六个步骤:
- 
加载驱动 - Class.forName("com.mysql.cj.jdbc.Driver");
 
- 
连接数据库DriverManager - Connection connection = DriverManager.getConnection(url,userName,password);
 
- 
获得执行sql的对象 - statement.executeQuery() //查询语句
- statement.executeUpdate() //修改更新删除
 
- 
获得返回的结果集 - 该结果集为一个链表,拥有链表的所有功能
 
- 
释放连接 
package com.JDBC.Test1;
import java.sql.*;
public class JdbcFirstDeMO {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.用户信息和url
        String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8";
        String userName="root";
        String password="cwt123456";
        //3.创建数据库连接
        Connection connection = DriverManager.getConnection(url,userName,password);
        //4.创建sql执行对象
        Statement statement = connection.createStatement();
        //5.执行语句
        String sql = "SELECT * FROM users";
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()){
            System.out.println(resultSet.getObject("id"));
        }
        //6.释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}
statement对象
用于向数据库发送sql语句,完成对数据库的增删改查
查询
Statement statement = connection.createStatement();
String sql = "SELECT * FROM users";
        ResultSet resultSet = statement.executeQuery(sql);
修改、更新、删除
Statement statement = connection.createStatement();
String sql = "delete fr";
        ResultSet resultSet = statement.executeQuery(sql);
sql注入
web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
Preparedstament
继承了statement类,遇到转移字符时会自动进行忽略,安全性较高,跟statement的不同点:对sql语句进行预编译,再进行赋值
package com.JDBC.Test2;
import com.JDBC.Test2.utils.jdbcUtils;
import java.sql.*;
public class PreparedTest {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Connection connection = null;
        PreparedStatement preparedStatement =null;
        ResultSet resultSet = null;
        String driver = "com.mysql.cj.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8";
        String user = "root";
        String password="cwt123456";
        Class.forName(driver);
        connection= DriverManager.getConnection(url,user,password);
        String sql = "select * from users where `id` = ?";
        preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1,1);
        resultSet=preparedStatement.executeQuery();
        while (resultSet.next()){
            System.out.println("查询成功");
        }
    }
}
数据库连接池
连接释放操作十分消耗资源
池化技术
预备一些池连接,客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并标记为忙,如果没有空闲连接,则新建连接,使用完毕后,此连接返回池内,并可再次使用
原理
获取的是connection的代理对象,使用完毕后,释放该对象、
实现方案
实现DataSource接口
使用开源数据
DBCP
C3P0
Druid
使用数据库池连接之后,可以不写数据库连接代码,但无论使用什么数据源都需要实现DataSource接口
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号