zoukankan      html  css  js  c++  java
  • Statement和PreparedStatement的异同

    1.首先两个都是java向数据库执行sql语句的对象!

     java代码连接数据库,并且执行sql语句的步骤如下:

      //1.注册数据库的驱动程序
      Class.forName(driverClass);


      /2/获得数据库的连接
      conn=DriverManager.getConnection(url,username,password);


      //3创建sql执行对象
      Statement  stmt=conn.createStatement();


      //执行sql语句返回执行结果集rs
      ResultSet rs=stmt.executeQuery(sql);

    Statement 对象用于将 SQL 语句发送到数据库中。实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL语句的包容器:Statement、PreparedStatement(它从 Statement 继承而来)和CallableStatement(它从 PreparedStatement 继承而来)。它们都专用于发送特定类型的 SQL 语句:Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。

      综上所述,总结如下:Statement每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.但存在sql注入风险。PreparedStatement是预编译执行的。在执行可变参数的一条SQL时,PreparedStatement要比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率高。安全性更好,有效防止SQL注入的问题。对于多次重复执行的语句,使用Prepared

    Statement效率会更高一点。执行SQL语句是可以带参数的,并支持批量执行SQL。由于采用了Cache机制,则预编译的语句,就会放在Cache中,下次执行相同的SQL语句时,则可以直接从Cache中取出来。

    示例:PreparedStatement

    public void save(Stu s) {
    //定义要执行的sql
    String sql="insert into person(id,name,age) values(?,?,?)";
    DBUtil util=new DBUtil();
    //得到连接
    Connection conn=util.getConnection();

    try {
    //创建sql执行对象
    PreparedStatement psmt=conn.prepareStatement(sql);
    psmt.setInt(1, s.getId() );
    psmt.setString(2, s.getName() );
    psmt.setInt(3, s.getAge());
    psmt.executeUpdate();

    } catch (SQLException e) {

    e.printStackTrace();
    }finally {
    util.close(conn);
    }
    }

    示例:Statement

    public List list() {
    //定义要执行的sql
    String sql="select id,name,age from person";
    DBUtil util=new DBUtil();
    //得到连接
    Connection conn=util.getConnection();

    try {
    //创建sql执行对象
    java.sql.Statement stmt=conn.createStatement();
    //拿到查询的结果集rs
    ResultSet rs=stmt.executeQuery(sql);
    //定义一个数组,把结果放进去
    List list=new ArrayList();

    while(rs.next()) {
    int id=rs.getInt(1);
    String name=rs.getString(2);
    int age=rs.getInt(3);

    Stu s=new Stu();
    s.setId(id);
    s.setName(name);
    s.setAge(age);
    list.add(s);
    }
    return list;

    } catch (SQLException e) {

    e.printStackTrace();
    }finally {
    util.close(conn);
    }
    return null;
    }

  • 相关阅读:
    三个心态做人做学问 沧海
    成功走职场要找准自己的"快捷键" 沧海
    免费离线下载 拂晓风起
    Hibernate 获取某个表全部记录时 奇怪现象 (重复出现某个记录) 拂晓风起
    无法读取mdb 如果连接不了ACCESS mdb文件,就尝试安装MDAC 拂晓风起
    Netbeans 使用 Hibernate 逆向工程 生成hbm和pojo 拂晓风起
    如何点击单选框 radio 后面的文字,选中单选框 拂晓风起
    Java 连接access 使用access文件 不用配置 拂晓风起
    mysql下如何执行sql脚本 拂晓风起
    Hibernate配置access Hibernate 连接 access 拂晓风起
  • 原文地址:https://www.cnblogs.com/longailong/p/8529471.html
Copyright © 2011-2022 走看看