Java学习-JDBC(二)

核心API

注册驱动
  • Class.forName(“com.mysql.cj.jdbc.Driver”);
  • 在Java中,当使用JDBC连接数据库时,需要加载数据库特定的驱动程序,以便与数据库进行通信,加载驱动程序的目的是为了注册驱动程序,使得JDBC API能够识别并与特定的数据库进行交互
  • 从JDK6开始,不需要显式地调用Class.forName()来加载JDBC驱动程序,只要在路径中集成了对应的jar文件,会自动在初始化时注册驱动程序。
    在这里插入图片描述
Connection
  • Connection接口是JDBC API的重要接口,用于建立与数据库的通信通道,Connection对象不为空,则代表一交数据库连接
  • 在建立连接时,需要指定数据库URL、用户名、密码参数
    • URL:jdbc:mysql://192.168.29.201:3306/jdbc
    • URL:jdbc:mysql://IP地址:端口号/数据库名?参数键值对1&参数键值对2
  • Connection接口还负责管理事务,Connection接口提供了commit和rollback方法,用于事务提交和回滚
  • 在使用JDBC技术时,必须先获取Connection对象,使用完毕后,要释放资源,避免资源占用造成泄露
Statement
  • Statement接口用于执行SQL语句并与数据库进行交互,它是JDBC API一个重要接口,通过Statement对象,可以向数据库发送SQL语句并获取执行结果
  • 结果可以是一个或多个结果
    • 增删改:受影响行数单个结果
    • 查询:单行单列,多行多列,单行多列等结果
  • Statement接口在执行SQL语句时,会产生SQL注入攻击问题
    • 不使用Statement执行动态构建的SQL查询时,往往需要将查询条件与SQL语句拼接在一起,直接将参数和SQL语句一并生成,让SQL的查询条件始终为true得到结果
public class JDBCInjection {
   
   
    public static void main(String[] args) throws SQLException {
   
   
        String url = "jdbc:mysql://192.168.29.201:3306/jdbc";
        String username = "root";
        String password = "Lotus!1120";
        Connection conn = DriverManager.getConnection(url, username, password);
        //获取执行SQL语句对象
        Statement statement = conn.createStatement();
        System.out.println("Please input your emp_name:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        //编写SQL语句并执行,接收返回结果集
        String statement_sql = "select * from jdbc.t_emp where emp_name='" + name +"'";
        System.out.println(statement_sql);
        ResultSet rs = statement.executeQuery(statement_sql);
        //处理结果
        while (rs.next()) {
   
   
            int emp_id = rs.getInt("emp_id");
            String emp_name = rs.getString("emp_name");
            double emp_salary = rs.getDouble("emp_salary");
            int emp_age = rs.getInt("emp_age");
            System.out.println(emp_id + "\t" + emp_name + "\t" + emp_salary + "\t" + emp_age);
        }

        //6.释放资源
        rs.close();
        statement.close();
        conn.close();
    }
//执行结果
Please input your emp_name:
abc' or '1'='1
select * from jdbc.t_emp where emp_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值