`
yanghuidang
  • 浏览: 950134 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多

我们开发的是一套大型门户系统,因为是Internet访问的,所以,Statement会出现安全问题,这个在

http://blog.csdn.net/hongbo781202/archive/2005/09/19/485092.aspx里面已经讨论过了,然后我抄一段ORACLE电子杂志的话给大家看看:“除了缓冲的问题之外,至少还有一个更好的原因使我们在企业应用程序中更喜欢使用PreparedStatement对象,那就是安全性。传递给PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。
当处理公共Web站点上的用户传来的数据的时候,安全性的问题就变得极为重要。传递给PreparedStatement的字符串参数会自动被驱动器忽略。最简单的情况下,这就意味着当你的程序试着将字符串“D'Angelo”插入到VARCHAR2中时,该语句将不会识别第一个“,”,从而导致悲惨的失败。几乎很少有必要创建你自己的字符串忽略代码。
在Web环境中,有恶意的用户会利用那些设计不完善的、不能正确处理字符串的应用程序。特别是在公共Web站点上,在没有首先通过PreparedStatement对象处理的情况下,所有的用户输入都不应该传递给SQL语句。此外,在用户有机会修改SQL语句的地方,如HTML的隐藏区域或一个查询字符串上,SQL语句都不应该被显示出来。”。这段话和我们群里面的讨论一模一样。

关于性能问题,再给大家看段话:“通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。
然而,在Oracle环境中,开发人员实际上有更大的灵活性。当使用Statement或PreparedStatement对象时,Oracle数据库会缓存SQL语句以便以后使用。在一些情况下,由于驱动器自身需要额外的处理和在Java应用程序和Oracle服务器间增加的网络活动,执行PreparedStatement对象实际上会花更长的时间。”

实际上,我的测试结果是:在同一SQL执行5次的情况下,PrepareStatement比Statement要慢3%.

我们再看看http://www.oreilly.com/catalog/jorajdbc/chapter/ch19.html
里面有详细的图表说明为什么Statement比PreparedStatement快。结论是:一个prepared statement要执行65次以上才能赶上一个普通statement的执行效率。

另外一个问题就是Index的使用,基本的原则就是:如果是多列Index,一般应该保证这几个列都在查询条件中。而且对于单列Index,只有满足查询出来的结果命中率在20%以下,使用索引会才会加快速度! 否则可能会越Index越慢哦!

根据经验看,上面的结论对Oracle,Sybase,Mysql,Informix都成立,好可怕啊,不知道我前两年的程序怎么做的,原来我前两年都是在谎言的边缘度过!


分享到:
评论

相关推荐

    Mybatis 最小依赖jar 不集成spring 自学练习版本

    它强调SQL的灵活性,允许开发者直接编写SQL语句,将数据映射到Java对象上,从而简化了数据访问层的开发。在这个“最小依赖jar不集成spring”的自学练习版本中,我们将专注于Mybatis的核心功能,不涉及与Spring框架的...

    Oracle 11g中文版数据库管理、应用与开发标准教程

    PL/SQL是Oracle特有的编程语言,结合了SQL的查询功能和过程式编程语言的控制结构,常用于编写存储过程和触发器,实现业务逻辑。索引可以显著提升数据查询速度,但需要根据数据访问模式和性能需求来合理创建和维护。 ...

    villamizardev:我的GitHub个人资料的配置文件

    :waving_hand: 嗨,我是ALEJANDRO VILLAMIZAR :man::laptop: 我是一个全栈软件开发人员,具有Java,JavaScript,Angular,Spring Framework和SQL查询语言的高级知识。 另一方面,我有会话英语技能(中级,B1)。 ...

    qimenglin5

    - **数据库设计**:如SQL Server、MySQL等,需要设计合理的表结构,建立有效的索引,以及编写高效的SQL语句。 - **前端技术**:如HTML、CSS、JavaScript,用于构建用户界面,可能还会用到React、Vue等前端框架提升...

    Qracle jar包

    这个驱动程序实现了Java.sql和javax.sql接口,允许Java代码通过标准的SQL语句执行数据库查询、更新和事务处理。 Oracle JDBC驱动分为几种类型,包括 Thin、OCI(Oracle Call Interface)和JDBC-ODBC桥等。Qracle ...

    国产数据库技术架构算法的方法论HotDBP.pdf

    文件中的核心算法部分详细介绍了如何识别分布式事务功能的谎言,包括读一致性和写一致性。分布式事务读一致性确保在事务执行过程中,所有参与者看到相同的数据视图,而写一致性则保证事务完成后,数据的一致性状态。...

    ACCP Y2考试题-09.6 Y2笔试

    3. **数据库管理**:SQL语言的学习是必要的,包括数据查询、插入、更新和删除操作,以及更复杂的数据库设计和关系型数据库管理系统的使用,如MySQL或Oracle。 4. **软件工程**:包括需求分析、系统设计、软件测试和...

    抽象工厂Factory C# 数据库切换设计模式

    本人做了一个抽象工厂的小案例,只要修改配置文件,就可以轻松的切换数据库,里面附有...sql数据库附加上去就好了,修改配置连接 就可以轻松切换 数据库 如有问题请联系qimenglin_aptech@163.com 下载后觉得好记得评论哦

    北大青鸟y2笔试题-20090816Y2 笔试

    3. **数据库管理**:可能涵盖SQL语言的基本操作,如查询、插入、更新和删除记录,以及关系数据库的基本概念和设计原则。 4. **网络知识**:包括TCP/IP协议栈、网络模型(OSI七层模型或TCP/IP四层模型)、HTTP协议、...

    北大青鸟y2笔试题-09年1月Y2笔试

    在数据库管理方面,SQL语言的应用、关系数据库理论、数据库设计与优化是重点。此外,网络技术如TCP/IP协议、网络架构、网络安全也是考察的范围。 【ACCP5.0考试】是北大青鸟对ACCP课程5.0版本的学习效果进行的综合...

    北大青鸟y2笔试题-20090322笔试Y2

    2. **数据库管理**:SQL基础知识,包括查询、插入、更新和删除数据,以及基本的数据库设计概念,如关系模型和ER图。 3. **网络基础**:TCP/IP协议、HTTP协议、域名系统(DNS)的工作原理,以及网络拓扑结构等。 4....

    批量删除ASP.NET后台

    请注意,这里使用的是LINQ to SQL,实际项目中可能会使用EF、Dapper或其他ORM框架。在执行删除操作前,务必确认用户是否已明确选择了要删除的行,避免因误操作导致数据丢失。 在实际应用中,还需要考虑以下几个关键...

Global site tag (gtag.js) - Google Analytics