阴阳代理人林雅丽是谁,饲料上市公司,好听的狗名字
#编程#
Java法式员编程时必要夹杂面向对象思维和一般下令式编程的方法,可否完善的将两者连系起来完全得寄托编程人员的水准:
妙技(任何人都能容易学会下令式编程)
模式(有些人用“模式-模式”,举个例子,模式能够应用到任何处所,并且都能够归为某一类模式)
心境(首先,要写个好的面向对象法式是比下令式法式难的多,你得破费一些功夫)
但当Java法式员写SQL语句时,统统都纷歧样了。SQL是阐明性语言而非面向对象或是下令式编程语言。在SQL中要写个查询语句是很简洁的。但在Java里类似的语句却不容易,因为法式员不仅要反复思量编程范式,并且也要思量算法的问题。
下面是Java法式员在写SQL时常犯的10个错误(没有特定的顺序)。
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 ALL(允许重复)
UNION (去除了重复)
移除重复行不仅很少必要(有时甚至是错的),并且对于带很多行的大内容鸠合会相当慢,因为两个子select必要排序,并且每个元组也必要和它的子序列元组对照。
注意即使SQL尺度划定了INTERSECT ALL和EXCEPT ALL,很少内容库会实现这些没用的鸠合操纵符。
解决方法:
每次写UNION语句时,思量现实上是否必要UNION ALL语句。
4、通过JDBC分页手艺给大量的效果进行分页操纵
大部门的内容库都会支持一些分页下令实现分页结果,譬如LIMIT..OFFSET,TOP..START AT,OFFSET..FETCH语句等。即使没有支持这些语句的内容库,仍有可能对ROWNUM(Oracle)或者是ROW NUMBER()、OVER()过滤(DB2、SQL Server2008等),这些比在内存中实现分页更快速。在处理大量内容中,结果尤其明显。
本文地址:http://www.wbwb.net/bianchengyuyan/215680.html 转载请注明出处!