1. JDBC

1.1代码实现

        // 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 获取连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3309/db02?characterEncoding=utf-8&useSSL=false", "root", "root");
        String sql = "Select * from tb_user where username = ? and password = ? ";
        // 获取执行sql的框架
        PreparedStatement pps = connection.prepareStatement(sql);
        pps.setObject(1,userName);
        pps.setObject(2,password);
        // 执行sql
        ResultSet resultSet = pps.executeQuery();
        // 处理数据
        if (resultSet.next()) {
            System.out.println("登录成功");
        } else {
            System.out.println("登录失败");
        }
        // 关闭资源
        resultSet.close();
        pps.close();
        connection.close();

1.2详解api

1.2.1 DriverManager

API 说明
registerDriver(java.sql.Driver driver) 注册驱动jar包
Connection getConnection(String url, String user, String password) 获取数据库连接对象

上面2个API真正的重点在第二个上getConnection(),第一个在开发中是不写的!!!

1.2.1.1注册驱动

//在开发中我们通常使用下面代码来实现驱动的注册
Class.forName("com.mysql.jdbc.Driver");

1.2.1.2获取连接

Connection getConnection(String url, String user, String password)

在开发中我们在填写数据库连接地址的时候可以使用如下两种方式(MySQL)

方式一:完整版

jdbc:mysql://IP:端口/数据库名称

方式二:简写版(仅限于连接本地的MySQL,端口必须是3306)

jdbc:mysql:///数据库名称

在开发中我们通常还需要给我们的连接地址设置参数

我们url暂时可以写成下面的格式

jdbc:mysql://IP:端口/数据库名称?characterEncoding=utf-8&useSSL=false

1.2.2 Connection

Connection conn = DriverManager.getConnection(url, "root", "root");
// 开启事务
conn.setAutoCommit(false);
// 提交
conn.commit();
// 回滚
conn.rollback();
API 说明
conn.createStatement() 创建执行sql的对象(一般不用)
conn.prepareStatement() 创建预编译执行sql的对象
conn.setAutoCommit(false) 开启事务
conn.commit() 提交事务
conn.rollback() 回滚事务

1.2.3Statement

用处:执行sql语句

API 说明
statement.executeUpdate() 增删改
statement.executeQuery()

1.2.4ResultSet

作用:封装数据库查询的结果

API 说明
resultSet.next() 判断是否有数据,游标下移
resultSet.getXXX("字段名") 获取字段名对应的值

1.2.5 jdbc基本连接实例(有sql注入风险)

// 1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.获取连接
String url = "jdbc:mysql://192.168.10.199:3306/db02?userSSL=false";
Connection conn = DriverManager.getConnection(url, "root", "root");

// 3. 创建执行sql的对象
Statement statement = conn.createStatement();
String sql = "select * from dept ";
// 4.执行,获取结果
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
    // 5.对结果进行处理
    float deptno = resultSet.getFloat("DEPTNO");
    String dName = resultSet.getString("DNAME");
    String loc = resultSet.getString("LOC");
    System.out.println(deptno+"|"+dName+"|"+loc);
}
// 6.关闭连接,释放资源
resultSet.close();
statement.close();
conn.close();

1.2 .sql注入&解决方案

1.2.1 什么是sql注入

​ SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

1.2.2 sql注入产生的原因

用户输入的参数被当做了sql关键字进行了解析执行

1.2.3 解决办法

使用PreparedStatement代替Statement,使用占位符。在执行sql的时候,PreparedStatem会自动将有特殊含义的字符转换,使其失去特殊含义

如人饮水,冷暖自知。
最后更新于 2023-08-05