美国上市公司,专注Java培训21年

Java教程-Java程序员常犯的8个SQL错误


Java程序员常犯的8个SQL错误?对于Java程序员而言,在编程时时常需要面临混合面向对象思维和一般命令式编程的方法,如何将两者巧妙的结合起来是检测一个程序员水平的关键之处。

但是当Java程序员写SQL语句时,程序员所遇到的问题就不一样了。因为SQL是说明性语言而非面向对象或是命令式编程语言。在SQL中要写个查询语句是很简单的。但在Java里类似的语句却并不相同,往往会出现不少问题,因为此时不仅要反复考虑编程范式,还需要考虑算法的问题。

下面小编整理了一些Java程序员在写SQL时最常出现的8个错误,并在下方提供了解决方法,希望能够帮助大家尽量避免类似的问题出现。

Java教程-Java程序员常犯的8个SQL错误

1、Java教程-Java程序员常犯的8个SQL错误-忘掉NULL

许多Java程序员在写SQL时都会因为两个原因对NULL产生误解,一个因为NULL也称作UNKNOWN。另一个则是因为当我们从数据库拿东西或是绑定变量时,JDBC将SQLNULL和Java中的null对应了起来。这样就导致了NULL=NULL(SQL)和null=null(Java)的误解。

解决方法:

轻率地使用null可能会导致很多令人惊愕的问题。通过学习Google底层代码库,我们发现95%的集合类不接受null值作为元素。这里提议,相比默默地接受null,使用快速失败操作拒绝null值对开发者更有帮助。

2、Java教程-Java程序员常犯的8个SQL错误-使用UNION代替UNIONALL

当SQL语句需要UNION两个查询结果集合时,这两个结果集合会以OracleUNIONALL的方式被合并,然后在输出最终结果前进行排序。假如用OracleUNIONALL替代UNION,这样排序就不是必要了。效率就会因此得到提高。

需要注意的是,OracleUNIONALL将重复输出两个结果集合中相同记录。因此各位还是要从业务需求分析使用OracleUNIONALL的可行性。UNION将对结果集合排序,这个操作会使用到SORT_AREA_SIZE这块内存。对于这块内存的优化也是相当重要的。

3、Java教程-Java程序员常犯的8个SQL错误-在Java内存中处理数据

很多Java开发者会将SQL数据加载到内存中,然后将这些数据转换成某些相近的集合类型,然后再那些集合上面使用边界循环控制结构(至少在Java8的集合升级以前)执行令人生厌的数学运算。

但是一些但是一些SQL数据库支持先进的OLAP特性,,这样可以使开发者使用起来更方便一些,举个例子来说,让数据库做处理之后将结果带到Java内存中。以上操作,你可以通过通过将OLAP移到数据库,获得一下两项好处:

1)便利性,这种操作比在Java中编写正确的SQL来的更加容易。

2)效率,数据库比算法处理起来更加快,并且,操作人员不必再去传递百万条记录了,极大的提高了工作效率。

所以,当开发者使用Java实现一个以数据为中心的算法时,可以先问问自己,有没有一种方法可以让数据库来代替为我做这种麻烦事,这样也能大幅度的提高工作效率。

4、Java教程-Java程序员常犯的8个SQL错误-在Java内存中加入数据

每个开发者在使用SQL初期,对于在其中使用JOIN语句,都并不是十分的确认。如果基于成本的优化去选择实现实现嵌套循环,在创建一张连接表源前,可能加载所有的表在数据库内存中,这可能是可行的,但是发生的概率太低了。不少Java开发人员在加载两张表通过分开查询到一个映射中,并且在某种程度上把他们加到了内存中。其实正确的做法是,当你在各个步骤中都有从各种表的查询操作,那么先好好想想是否可以表达你的查询操作在单条语句中,再去实践。

5、Java教程-Java程序员常犯的8个SQL错误不使用MERGE语句

许多开发者不用MERGE语句的最大原因可能是缺少知识,或者对其强大语句信心不足,但是MERGE语句在数据库中着实强大,以至于大幅度的扩展了SQL的标准,例如SQLSERVER。

所以开发者完全可以尝试使用这一强大的语句,当你使用像联合联合INSERT和UPDATE或者联合SELECT..FORUPDATE然后在INSERT或UPDATE等更新插入时,完全可以使用一个更简单的MERGE语句来远离冒险竞争条件。

6、Java教程-Java程序员常犯的8个SQL错误-使用内存间接排序

有很多开发者因为SQL排序慢或是功能性达不到的原因,不会选择在Java内存中排序数据。这时候SQL的ORDERBY语句就可以派上用场,它支持支持很多类型的表达式,包括CASE语句,对于间接排序十分有用。当你在内存中排序任何SQL数据,要先考虑一下能否在数据库中排序。这对于数据库分页数据十分有用。

7、Java教程-Java程序员常犯的8个SQL错误-通过JDBC分页技术给大量的结果进行分页操作

几乎大部分的数据库都会支持一些分页命令实现分页效果,譬如LIMIT..OFFSET,TOP..STARTAT,OFFSET..FETCH语句等,因为这些比在内存中实现分页更为快速,尤其在处理大量数据中,更为明显。往往仅仅使用这些语句,那么一个工具(例如JOOQ)就可以模拟这些语句的操作。

8、Java教程-Java程序员常犯的8个SQL错误-一条一条的插入大量纪录

不要使用INSERT语句来一条一条的出入成千上万的记录,(因为)每次都会创建一个新的PreparedStatement对象。如果你的所有记录都插入到同一个表时,那么就创建一个带有一条SQL语句以及附带很多值集合的插入批处理语句。

你可能需要在达到一定量的插入记录后才提交来保证UNDO日志瘦小,这依赖于你的数据库和数据库设置。

相比于其他语言来讲,SQL的入门和学习并不难,甚至可以说是编程语言里相对最简单的,“快速入门,轻松掌握是SQL最大的特点,希望小伙伴们汲取经验,避免发生以上问题。


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • Java编程工具用哪个最好
    Java编程工具用哪个最好
    Java编程工具用哪个最好?Java编程工具的选择取决于个人的偏好、项目需求和开发环境。以下是一些常用的Java编程工具: 详情>>

    2024-04-03

  • 好用的Java编写软件
    好用的Java编写软件
    Java是一种广泛使用的编程语言,因其跨平台、安全性和稳定性而受到许多开发者的喜爱。Java被用于开发各种类型的软件,从桌面应用程序到企业级服务器端应用程序。以下是一些常见的、用Java编写的软件示例: 详情>>

    2024-04-02

  • Java测试工具有哪些?
    Java测试工具有哪些?
    Java测试工具有哪些?Java测试工具有很多,可以用于不同的测试阶段和目的,包括单元测试、集成测试、性能测试等。以下是一些流行的Java测试工具: 详情>>

    2024-04-02

  • Java有哪些课程?
    Java有哪些课程?
    Java是一种功能丰富且易于学习的编程语言,适用于多种不同的应用领域。目前,许多机构和在线平台都提供了丰富的Java相关课程,课程内容涵盖了Java的基础知识、高级特性以及实际应用等方面。以下是一些Java课程的示例: 详情>>

    2024-03-14

  • Java开班时间

    收起