• jdbc预编译实现方式


    jdbc预编译可以有两种方式:

    方式一、jdbc自己实现的预编译,就是做一下特殊字符处理来防SQL注入,看PreparedStatement源码就可以了。

    public static void main(String[] args) {

    try {

    final String driverClassName = "com.mysql.jdbc.Driver";
    final String url = "jdbc:mysql://10.6.9.14:3306/SBLOG"; 重点看这里
    final String username = "sdl";
    final String password = "sdl";

    Connection connection = DriverManager.getConnection(url2, username, password);

    String sql = " SELECT * " +
    " FROM t_web " +
    " WHERE id = ? and name like ?";

    Class.forName(driverClassName);

    PreparedStatement preparedStatement = connection.prepareStatement(sql);

    preparedStatement.setInt(1, 1);

    preparedStatement.setString(2, "%ing%");


    ResultSet rst = preparedStatement.executeQuery();

    rst.next();

    System.out.println(rst.getString(2));
    } catch (Exception e) {
    e.printStackTrace();
    }

    }

    这里是调用MySQL时的wireshark截图。可以看下实际上就是拼接完成的SQL发过去的。

    方式二、利用MySQL的预编译,。

    public static void main(String[] args) {

    try {

    final String driverClassName = "com.mysql.jdbc.Driver";
    final String url2 = "jdbc:mysql://10.6.8.4:3306/SBLOG?useServerPrepStmts=true"; 重点看这里增加了useServerPrepStmts=true

    final String username = "sdl";
    final String password = "sdl";


    Connection connection = DriverManager.getConnection(url2, username, password);

    String sql = " SELECT * " +
    " FROM t_web " +
    " WHERE id = ? and name like ?";

    Class.forName(driverClassName);

    PreparedStatement preparedStatement = connection.prepareStatement(sql);

    preparedStatement.setInt(1, 1);

    preparedStatement.setString(2, "%ing%");


    ResultSet rst = preparedStatement.executeQuery();

    rst.next();

    System.out.println(rst.getString(2));
    } catch (Exception e) {
    e.printStackTrace();
    }

    }
    这里是调用MySQL时的wireshark截图。可以看下实际上参数是用的占位符?。

     


    mybatis这种框架也是一样。关键看你的jdbc url怎么配置的,和框架没关系。



  • 相关阅读:
    佛洛依德
    Python2.7利用Tesseract进行中英文图像识别
    批量生成二维码打包成exe文件
    python基础5—文件 | json序列化
    python基础6—(高阶,匿名,偏)函数 | 装饰器
    python基础4—面向对象
    python基础2—集合框架
    一不小心翻车了-(angularjs 1.6X) 由Eventbus使用异常说起
    简单说下js闭包之setTimeout
    html5上传本地图片,在线预览及裁剪(filereader,canvas)
  • 原文地址:https://www.cnblogs.com/fsqsec/p/11465780.html
Copyright © 2020-2023  润新知