• SQL注入漏洞的解决PreparedStetament


    JDBCUtil 工具集

    package com.imooc.jdbc.utils;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class JDBCUtil {
        
        private static final String CLASSLOAD;
        private static final String MYSQLURL;
        private static final String USERNAME;
        private static final String PASSWORD;
        
        
        static {
            //使用properties来加载类配置文件
            //先实例化properties对象
            
            Properties p = new Properties();
            //使用class.getClassLoader()所得到的java.lang.ClassLoader的
            //getResourceAsStream()方法
            //getResourceAsStream(name)方法的参数必须是包路径+文件名+.后缀
            //否则会报空指针异常
            
            InputStream dataLoad = JDBCUtil.class.getClassLoader().getResourceAsStream("mysql.properties");
            try {
                p.load(dataLoad);
                
                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //从properties文件中提取配置参数
            CLASSLOAD = p.getProperty("classLoad").trim();
            MYSQLURL = p.getProperty("MYSQLURL").trim();
            USERNAME = p.getProperty("USERNAME").trim();
            PASSWORD = p.getProperty("passWord").trim();
            
            System.out.println(CLASSLOAD);
            System.out.println(MYSQLURL);
            System.out.println(USERNAME);
            System.out.println(PASSWORD);
        }
        
        public static void loadClass() throws ClassNotFoundException {
            Class.forName(CLASSLOAD);
        }
        
        
        public static Connection getConnection() throws ClassNotFoundException, SQLException {
            loadClass();
            Connection conn = DriverManager.getConnection(MYSQLURL, USERNAME,PASSWORD);
            return conn;
        }
        
        /**
         * 数据重载解决用户自己写入
         * @param CLASSLOAD  驱动导入
         * @param MYSQLURL   数据连接url和数据名
         * @param USERNAME   用户名
         * @param PASSWORD   密码
         * @return
         * @throws ClassNotFoundException
         * @throws SQLException
         */
        
    //    public static Connection getConnection(
    //            String CLASSLOAD,String MYSQLURL,String USERNAME, String PASSWORD
    //            ) throws ClassNotFoundException, SQLException {
    //        
    //        Class.forName(CLASSLOAD);
    //        Connection conn = DriverManager.getConnection(MYSQLURL, USERNAME, PASSWORD);
    //        return conn;
    //        
    //    }
        
        
        public static void release(Connection conn,Statement stmt) {
            if(stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
                stmt = null;
            }
            
            if(conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                conn = null;
            }
        }
        
        public static void release(Connection conn,Statement stmt,ResultSet resultSet) {
            if(stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
                stmt = null;
            }
            
            if(conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                conn = null;
            }
            
            if(resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        
    }

    PreparedStetament 的使用:

              保存数据:

                

        /**
         * 学习PreparedStatement的数据保存
         */
        public void insert() {
            Connection conn = null;
            PreparedStatement pstmt = null;
            boolean flag = false;
            
            try {
                //连接数据库
                conn = JDBCUtil.getConnection();
                //编写插入的sql数据
                String sql = "insert emp(username,age,sex,addr,depId) values(?,?,?,?,?)";
                //创建执行sql的对象
                pstmt = conn.prepareStatement(sql);
                
                pstmt.setString(1, "无上");
                pstmt.setInt(2, 26);
                pstmt.setString(3, "女");
                pstmt.setString(4, "香港");
                pstmt.setInt(5, 2);
                flag = pstmt.execute();
                
                if(flag) {
                    System.out.print("数据添加成功");
                }
                
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                //释放资源
                JDBCUtil.release(conn, pstmt);
            }
            
        }

    修改数据

      

        @Test
        /**
         * 修改数据
         */
        public void update() {
            Connection conn = null;
            PreparedStatement pstmt = null;
            
            
            try {
                //连接数据
                conn = JDBCUtil.getConnection();
                //编写sql
                String sql = "update emp set username=?,sex=? where id=?";
                //预处理sql
                pstmt = conn.prepareStatement(sql);
                
                //设置参数
                pstmt.setString(1, "小天");
                pstmt.setString(2, "男");
                pstmt.setInt(3, 7);
                
                //提交数据
                int num = pstmt.executeUpdate();
                if(num > 0) {
                    System.out.println("数据修改成功");
                }
                
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                //释放资源
                JDBCUtil.release(conn, pstmt);
            }
        }

    查询数据

      

        @Test
        /**
         * 查询一条数据
         */
        public void first() {
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rs = null;
            try {
                //连接数据
                conn = JDBCUtil.getConnection();
                //编写
                String sql = "select id,username from emp where id=?";
                //预编译
                pstmt = conn.prepareStatement(sql);
                //设置参数
                pstmt.setInt(1, 7);
                //查询结果集
                rs = pstmt.executeQuery();
                if(rs.next()) {
                    System.out.print(rs.getInt("id")+"----"+rs.getString("username"));
                }
                
            } catch (ClassNotFoundException | SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                JDBCUtil.release(conn, pstmt, rs);
            }
        }
  • 相关阅读:
    Docker底层技术了解(3)
    Docker整体结构了解(2)
    Docker简介(1)
    linux常用命令
    python反射
    flask线程隔离技术
    flask核心机制
    并发编程
    socket通信
    网络编程
  • 原文地址:https://www.cnblogs.com/wuheng-123/p/13779298.html
Copyright © 2020-2023  润新知