zoukankan      html  css  js  c++  java
  • Java中PreparedStatement的错误使用

    今天在翻看一个以前项目的代码的时候发现了一个对PreparedStatement的错误使用,为了避免自己以后犯类似的错误,

    特别记录一下!首先先看下面的增删改查的代码:

    public int insert(String sql) throws Exception {
    
    Logger.getLogger(this.getClass()).info(sql);
    
    return conn.prepareStatement(sql).executeUpdate();
    
    }
    
    /**
    * 
    * 更新记录
    * 
    * @param sql
    * 
    * @return
    * 
    * @throws Exception
    */
    public int update(String sql) throws Exception {
    
    Logger.getLogger(this.getClass()).info(sql);
    
    return conn.prepareStatement(sql).executeUpdate();
    }
    
    /**
    * 
    * 删除记录
    * 
    * @param sql
    * 
    * @return
    * 
    * @throws Exception
    */
    
    public int delete(String sql) throws Exception {
    
    Logger.getLogger(this.getClass()).info(sql);
    
    return conn.prepareStatement(sql).executeUpdate();
    
    }
    
    /**
    * 
    * 查询记录
    * 
    * @param sql
    * 
    * @return ResultSet
    * 
    * @throws Exception
    */
    
    public ResultSet executeQuery(String sql) throws Exception {
    
    Logger.getLogger(this.getClass()).info(sql);
    
    ResultSet rs = conn.prepareStatement(sql).executeQuery();
    
    return rs;
    
    }
    

      

    也许你看了很久后会说,这写的没什么大问题啊,其实不然 这里面有一个很影响效率的地方

    大家都知道prepareStatement 是编译的 SQL 语句的对象。但是怎样才能真正的起到预编译的作用呢?

    Connection类中的prepareStatement(sql)可以创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。

    但是这个sql语句必须是用占位符?来表示参数并且

      s.setInt(1,1);--(设置values中的值,1,2,3代表顺序,后面的表示要插入的值)
      s.setString(2,"admin");
      s.setString(3,"admin");

    这样才能真正启到预编译的作用,如果插入类似数据的时候就会直接使用编译好的sql,从而提高效率。

    但是如果向上面代码那样写的话Conn.prepareStatement(sql).executeUpdate();,不但起不到提高查询速度的

    作用,而且会在数据库中产生大量的预编译语句,占用了大量的空间。

    所以,希望大家以后能够注意一下,也警示自己以后不要犯类似的问题!

  • 相关阅读:
    java Object类是可以接收集合类型的
    java.lang.String中[ "张飞"+1+1 ] 和 [ "张飞"+(1+1) ]
    AFL Fuzz入门
    [转载]linux与grep
    linux下安装clamav
    [转载]Linux连续执行多条命令
    [转载]linux下各文件夹的结构说明及用途介绍
    [转载]linux常用命令
    [转载]Ubuntu 16.04 蓝屏解决方案
    pycharm修改python版本
  • 原文地址:https://www.cnblogs.com/heshan664754022/p/2971660.html
Copyright © 2011-2022 走看看