zoukankan      html  css  js  c++  java
  • 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);

    }
    }
    }

  • 相关阅读:
    利用朴素贝叶斯算法进行分类-Java代码实现
    机器学习项目中常见的误区
    Chromium项目文化
    又一次定义CDN:为什么是迅雷?
    程序猿的思维修炼
    linux杂谈(十二):CDN加速
    Run-Time Check Failure #2
    打开excel2007"向程序发送命令时出现故障"
    [Unity 3D] Quaternion.LookRotation
    具体解释 IBM Bluemix 端到端开发体验
  • 原文地址:https://www.cnblogs.com/mzdljgz/p/10049638.html
Copyright © 2011-2022 走看看