加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Java措施员在写SQL时辰常犯的10个错误

发布时间:2017-06-14 20:01:35 所属栏目:教程 来源:oschina译者
导读:Java措施员编程时必要殽杂面向工具思想和一样平常呼吁式编程的要领,可否美满的将两者团结起来完全得依赖编程职员的水准。
副问题[/!--empirenews.page--]

        【 评述】Java措施员编程时必要殽杂面向工具思想和一样平常呼吁式编程的要领,可否美满的将两者团结起来完全得依赖编程职员的水准:

  • 手艺(任何人都能轻易学会呼吁式编程)

  • 模式(有些人用“模式-模式”,举个例子,模式可以应用到任那里所,并且都可以归为某一类模式)

  • 心境(起首,要写个好的面向工具措施是比呼吁式措施难的多,你得耗费一些工夫)

  但当Java措施员写SQL语句时,统统都纷歧样了。SQL是声名性说话而非面向工具或是呼吁式编程说话。在SQL中要写个查询语句是很简朴的。但在Java里相同的语句却不轻易,由于措施员不只要重复思量编程范式,并且也要思量算法的题目。

  下面是Java措施员在写SQL时常犯的错误(没有特定的次序):

  1.遗忘NULL

  Java措施员写SQL时对NULL的误解大噶?鲱大的错误。大概是由于(并非独一来由)NULL也称作UNKNOWN。假如被称作UNKNOWN,这还好领略些。另一个缘故起因是,当你从数据库拿对象或是绑定变量时,JDBC将SQL NULL 和Java中的null对应了起来。这样导致了NULL = NULL(SQL)和null=null(Java)的误解。

  对付NULL最大的误解是当NULL被用作行值表达式完备性束缚前提时。

  另一个误解呈此刻对付NULL 在 NOT IN anti-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取代UNION ALL

  太可耻了,和UNION对比UNION ALL还必要特另外要害字。假如SQL尺度已经划定了支持,那么也许会更好点。

  • UNION(应承一再)

  • UNION DISTINCT (去除了一再)

  移除一再行不只很少必要(偶然乃至是错的),并且对付带许多行的大数据荟萃会相等慢,由于两个子select必要排序,并且每个元组也必要和它的子序列元组较量。

  留意纵然SQL尺度划定了INTERSECT ALL和EXCEPT ALL,很少数据库会实现这些没用的荟萃操纵符。

  处理赏罚要领:

  每次你写UNION语句时,思量现实上是否必要UNION ALL语句。

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读