• SQL注入,PreparedStatement和Statement


    代码区

    还是一个工具类

    代码:

    package cn.itcats.jdbc;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    //工具类 一个实例都不会有
    public final class JdbcUtils {
    // 优点修改的时候只需改这一处 私有对你以后类的演化有好处
    private static String url = "jdbc:mysql://localhost:3306/test";
    private static String user = "root";
    private static String password = "123456";
    private JdbcUtils() {

    }

    static {//放入静态代码块 只执行一次
    try {// 优化的目的注册驱动只能进行一次
    Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
    throw new ExceptionInInitializerError(e);
    }

    }
    public static Connection getConnection() throws SQLException{
    return DriverManager.getConnection(url, user, password);
    }

    public static void free(ResultSet rs,Statement st,Connection conn) {
    try {
    if(rs!=null)
    rs.close();
    }catch(SQLException e){
    e.printStackTrace();
    }finally {
    try {
    if(st!=null)
    st.close();
    }catch(SQLException e){
    e.printStackTrace();
    }finally {
    if(conn!=null)
    try {
    conn.close();
    }catch(SQLException e){
    e.printStackTrace();
    }
    }
    }
    }

    }

    在这里我给        PreparedStatement   和   Statement   执行的时间做了比较      PreparedStatement  写法的优点较多

    代码仅供参考:

    package cn.itcats.jdbc;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    public class SQLInject {//C创建 R读取 U更新 D删除
    public static void main(String[] args) throws Exception{
    read1("Jack");
    System.out.println("********************************");
    read("Jack");
    }

    static void read1(String name) throws SQLException {
    Connection conn = null;
    /*
    * 与Statement区别 程序修改引入PreparedStatement接口 做一些预处理 特殊字符过滤 系统的优化
    * 解决SQl注入的问题
    * 在不考虑SQl注入问题基础上 sql语句执行次数越多 那么PrepareStatement 效率较高(只有在数据库连接没有关闭的条件下)
    */
    PreparedStatement ps = null;
    ResultSet rs = null;
    try {
    //2建立连接 最耗时
    conn = JdbcUtils.getConnection();
    //3创建语句 不能用拼字符串的方式 很不安全
    long start1 = System.currentTimeMillis(); //毫秒
    String sql = "select id,name,birthday,money from user where name=?"; //and id=?and....
    ps = conn.prepareStatement(sql);
    ps.setString(1, name);
    // 1,name 第一个问号替换 name
    //4执行语句
    System.out.println(sql);
    rs = ps.executeQuery(); // 构造的时候已经给他了写不写sql都一样 不需要写sql

    //5处理结果
    while(rs.next()) { //行遍历
    System.out.println( //四列 代码灵活性提高了
    rs.getObject("id") + " " + rs.getObject("name") + " " +
    rs.getObject("birthday") + " " + rs.getObject("money"));
    }
    long end1 = System.currentTimeMillis();
    System.out.println("read1 " + (end1 - start1));


    } finally {
    JdbcUtils.free(rs, ps, conn);

    }

    }
    static void read(String name) throws SQLException {
    Connection conn = null;
    Statement st = null;
    ResultSet rs = null;
    try {
    //2建立连接
    conn = JdbcUtils.getConnection();
    //3创建语句
    long start = System.currentTimeMillis();
    st = conn.createStatement();
    //4执行语句
    String sql = "select id,name,birthday,money from user where name='"
    + name + "'";

    rs = st.executeQuery(sql);
    //建议不要*不然会都查出来 可读性不好 写列名 维护成本低

    //5处理结果
    while(rs.next()) { //行遍历
    System.out.println( //四列 代码灵活性提高了
    rs.getObject("id") + " " + rs.getObject("name") + " " +
    rs.getObject("birthday") + " " + rs.getObject("money"));
    }
    long end = System.currentTimeMillis();
    System.out.println("read " + (end - start));


    } finally {
    JdbcUtils.free(rs, st, conn);

    }
    }
    }

  • 相关阅读:
    VC 捕获Windows关机事件
    JAVA多态计算面积main函数调用方法
    Spring MVC 和 Spring 总结
    css知识总结
    数据库mysql大全(高级版)
    springboot+springcloud微服务项目全套资料(笔记+源码+代码)
    eclipse上的maven,添加依赖后无法自动下载相应的jar包
    使用angularJS接收json数据并进行数据的显示
    mybatis的基本语句的应用
    Idea集成maven插件
  • 原文地址:https://www.cnblogs.com/mzdljgz/p/10049638.html
Copyright © 2020-2023  润新知