预编译的优点(Statement和PrepareStatement 的区别)

原创 2013年12月04日 22:35:33

在执行SQL命令时,有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。

而熟悉JDBC编程的大侠们都会选择使用PreparedStatement对象,主要因为使用预编译对象PreparedStatement时,有以下几个优点:

1、效率高

 PreparedStatement可以尽可能的提高访问数据库的性能,我们都知道数据库在处理SQL语句时都有一个预编译的过程,而预编译对象就是把一些格式固定的SQL编译后,存放在内存池中即数据库缓冲池,当我们再次执行相同的SQL语句时就不需要预编译的过程了,只需DBMS运行SQL语句。所以当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,特别是的大型的数据库中,它可以有效的也加快了访问数据库的速度。
2、大大提高代码的可读性和可维护性

例如我们在向数据库插入数据:

一种是使用Statement对象

   java.sql.Statement   stmt=conn.createStatement();

  stmt.executeUpdate("insert into student (name,id,number,count) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");
  另一种是使用PreparedStatement对象

String  sql ="insert into student values(null,?,?,?)";

java.sql.PreparedStatement pstmt=conn.preparedStatement(sql);

pstmt.setString(1,var1);
pstmt.setString(2,var2);
pstmt.setString(3,var3);
pstmt.setString(4,var4);
pstmt.executeUpdate();

使用占位符?代替

将参数与SQL语句分离出来,这样就可以方便对程序的更改和延续,同样,也可以减少不必要的错误。

3、开源防止SQL注入最主要的


什么时候使用预编译语句?

   一般是在需要反复使用一个SQL语句时才使用预编译语句,预编译语句常常放在一个fo r或者while循环里面使用,通过反复设置参数从而多次使用该SQL语句。为了防止SQL注入漏洞,在某些数据操作中也使用预编译语句。

预编译的作用和目的

预编译又称为预处理 , 是做些代码文本的替换工作。 处理 # 开头的指令 , 比如拷贝 #include 包含的文件代码, #define 宏定义的替换 , 条件编译等, 就是为编译做的预...
  • tanglanting12
  • tanglanting12
  • 2013年10月03日 16:53
  • 987

预编译头文件的作用

预编译头文件 今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有, 就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。 结果不能编译了,我靠: f...
  • gjt19910817
  • gjt19910817
  • 2012年01月14日 15:13
  • 13284

预编译的作用

预编译一般用来防止头文件的重复包含和编译。 在我们用C做开发的是候,有时候项目很大,我们所编写的程序会很长。这样我们如果还是写在一个文件中会出现管理上的问题和 查看上的不方便。因此,我们可以分多个...
  • buku2010
  • buku2010
  • 2014年01月28日 13:21
  • 479

PreparedStatement 预编译

什么是预编译语句?  预编译语句PreparedStatement是java.sql中的一个接口,它是Statement的子接口。通过Statement对象执行sql语句时,需要将sql语句发送给D...
  • Ldbiy
  • Ldbiy
  • 2015年08月01日 14:26
  • 1399

mybatis深入理解之 # 与 $ 区别以及 sql 预编译

mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name ...
  • hanchao_h
  • hanchao_h
  • 2016年12月14日 15:41
  • 1577

JDBC中的——PreparedStatement 预编译原理

JDBC中的——PreparedStatement 预编译原理 一、prepareStatement语句有三大好处:1、提高了代码的可读性和可维护性 虽然用PreparedStatement来代替S...
  • qiaojiangsong
  • qiaojiangsong
  • 2016年06月20日 16:13
  • 2259

JDBC预编译

什么是预编译语句 预编译语句PreparedStatement 是java.sql中的一个接口,它是Statement的子接口。通过Statement对象执行SQL语句时,需要将SQL语句发送给...
  • S34497841
  • S34497841
  • 2017年05月06日 10:37
  • 209

mybatis深入理解之 # 与 $ 区别以及 sql 预编译

mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name ...
  • hanchao_h
  • hanchao_h
  • 2016年12月14日 15:41
  • 1577

JDBC中的——PreparedStatement 预编译原理

JDBC中的——PreparedStatement 预编译原理 一、prepareStatement语句有三大好处:1、提高了代码的可读性和可维护性 虽然用PreparedStatement来代替S...
  • qiaojiangsong
  • qiaojiangsong
  • 2016年06月20日 16:13
  • 2259

正确使用vs的预编译头

预编译头的概念: 所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是 以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的 ...
  • ly416
  • ly416
  • 2014年04月29日 19:18
  • 4698
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:预编译的优点(Statement和PrepareStatement 的区别)
举报原因:
原因补充:

(最多只允许输入30个字)