• JDBC一般使用过程+两种statement的区别


    JDBC的使用过程

     		// 1. 加载驱动(类加载)
            Class.forName("com.mysql.cj.jdbc.Driver");
    
            // 2. 获取连接
            Connection connection = DriverManager.getConnection(url, 
            username, password);
            
    		// 3. 获取执行sql的对象(两种statement,重要:防止sql注入)+ 执行sql
    		Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(querySql);
            // 4. 获取结果集+遍历结果集
            while (resultSet.next()) {
                String s_id = resultSet.getString("s_id");
                String s_name = resultSet.getString("s_name");
                String s_birth = resultSet.getString("s_birth");
                String s_sex = resultSet.getString("s_sex");
                System.out.println("s_id=" + s_id + ",s_name=" + s_name + ",s_birth=" + s_birth + ",s_sex=" + s_sex);
                // 5. 释放资源
            if (resultSet != null) {
                resultSet.close();
            }
            statement.close();
            connection.close();
            }
    
    

    上面只是一般的使用过程

    两种statement

    第三步的实际使用当中,我们大多数情况下都会使用PrepareStatement而不是Statement

    public class PreparedStatementDemo {
    
        public static void main(String[] args) throws ClassNotFoundException, SQLException {
            // 1. 获得数据库连接
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:8066/dbtest?useServerPrepStmts=true", "root", "123456");
    
            // PreparedStatement
            PreparedStatement ps = conn.prepareStatement("SELECT id, username, password FROM t_user WHERE id = ?");
            ps.setLong(1, Math.abs(new Random().nextLong()));
    
            // execute
            ps.executeQuery();
    		// 关闭资源
    		ps.close();
    		conn.close();
        }
    
    }
    链接:https://juejin.cn/post/6844903490058190862
    来源:稀土掘金
    

    prepareStatement的好处

    Prestatement相比于普通的Statement有几点好处:

    1. PreparedStatement可以有效防止sql注入,而Statment不能防止sql注入
    2. PreparedStatement可以使用预编译的sql(对于批量处理可以大大提高效率. 也叫JDBC存储过程),而Statment只能使用静态的sql

    statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译的

    如果相同语法(变量参数可以不一样)的sql在短时间内反复被JDBC调用执行,preparedstatement可以降低执行时间,提高执行效率(每次JDBC请求只需要传递?的值即可,减少网络传输和 SQL 解析开销)

    PreparedStatement是存储在JDBC里的,初始化后,缓存到了JDBC里,初始化的开销比Statement大,对于少量的查询操作没有优势,适用于大量的查询语句才能体现性能的优势。

    细致的说,所谓的预编译,本质就是preparedstatement使用了mysql的cache缓存(Map数据结构)

    1. preparenment的使用可以增加代码的可读性和可维护性
  • 相关阅读:
    01 - 快速体验 Spring Security 5.7.2 | 权限管理基础
    拒绝服务攻击工具
    Android获取本地文件目录
    uniapp vue国际化 i18n
    一个用mediapipe计算脸部朝向的简单方法
    【剑指offer系列】44. 数字序列中某一位的数字
    2023/9/14 -- C++/QT
    MongoDB语言命令
    springboot项目打jar包的方法
    setState到底是异步还是同步?
  • 原文地址:https://blog.csdn.net/new_light123/article/details/139427515