`

数据库编程中的Statement与PreparedStatement用法

阅读更多
转载自:[url]http://tech.ccidnet.com/art/3539/20060322/486703_1.html
在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement.

基于以下的原因:

一.代码的可读性和可维护性.

虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次:



stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");



perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");

perstmt.setString(1,var1);

perstmt.setString(2,var2);

perstmt.setString(3,var3);

perstmt.setString(4,var4);

perstmt.executeUpdate();



不用我多说,对于第一种方法.别说其他人去读你的代码,就是你自己过一段时间再去读,都会觉得伤心.



二.PreparedStatement尽最大可能提高性能.

每一种数据库都会尽最大努力对预编译语句提供最大的性能优化.因为预编译语句有可能被重复调用.所以语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行.这并不是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配.那么在任何时候就可以不需要再次编译而可以直接执行.而statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配.比如:

insert into tb_name (col1,col2) values ('11','22');

insert into tb_name (col1,col2) values ('11','23');

即使是相同操作但因为数据内容不一样,所以整个个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.这样每执行一次都要对传入的语句编译一次.



当然并不是所以预编译语句都一定会被缓存,数据库本身会用一种策略,比如使用频度等因素来决定什么时候不再缓存已有的预编译结果.以保存有更多的空间存储新的预编译语句.



三.最重要的一点是极大地提高了安全性.



即使到目前为止,仍有一些人连基本的恶义SQL语法都不知道.

String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";

如果我们把[' or '1' = '1]作为varpasswd传入进来.用户名随意,看看会成为什么?



select * from tb_name = '随意' and passwd = '' or '1' = '1';

因为'1'='1'肯定成立,所以可以任何通过验证.更有甚者:

把[';drop table tb_name;]作为varpasswd传入进来,则:

select * from tb_name = '随意' and passwd = '';drop table tb_name;有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行.



而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.(前提是数据库本身支持预编译,但上前可能没有什么服务端数据库不支持编译了,只有少数的桌面数据库,就是直接文件访问的那些)只要全使用预编译语句,你就用不着对传入的数据做任何过虑.而如果使用普通的statement,有可能要对drop,;等做费尽心机的判断和过虑.



上面的几个原因,还不足让你在任何时候都使用PreparedStatement吗?
分享到:
评论

相关推荐

    S2使用Java实现数据库编程

    在IT行业中,数据库编程是至关重要的技能之一,尤其是在Java开发领域。本教程将重点讨论如何使用Java语言来实现对MySQL数据库的编程操作。通过提供的压缩包"使用Java实现数据库编程-1488176910082",我们可以深入...

    【经典】Java数据库编程 JAVA跟数据库连接源代码

    Java数据库编程是软件开发中的重要一环,尤其是在企业级应用中,数据的存储和处理是核心功能。本教程主要关注Java如何与数据库进行交互,特别是使用JDBC(Java Database Connectivity)进行连接和操作。以下是对各个...

    Java数据库编程案例2

    本案例"Java数据库编程案例2"着重于讲解如何在Java环境中与各种数据库进行交互,包括建立连接、执行SQL语句、处理结果集以及关闭连接等核心操作。下面我们将深入探讨相关知识点。 首先,Java数据库连接(JDBC)是...

    S2北大青鸟 使用Java实现数据库编程(包含项目).zip

    在本压缩包“S2北大青鸟 使用Java实现数据库编程(包含项目).zip”中,主要涵盖的是S2学期的学习内容,重点在于讲解如何使用Java语言进行数据库编程。这一主题对于计算机科学的学生和开发者至关重要,因为Java是广泛...

    JSP数据库编程指南JSP数据库

    JSP数据库编程则是将JSP与数据库系统相结合,以实现数据的存储、检索、更新和删除等操作。本指南将深入探讨这个主题,帮助你理解和掌握如何在JSP中有效地进行数据库交互。 首先,我们需要了解JDBC(Java Database ...

    Java数据库编程宝典

    书中详细介绍了JDBC驱动类型、连接数据库的方法、执行SQL语句的Statement和PreparedStatement接口,以及批处理操作。读者将学习如何创建数据库连接、执行查询和更新操作,并有效地管理结果集。 其次,数据库事务是...

    《Java数据库编程实例》完整随书代码

    《Java数据库编程实例》这本书是Java开发者学习数据库编程的重要参考资料,其随书代码涵盖了前十章的实例,旨在帮助读者深入理解和实践Java与数据库的交互。本文将详细解析这些知识点,以便于你更好地掌握Java数据库...

    java数据库编程_代码

    2. **连接数据库**:在Java中,通过`Class.forName()`方法加载JDBC驱动,然后使用`DriverManager.getConnection()`方法建立与数据库的连接。例如: ```java Class.forName("com.mysql.jdbc.Driver"); Connection ...

    Accp8.0\S2\使用Java实现数据库编程 第八章

    在“Accp8.0\S2\使用Java实现数据库编程 第八章”这一主题中,我们聚焦于如何利用Java这门强大的开发语言进行数据库交互。Java数据库编程是后端开发中的核心技能,它使得应用程序能够有效地存储、检索和管理数据。本...

    《Java数据库编程宝典》

    尽管文档中的大部分内容与一个特定的学习群及其提供的资源有关,但基于这些信息,我们可以围绕“Java数据库编程”这一主题进行展开,提炼出一系列有价值的知识点。 ### Java数据库编程宝典 #### 一、Java与数据库...

    使用Java实现数据库编程.zip

    本资料包“使用Java实现数据库编程.zip”聚焦于ACCP(Aptech Certified Computer Professional)8.0S2课程中的这一部分,提供了上机实践、教材讲解以及课后习题,旨在帮助学习者深入理解和掌握如何使用Java进行...

    Accp8.0\S2\使用Java实现数据库编程 第五章

    在"Accp8.0\S2\使用Java实现数据库编程 第五章"的学习资源中,我们聚焦于使用Java语言进行数据库编程的关键技术和实践。这一章节的内容涵盖了Java与数据库交互的基础,是成为一名合格的后端开发者必备的知识。标签...

    Java数据库编程实例

    本篇将深入探讨Java数据库编程的实例,主要关注如何使用Java与各种数据库进行交互。我们将会涵盖JDBC(Java Database Connectivity)API的基础知识,包括连接数据库、执行SQL语句、处理结果集以及事务管理。 首先,...

    Accp8.0\S2\使用Java实现数据库编程

    在“Accp8.0\S2\使用Java实现数据库编程”这一课程中,我们主要探讨的是如何使用Java语言进行数据库编程。这个课程涵盖了第三章的内容,包括授课资料、上机练习以及课后作业,旨在帮助学习者深入理解和掌握Java与...

    JDBC与Java数据库编程.pdf

    《JDBC与Java数据库编程》一书旨在深入探讨Java如何通过JDBC(Java Database Connectivity)这一接口与数据库进行高效互动,实现数据的读取、写入、更新等操作。以下是对该主题的详细解析,包括JDBC的概念、体系结构...

    语言程序设计资料:第8章_数据库编程.ppt

    据库的物理连接的。一旦建立了一个Connection对象,就可以通过它来执行SQL语句和数据库交互。...还探讨了数据库连接池的重要性和Web环境中数据库编程的常见实践。掌握这些内容对于开发高效、可靠的Web应用至关重要。

    使用Java实现数据库编程-课程总复习-(第九章-开发简单的CMS)

    在本课程中,我们将深入探讨如何使用Java进行数据库编程,特别是在开发一个简单的CMS(内容管理系统)的上下文中。这个上机作业旨在巩固你对Dao(数据访问对象)模式的理解,并提供实际操作经验。 首先,Dao模式是...

Global site tag (gtag.js) - Google Analytics