美文网首页
preparedStatement和Statement区别

preparedStatement和Statement区别

作者: Time一柒 | 来源:发表于2020-06-03 09:55 被阅读0次
    /**
         * 查询方法
         * @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;
            }
        }
    
    

    相关文章

      网友评论

          本文标题:preparedStatement和Statement区别

          本文链接:https://www.haomeiwen.com/subject/htrvzhtx.html