- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java程序员在写SQL程序时候常犯的10个错误 Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准: 技能(任何人都能容易学会命令式编程) 模式(有些人用模式-模式,举个例子,模式可以应用到任何地方,而且都可以归为某一类模式) 心境(首先,要写个好的面向对象程序是比命令式程序难的多,你得花费一些功夫) 但当Java程序员写SQL语句时,一切都不一样了。SQL是说明性语言而非面向对象或是命令式编程语言。在SQL中要写个查询语句是很简单的。但在Java里类似的语句却不容易,因为程序员不仅要反复考虑编程范式,而且也要考虑算法的问题。 下面是Java程序员在写SQL时常犯的错误(没有特定的顺序): 1.忘掉NULL Java程序员写SQL时对NULL的误解可能是最大的错误。也许是因为(并非唯一理由)NULL也称作UNKNOWN。如果被称作UNKNOWN,这还好理解些。另一个原因是,当你从数据库拿东西或是绑定变量时,JDBC将SQLNULL和Java中的null对应了起来。这样导致了NULL=NULL(SQL)和null=null(Java)的误解。 对于NULL最大的误解是当NULL被用作行值表达式完整性约束条件时。 另一个误解出现在对于NULL在NOTINanti-joins的应用中。 解决方法: 好好的训练你自己。当你写SQL时要不停得想到NULL的用法: 这个NULL完整性约束条件是正确的? NULL是否影响到结果? 2.在Java内存中处理数据 很少有Java开发者能将SQL理解的很好.偶尔使用的JOIN,还有古怪的UNION,好吧.但是对于窗口函数呢?还有对集合进行分组呢?许多的Java开发者将SQL数据加载到内存中,将这些数据转换成某些相近的集合类型,然后再那些集合上面使用边界循环控制结构(至少在Java8的集合升级以前)执行令人生厌的数学运算. 但是一些SQL数据库支持先进的(而且是SQL标准支持的!)OLAP特性,这一特性表现更好而且写起来也更加方便.一个(并不怎么标准的)例子就是Oracle超棒的MODEL分句.只让数据库来做处理然后只把结果带到Java内存中吧.因为毕竟所有非常聪明的家伙已经对这些昂贵的产品进行了优化.因此实际上,通过将OLAP移到数据库,你将获得一下两项好处: 便利性.这比在Java中编写正确的SQL可能更加的容易. 性能表现.数据库应该比你的算法处理起来更加快.而且更加重要的是,你不必再去传递数百万条记录了. 完善的方法: 每次你使用Java实现一个以数据为中心的算法时,问问自己:有没有一种方法可以让数据库代替为我做这种麻烦事. 3.使用UNION代替UNIONALL 太可耻了,和UNION相比UNIONALL还需要额外的关键字。如果SQL标准已经规定了支持,那么可能会更好点。 UNION(允许重复) UNIONDISTINCT(去除了重复) 移除重复行不仅很少需要(有时甚至是错的),而且对于带很多行的大数据集合会相当慢,因为两个子select需要排序,而且每个元组也需要和它的子序列元组比较。 注意即使SQL标准规定了INTERSECTALL和EXCEPTALL,很少数据库会实现这些没用的集合操作符。 处理方法: 每次你写UNION语句时,考虑实际上是否需要UNIONALL语句。 4.通过JDBC分页技术给大量的结果进行分页操作 大部分的数据库都会支持一些分页命令实现分页效果,譬如LIMIT..OFFSET,TOP..STARTAT,OFFSET..FETCH语句等。即使没有支持这些语句的数据库,仍有可能对ROWNUM(甲骨文)或者是ROWNUMBER()OVER()过滤(DB2,SQLServer2008等),这些比在内存中实现分页更快速。在处理大量数据中,效果尤其明显。 纠正: 仅仅使用这些语句,那么一个工具(例如JOOQ)就可以模拟这些语句的操作。 5.在java内存中加入数据 从SQL的初期开始,当在SQL中使用JOIN语句时,一些开发者仍旧有不安的感觉。这是源自对加入JOIN后会变慢的固有恐惧。假如基于成本的优化选择去实现嵌套循环,在创建一张连接表源前,可能加载所有的表在数据库内存中,这可能是真的。但是这事发生的概率太低了。通过合适的预测,约束和索引,合并连接和哈希连接的操作都是相当的快。这完全是是关于正确元数据(在这里我不能够引用TomKyte的太多)。而且,可能仍然有不少的Java开发人员加载两张表通过分开查询到一个映射中,并且在某种程度上把他们加到了内存当中。 纠正: 假如你在各个步骤中有从各种表的查询操作,好好想想是否可以表达你的查询操作在
您可能关注的文档
最近下载
- 喜茶品牌手册.pdf
- 高中英语2025届高考高频词(共240个).doc
- 2025届漳州高三1月市质检(漳州二检)数学试题含答案.pdf
- 福建省部分(六市)地市2025届高三上学期第一次质量检测试题(六市一模)数学试卷含答案.pdf VIP
- 福建省部分(六市)地市2025届高中毕业班第一次质量检测(六市一模)数学.docx VIP
- 2024年智慧旅游服务普及率大幅提升.pptx
- 2024新修订《公司法》重点学习.pptx
- 数学丨重庆市主城五区一诊高2025届高三1月暨学业质量调研抽测数学试卷及答案.pdf VIP
- 同等学力硕士全国统考心理学--普心考点精要.pdf VIP
- 同等学力硕士全统考心理学必看资料-发心教心社心考点精要增强版.doc VIP
文档评论(0)