zoukankan      html  css  js  c++  java
  • jdbc操作数据库以及防止sql注入

    public class pr {
        public static void main(String[] args) {
            Connection conn = null;
            Statement st = null;
            ResultSet rs = null;
    
            try {
                // 加载驱动
    //            DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());   不用这种方法加载,因为源码里面已经有static代码块加载驱动了,直接加载类进内存就行了
                Class.forName("com.mysql.cj.jdbc.Driver");
    
                // 连接到数据库
                conn = DriverManager.getConnection("jdbc:mysql://localhost/meiduo_mall","root","xxxxxx");
    
                // 创建Statement对象
                st = conn.createStatement();
    
                // 执行查询,得到结果集
                String sql = "select * from tb_goods_category";
                rs = st.executeQuery(sql);
    
                // 遍历查询每一条数据
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    System.out.println(id + "---" + name);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 释放资源
                JDBCutils.release(conn,st,rs);      // 单独写一个工具类来释放资源
            }
        }
    
    }

    工具类:

    public class JDBCutils {
        
        public static void release(Connection conn,Statement st,ResultSet rs){
            closeConn(conn);
            closeSt(st);
            closeRs(rs);
        }
    
        private static void closeRs(ResultSet rs){
            try {
                if (rs != null){
                    rs.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                rs = null;
            }
        }
    
        public static void closeSt(Statement st){
            try {
                if (st != null){
                    st.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                st = null;
            }
        }
    
        public static void closeConn(Connection conn){
            try {
                if (conn != null){
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                conn = null;
            }
        }
        }

    上面的方法会有SQL注入的隐患。

    解决方法:用PreparedStatement对象替换前面的Statement对象。PreparedStatement对象可以预先处理给定的SQL语句,在sql语句里面使用?占位符来替代后续要传递进来的变量。后面进来的变量值,将会被看成是字符串,不会产生任何的关键字。

    public class pr2 {
        public static void main(String[] args) {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
    
            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
    
                // 连接到数据库
                conn = DriverManager.getConnection("jdbc:mysql://localhost/meiduo_mall","root","480916");
    
                // 创建Statement对象
                String sql = "select * from tb_goods_category where id=?";
                ps = conn.prepareStatement(sql);
                ps.setInt(1,1);
    
                // 执行查询,得到结果集
    
                rs = ps.executeQuery();
    
    //             遍历查询每一条数据
                while (rs.next()) {
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    System.out.println(id + "---" + name);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 释放资源
                JDBCutils.release(conn,ps,rs);      // 单独写一个工具类来释放资源
            }
        }
    
    }
  • 相关阅读:
    Android开发 将数据保存到SD卡
    Android手机拨打电话的开发实例
    Android动画的实现 上
    Windows 7旗舰版搭建andriod 4.0开发环境记录
    [转载]Android开发常用调试技术记录
    暂停和恢复Activity Android
    Android传感器编程带实例
    用VS2010开发Android应用的配置方法
    安卓Activity界面切换添加动画特效
    在安卓开发中使用SQLite数据库操作实例
  • 原文地址:https://www.cnblogs.com/chichung/p/10301117.html
Copyright © 2011-2022 走看看