Java措施员在写SQL时辰常犯的10个错误
副问题[/!--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语句。 (编辑:厦门网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |