AD

Java程序员可能犯的3个常见SQL错误

Java程序员不仅要具备扎实的Java编程能力,在日常的工作当中往往还要涉及到其他语言的基础知识,尤其是SQL。那么哪些常见的SQL错误是程序员们容易犯的呢?让我们一起来看看吧!

你可能看到Java程序员每周的工作是编码开发一个可伸缩的Web应用程序,或创建一个动态的网站,或者开发高效的电子商务产品页面,也可能是开发一个Android应用程序等等。但是,即使他们致力于不同的项目,却往往都有一个共同点,那就是编程!

他们的职业要求长时间的工作来积累更多的编程知识。Java程序员还需要了解项目的需求、设计和开发一个属于自己的原型项目。为了使自己始终跟随行业变换的脚步,他们还必须具备其他语言的基础知识,比如HTML、SQL等等。

Java程序员的职业生涯并不是一帆风顺的,他们必须尝试每一次的挑战,即使是最好的程序员,有时在编程的过程中也难免会犯一些不可避免的错误。举个例子,在编写SQL语句时,有些错误却是绝对可以避免的。在这里,小编就为各位程序员列举一些常见的SQL错误。


1


SELECT TOP 3 common_mistakesFROM SQLProgrammingMistakes;

上述查询的结果如下:

1.不使用批量更新

在编写SQL语句时,Java程序员最常见和最大的一个错误就是忘记批处理。在表中编写成千上万的INSERT语句这确实不是一个好主意,程序员应该使用单个的SQL语言来创建一个绑定不同的参数的批处理INSERT语句。执行批处理的速度将比单个执行快得多。

我们来看看以下一个例子:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16


String [] queries = {

"INSERT INTO Employee { Eno, Ename, Ecode, EDept} values ('1', 'Allen', 'abc', 'Sales')",

"INSERT INTO Employee { Eno, Ename, Ecode, EDept} values ('2', 'Max', '102', 'Marketing')",

"INSERT INTO Employee { Eno, Ename, Ecode, EDept} values ('3', 'Ward', 'xyz', 'Sales')",

"INSERT INTO Employee { Eno, Ename, Ecode, EDept} values ('4', 'Sam', '55', 'Marketing')",

};

Connection connection = new getConnection();

Statement statement =connection.createStatement();

for (String query : queries ) {

statement.execute(query);

}

statement.close();

connection.close();

这是一个糟糕的代码,在数据库中每一行INSERT语句都需要单独来执行。发送一批INSERT语句到数据库中一气呵成:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18


import java.sql.Connection;

import java.sql.Statement;

//…

Connection connection = new getConnection();

Statement statement =connection.createStatement();

For (Employee employee: employees){

String query ="INSERT INTO Employee (Eno, Ename, Ecode, Edept) values (' " + Employee. getEno() +"', '" + Employee.getEname() +"', '" + Employee.getEcode() +"', '" + Employee.getEdept() +"')";

statement.addBatch(query);

}

statement. executeBatch();

statement.close();

connection.close();

插入大型数据集时,批处理是非常重要的。为了显著提升性能,程序员应该尽量在批处理模式下运行一条语句。执行批量插入的另外一种方法是使用PreparedStatement对象。然而批处理不仅仅只是局限于INSERT语句,你还可以利用它来执行更新、删除和声明等操作。

2.DBMS引擎未优化查询

并不是所有的Java程序员都了解SQL。在SQL查询中可以用很多种方式来得到相同的结果,但是程序员应该始终遵循最快的响应最佳的方式。

例如一个Java程序员被要求从Employee表中检索所有名字以'A'打头的员工,通常他们喜欢使用LEFT函数返回雇员名字的第一个字符:


1


SELECT EnameFROM EmployeeWHERE LEFT (Ename,1) = ‘A’;

但是这是不正确的。在上面的查询中,数据库系统将扫描整个表来找到所需的信息。不使用索引,因此会花费大量的时间在执行查询上。相反,程序员应该使用查询检索结果:


1


SELECT EnameFROM EmployeeWHERE EnameLIKE ‘A%’;

上述查询将利用指数快速有效地检索数据。所以在一般情况下,如果该DBMS引擎可以采取一个索引,程序员应尽可能使用可优化搜索的词来加快查询的执行。

3.不正确的谓词运算顺序

很多Java程序员认为查询通常的处理顺序是如下:FROM,WHERE,GROUP BY,HAVING,SELECT。上述顺序列除了用于执行查询的逻辑顺序。从逻辑上讲,FROM子句首先处理,定义了源数据表中的检索数据;接下来就是WHERE,随后就是GROUP BY等等。然在在物理上来说,查询处理是不同的。谓词的评估顺序通常是由各种规则和数据库版本来改变的。

例如下面的Employee表:

Eno Ename Ecode Edept
1 Allen abc Sales
2 Max 102 Marketing
3 Ward 55 Marketing
4 Sam xyz Sales

在给定的上表中,要检索所有销售部门员工的雇员代码大于100的。通常在这种情况下程序员将以下面的方式查询表:


1

2

3

4


SELECT Eno, EcodeAS Employee_No,Employee_Code

FROM Employee

WHERE EdeptLIKE 'M%'

AND CAST (EcodeAS INT) > 100;

然而,上面的查询结果错误:

“Conversion failed when converting the varchar value ‘abc’ to data type int”

查询失败的原因正是前面所指出的,没有规定执行谓词的顺序。在这种情况下,第二谓词求值首先导致转换错误。

相反使用CASE表达式,这里将保证只有合法的数值将被转换为int类型:


1

2

3

4

5

6


SELECT Eno, EcodeAS Employee_No,Employee_Code

FROM Employee

WHERE EdeptLIKE 'M%'

AND CASE WHEN EcodeNOT LIKE '%[^0-9]%'

THEN CAST (EcodeAS INT)

END>100;

标签: 数据库技术
分类: 编程
时间: 2014-06-14

相关文章

  1. 程序员常犯的5个非技术性错误

    一个好的软件开发人员需要培养两种技能:技术技能和非技术技能.不幸的是一些开发者只注重技术的部分,以致养成一些陋习,下面是最常犯的5个非技术性错误: 0. 缺乏自律 Jim Rohn曾经说过:自律是目标和成果之间的桥梁.我 ...
  2. Java程序员应该了解的10个面向对象设计原则

    面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator.Observer这 ...
  3. Java程序员学习Flex和BlazeDS的13个理由

    本文列述了13个Java程序员应当学习Flex和BlazeDS的理由,讨论了为什么Flex结合BlazeDS是开发RIA的最佳组合之一.无论是高度交互的网站还是以Java为后端的企业应用,这项组合都是最佳选择之一.更重要 ...
  4. 成为优秀Java程序员的10个要点

    如果你是一个热衷于技术的Java程序员, 那么下面的10个要点可以让你在众多Java开发人员中脱颖而出. 1.拥有扎实的基础和深刻理解OO原则 对于Java程序员,深刻理解Object Oriented Programm ...
  5. Java程序员必须知道的5个JVM命令行标志

    这篇文章主要介绍了每个Java程序员必须知道的5个JVM命令行标志,需要的朋友可以参考下 本文是Neward & Associates的总裁Ted Neward为developerworks独家撰稿"你 ...
  6. 分享15款Java程序员必备的开发工具

    这篇文章主要介绍了分享15款Java程序员必备的开发工具,需要的朋友可以参考下 如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过.这是一款商业级的编程语言,我们没有办法不接触它. 对于 ...
  7. java程序员面试题(基础部分)

    java程序员面试题(基础部分),据说是广州一家公司招jsp程序员的初试题,这家公司是为华为做外包的 1.请写出下列Java代码的输出结果 package test; public class FatherClass() ...
  8. 61岁老大爷应聘Java程序员

    近日,有网友爆料:上海某知名游戏公司收到一封简历,一个61岁的大爷应聘java程序员.如此高龄,还忙着投简历找工作,对此,网友意见莫衷一是,有的人力撑大爷"活到老干到老,工作也是一种乐趣",有的人则认 ...
  9. 对Java学习和Java程序员找工作的一些看法

    本人做软件开发大概有6年多了,从事JAVA开发大概4年多,一直在上海. 现在我在网上总是看到大家在讨论什么架构比什么架构好,什么技术比什么技术强. 对这个我想谈谈我的几点看法. 第一.我觉得谈架构是需要有资格的.如果你T ...
  10. 9本Java程序员必读的书

    本文列出的9本书在Java程序员界都是被认为很棒的书.当一个程序员开始初学Java时,他的第一个问题应该是如何选择一本书来作为指导学习Java.这个问题也就表明,相对于其他的教程和博客,Java书籍还是很重要的参考,主要 ...
  11. Java程序员ActionScript 3入门

    我们还是勇敢面对吧:客户端对于Java程序员来说,一直都不是个友好的地方.Java在客户端的技术,包括applet.Swing和JavaFX到目前为止只取得了有限的成绩.JavaScript除了它的名字外,几乎没有什么地 ...
  12. 痛苦的Java程序员

    2014年7月21日 Java程序员出了一些问题.我一直在使用Java,到现在已经超过10年了.我也有幸使用过许多其他语言如:C#,C,C++,Python,Lua,Objective-C-我认为这对于理解Java程序员 ...
  13. 那些年,Java程序员用过的开发工具

    子曰:工欲善其事,必先利其器.说的是,工匠想要使他的工作做得好,一定要先让自己手中的工具锋利.对于程序员来说,若想高效地编写出漂亮的代码,第一个需要利的"器"就是编辑(编译)器--一个好用的开发工具. ...
  14. 为何找个优秀的Java程序员如此之难?

    Java开发者供大于求,找一个优秀的开发者犹如大海捞针.这该赖谁?赖程序员对Java没兴趣吗?还是赖瞎了眼的招聘?抑或是语言本身? Java开发者供大于求,找一个优秀的开发者犹如大海捞针.这该赖谁?赖程序员对Java没兴 ...
  15. 每个Java程序员需要了解的8个Java开发工具

    Java是计算机应用程序编程语言,被广泛用于创建Web应用.服务器处理.用户端的API开发乃至数据库等多个领域.下面列出了8个有助于你开发Java应用程序最好的Java工具. 1. SparkJava 这是一款体形轻巧, ...
  16. Java程序员面试失败的5大原因

    下面是Java程序员面试失败最有可能的5大原因,当然也许这5点原因适用于所有的程序员,所以,如果你是程序员,请认真阅读以下内容. #1 说得太少 尤其是那些开放式的问题,如"请介绍下你自己"或&quo ...
  17. Java程序员最常用的8个Java日志框架

    作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用.WEB应用以及移动应用.然而日志系统是一个成熟Java应用所必不可少的,在开发和调试阶段,日志可以帮助我们更好更快地定位bug:在运行维护阶段,日志系 ...
  18. 优秀的Java程序员必须了解GC的工作原理

    一个优秀的Java程 序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面 提升内存的管理效率 ,才能提高整个应用程序的性能.本 ...
  19. java程序员是否要学c++

    如题,我觉得其实有这个必要.可以从几个方面来看,首先我们不说java与c++语言本身的特性.从历史上来看,java和c++就有着比较密切的关系.很多人认为java就是简化版的带虚拟机的c++.这样我们在学习java后再学 ...