JDBC

在这里插入图片描述

什么是JDBC

JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问。
简单说就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

示例1

import java.sql.*;

public class TestJdbc3 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //驱动名
        String driverName = "com.mysql.jdbc.Driver";
        //连接数据库的url
        String url = "jdbc:mysql://localhost:3306/mydbjdbc?useSSL=false";
        //用户名
        String username = "root";
        //密码
        String password = "root";

        //加载驱动
        Class.forName(driverName);

        //假设用户输入的数据
        int stuid = 1;

        //SQL语句
        String sql = "SELECT * FROM tb_stu WHERE sid=" + stuid;
        //建立连接
        Connection connection = DriverManager.getConnection(url, username, password);

        //System.out.println(connection);
        Statement statement = connection.createStatement();
        //发送SQL语句
        ResultSet resultSet = statement.executeQuery(sql);

        //处理结果
        while(resultSet.next()) {
            int id  = resultSet.getInt("sid");
            String sname = resultSet.getString("sname");
            int sage = resultSet.getInt("sage");
            String sgender = resultSet.getString("sgender");
            System.out.println(id);
            System.out.println(sname);
            System.out.println(sage);
            System.out.println(sgender);
        }

        //释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

PreparedStatement

什么是SQL注入

用户输入的数据中有SQL关键字或语法并且参与了SQL语句的编译,导致SQL语句编译后的条件含义为true,一直得到正确的结果。这种现象称为SQL注入

如何避免SQL注入

由于编写的SQL语句是在用户输入数据,整合后再进行编译。所以为了避免SQL注入的问题,我们要使SQL语句在用户输入数据前就已进行编译成完整的SQL语句,再进行填充数据。

使用PreparedStatement。
预编译SQL语句

//SQL语句
String sql = "SELECT * FROM user WHERE username=? AND password=?";

//预编译SQL语句
PreparedStatement statement = connection.prepareStatement(sql);

设置参数

//设置参数
statement.setString(1, n);
statement.setString(2, p);

完整示例

import java.sql.*;

public class TestJdbc5 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //驱动名
        String driverName = "com.mysql.jdbc.Driver";
        //连接数据库的url
        String url = "jdbc:mysql://localhost:3306/mydbjdbc?useSSL=false";
        //用户名
        String username = "root";
        //密码
        String password = "root";

        //加载驱动
        Class.forName(driverName);

        //假设用户输入的数据
        String n = "abc' OR 1=1 OR '1=1";
        String p = "123";

        //SQL语句
        String sql = "SELECT * FROM user WHERE username=? AND password=?";
        //建立连接
        Connection connection = DriverManager.getConnection(url, username, password);

        //预编译SQL语句
        PreparedStatement statement = connection.prepareStatement(sql);
        //设置参数
        statement.setString(1, n);
        statement.setString(2, p);

        //发送SQL语句
        ResultSet resultSet = statement.executeQuery();

        //处理结果
        while(resultSet.next()) {
            System.out.println(resultSet.getString("username"));
            System.out.println(resultSet.getString("password"));
        }

        //释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值