JDBC中PreparedStatement接口的使用

    xiaoxiao2026-02-28  5

      在《java使用JDBC连接MySql数据库》中说明了JDBC链接数据库的基本方式,其中执行SQL语句使用的是Statement接口,这里介绍一个更好用的接口,PreparedStantment接口。

    PreparedStatement是什么?

    public interface PreparedStatement extends Statement

    使用方法:

    Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); String sql = "insert into person(name,age,description)values(?,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); //设置占位符对应的值,问号是为占位符,有几个问号就代表要插入几个列,这样看来sql代码就比较简洁。 ps.setString(1, p.getName()); ps.setInt(2, p.getAge()); ps.setString(3, p.getDescription()); ps.executeUpdate(); ps.close(); conn.close();

    相对于Statement,PreparedStatement的特点是:参数化查询;

    优点是什么?

    1.提高代码的可读性

    SELECT name FROM table1 WHERE age=? ps.setString(1, "小明");

    ?:占位符

    2.提高性能

      使用 PreparedStatement 最重要的一点好处是它拥有更佳的性能优势,SQL语句会预编译在数据库系统中。执行计划同样会被缓存起来,它允许数据库做参数化查询。使用预处理语句比普通的查询更快,因为它做的工作更少(数据库对SQL语句的分析,编译,优化已经在第一次查询前完成了)。为了减少数据库的负载,生产环境中的JDBC代码你应该总是使用PreparedStatement 。值得注意的一点是:为了获得性能上的优势,应该使用参数化sql查询而不是字符串追加的方式。

    3.防止SQL注入式攻击

    什么是SQL注入?链接

      在使用参数化查询的情况下,数据库系统(eg:MySQL)不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有破坏性的指令,也不会被数据库所运行

    参考资料


    1.MySQL数据库学习笔记(九)—-JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释): 链接

    2.SQL注入攻击 : 链接

    3.JDBC为什么要使用PreparedStatement而不是Statement:链接

    相关资源:python入门教程(PDF版)
    最新回复(0)