1:创建时的区别: 
   Statement stm=con.createStatement(); 
   PreparedStatement pstm=con.prepareStatement(sql); 
执行的时候: 
    stm.execute(sql); 
    pstm.execute();

2: pstm一旦绑定了SQL,此pstm就不能执行其他的Sql,即只能执行一条SQL命令。 
stm可以执行多条SQL命令。

3: 对于执行同构的sql(只有值不同,其他结构都相同),用pstm的执行效率比较的高,对于异构的SQL语句,Statement的执行效率要高。

4:当需要外部变量的时候,pstm的执行效率更高.

下面是一个statement的列子 : 
Java代码 
package com.JDBC.proc;

import java.sql.*;

public class StatementTest { 
      
    public static void main(String args[]){ 
          
        Connection conn=null; 
        Statement stm=null; 
        ResultSet rs=null; 
          
        try { 
            conn=DBTool.getConnection(); 
            String sql="select EmpNo,EName from emp " + 
                    "where empNo=7499"; 
            stm=conn.createStatement(); 
            rs=stm.executeQuery(sql); 
            while(rs.next()){ 
                System.out.println(rs.getInt(1)+"---"+rs.getString(2)); 
            } 
        } catch (SQLException e) { 
            e.printStackTrace(); 
        } catch (Exception e) {

e.printStackTrace(); 
        }finally{ 
            DBTool.release(rs, stm, conn); 
            } 
    } 
      
}

他的主要作用阐述Statement的用法。

下面是关于prepareStatement的列子: 
Java代码 
package com.JDBC.proc;

import java.sql.*; 
public class PrepareStatement { 
      
    public static void main(String[] args){ 
          
        Connection conn=null; 
        PreparedStatement psmt=null; 
        ResultSet rs=null; 
          
        try { 
            conn=DBTool.getConnection(); 
            String sql="select EmpNo,Ename " + 
                    "from emp " + 
                    "where EmpNo=?"; 
            psmt=conn.prepareStatement(sql); 
            psmt.setInt(1, 7499); 
              
            rs=psmt.executeQuery(); 
            while(rs.next()){ 
                System.out.println(rs.getInt(1)+"---"+rs.getString(2)); 
                  
            } 
        } catch (SQLException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        }finally{ 
            DBTool.release(rs, psmt, conn); 
        } 
          
    }

}

总结:

第一:

(1)prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。

(2)Statement不会初始化,没有预处理,每次都是从0开始执行SQL。

第二:

(1)prepareStatement可以替换变量

在SQL语句中可以包含?,可以用ps = conn.prepareStatement("select * from Cust where ID=?");

int sid = 1001;

ps.setInt(1,sid);

rs = ps.executeQuery();

可以把?替换成变量。

(2)Statement 只能用 int sid = 1001;

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid);来实现

PreparedStatement的这三处优点:
一、代码的可读性和可维护性;
二、高效性;
三、安全性。

prepareStatement和Statement的区别的更多相关文章

  1. prepareStatement与Statement的区别

    prepareStatement与Statement的区别 1.区别: 转 http://blog.csdn.net/zsm653983/article/details/7296609 stmt=co ...

  2. JDBC中prepareStatement 和Statement 的区别

    package util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedSta ...

  3. javaWeb7——PrepareStatement原理,Pareparedstatement和Statement的区别

    查询数据返回的结果集: ResulSet: 代码实现 : PrepareStatement原理 代码实现: Pareparedstatement和Statement的区别: 注意: Statement ...

  4. JDBC增删改查,PreparedStatement和Statement的区别

    此篇是在上一篇的基础上使用PreparedStatement对象来实现JDBC增删改查的 具体工具类JDBCTools和实现类和配置文件在上一篇Statement对象实现的时候有写. 上一篇地址htt ...

  5. PreparedStatement与Statement的区别

    PreparedStatement与statement的区别 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程 2.使用 Statement 对象 ...

  6. java中prepareStatement与createStatement的区别

    首先来看两段代码: 第一个使用createStatement() public void delete( int id){ try { Connection c = DBUtil.getConnect ...

  7. PreparedStatement 和 Statement 的区别(推荐使用PreparedStatement)

    PreparedStatement与Statement在使用时的区别: 1.Statement: String sql=" "; executeUpdate(sql) 2. Pre ...

  8. java.sql.preparedstatement和java.sql.statement的区别

    本文转自CSDN,然后整理了一遍.原文出处:CSDN JDBC(java database connectivity,java数据库连接)的api中的主要的四个类之一的java.sql.stateme ...

  9. PreparedStatement和Statement的区别

    转自:http://blog.sina.com.cn/s/blog_77eba18f01019csh.html 1. PreparedStatement接口继承Statement, PreparedS ...

随机推荐

  1. gastic 安装

    所有文件下载地址: ftp://ftp.broadinstitute.org/pub/GISTIC2.0/ cd /home/software/ tar zxf GISTIC_2_0_22.tar.g ...

  2. ajax接收返回值获取不到问题

    function testAsync() { //定义一个全局变量来接受$post的返回值 var result; //用ajax的“同步方式”调用一般处理程序 $.ajax({ url: " ...

  3. [资源] Resources on Self-Driving Car

    Talk NVIDIA at CES 2016 - Self Driving Cars and Deep Learning GPUs Projects Autoware Open-source sof ...

  4. jQuery的Deferred

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. 转 Cocos网络篇[3.2](3) ——Socket连接(1)

    Cocos网络篇[3.2](3) ——Socket连接(1) 2015-03-05 22:24:13 标签:network http socket cocos [唠叨] 在客户端游戏开发中,使用HTT ...

  6. Spring 读书笔记-----使用Spring容器(一)

    pring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口.他们都可代表Spring容器,Spri ...

  7. RAR暴破

    1. 网上稍微搜索了一下,貌似一个叫 "ARPR"的软件 出现的频率较高. 2. http://jingyan.baidu.com/article/a948d651b954a90a ...

  8. [转载] 深入理解Linux修改hostname

    原文: http://www.cnblogs.com/kerrycode/p/3595724.html 当我觉得对Linux系统下修改hostname已经非常熟悉的时候,今天碰到了几个个问题,这几个问 ...

  9. 展讯DTS路径及编译

    DTS路径:/kernel/arch/arm/boot/dts 如何查找修改当前TP的DTS配置(分辨率)的文件:1.查找make file,找关键字都包含CONFIG_MACH,在/kernel/a ...

  10. css+JS实现遮罩弹框

    <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam ...