preparedStatement和Statement区别

2020-06-03  本文已影响0人  Time一柒
/**
     * 查询方法
     * @param sql 执行的sql
     * @return ListMap
     */
    public static List<Map<String, Object>> MysqlSelectWhereList(String sql){
        List<Map<String,Object>> list = new ArrayList<>();
        try
        {
            Class.forName(driver);//加载驱动程序
            Connection c =DriverManager.getConnection(url,user,password);//连接数据库
            if(!c.isClosed())
                System.out.println("成功链接数据库!");

//          使用Statement对象
//          使用范围:当执行相似SQL(结构相同,具体值不同)语句的次数比较少
//          优点:语法简单
//          缺点:采用硬编码效率低,安全性较差。
//          原理:硬编码,每次执行时相似SQL都会进行编译
            Statement statement =c.createStatement();//操作数据库
            
//          预编译PreparedStatement
//          使用范围:当执行相似sql语句的次数比较多(例如用户登陆,对表频繁操作..)语句一样,只是具体的值不一样,被称为动态SQL
//          优点:语句只编译一次,减少编译次数。提高了安全性(阻止了SQL注入)
//          缺点: 执行非相似SQL语句时,速度较慢。
//          原理:相似SQL只编译一次,减少编译次数
            PreparedStatement ps = c.prepareStatement(sql);//这里使用了prepareStatement()方法//操作数据库
            ps.setString(1, "");//这里设置?的值  1对应第一个?
            ps.setString(2, "");

            //String sql ="select * from register_followyangxingpatient";//要执行的sql语句
            ResultSet rs=statement.executeQuery(sql);

            ResultSetMetaData md = rs.getMetaData();
            int columnCount = md.getColumnCount();
            while(rs.next()){
                Map<String,Object> rowData = new HashMap<>();
                for (int i = 1; i <= columnCount; i++) {

                    rowData.put(md.getColumnName(i), rs.getObject(i));

                }
                list.add(rowData);
            }
            rs.close();
            c.close();
            //System.out.println(list);
            return list;
        }
        catch(ClassNotFoundException e)
        {
            System.out.println("对不起,找不到驱动程序!");
            e.printStackTrace();
            return list;
        } catch(SQLException e) {
            e.printStackTrace();
            return list;
        }
    }

上一篇下一篇

猜你喜欢

热点阅读