‘壹’ java程序员最常用的技术有哪些
Java的技术体系是非常庞大的,需要我们学习的技术非常多,往往很多初学的人,通过互联网查阅了一个庞大的学习列表,然后不知道如何下手。网上很多大牛列的技术不是不重要,但是掌握住企业应用的Java的核心技术,快速上手,是一种高效的学习手段。结合本人十余年的项目研发和带人经验,整理出如下方面。
首先JavaSE是核心,这是初学Java人员应最先接触学习的部分。Java的运行原理,jdk的配置,与jre的区别,基本数据类型,流程控制(顺序结构、选择结构、循环结构),数组、集合框架,异常处理等,这些都是比较容易学习的,需要多练习,在练习过程中加强理解。面向对象部分是Java初学者,尤其是没有任何编程语言基础的学起来有些难度,类、对象、继承、封装、多态等技术点需要多参照些现有的设计模型,学习设计的思路。诸如工厂模式、观察者模式、代理模式等重要的设计模式也是需要学习的,否则在将来应用框架时就会只知其然,不知其所以然。IO流、多线程也一定需要学习,尤其是XML、JSON等文件格式一定要掌握,这在数据交互时常用。
其次是数据库知识,作为初级Java程序员必须要掌握一种常用的关系型书库的应用,如Mysql或oracle等,数据库对象诸如表、视图等的创建、增删改查语句,尤其是查询,在企业中经常需要从十几张表、或几十张表中查询数据,所以对于如何进行内连接、外连接、以及联合查询等一定要掌握,另外对于索引、事务等也要掌握。
第三是Java Web部分,由于Java主要做web开发,一些前端技术HTML3、CSS5,javaScript,jQuery等这些不见得要学得有多深入,但是必须要掌握,tomcat、jsp,以及和数据库的交互这些都是必须要掌握的。
第四是框架部分,主流的ORM框架有Mybatis、hibernate,MVC框架有Spring MVC、Struts2等,可以优先掌握主流的SSM框架组合,框架的学习有人认为很简单,就按照规定、规范调用、使用呗,初学者可以先学习如何使用这些框架,然后慢慢的探究内部原理,因为框架是技术封装、简化的产物。
这里面有些同类型的技术比如hibernate,如果会使用Mybatis了,那么上手就会很容易,同理如果Spring MVC框架应用熟练了,那么Struts2框架其实就可以现学现卖了。
一个web程序包含的模块很多,不一定包括所有模块。
系统模块:Windows、Linux系统等。
存储模块:这里既包括关系型数据库MySQL、oracle等,也包括内存数据库redis、memcached等。
程序模块:还可以细化成持久化模块、业务逻辑模块、表现层模块,MVC框架的实现。
搜索模块:应用solr或Elasticsearch等。
服务器模块:tomcat、weblogic、Resion等
中间件模块:nginx、MQ消息队列技术等。
在这里额外说一下技术和技能的区别,初学者学一个技术可能很容易,但是这个技术如何在企业开发环境中应用这就是技能了,所以在学习的同时,要多应用,最好通过一些案例项目来学习,这样既高效,学习的还扎实。
补充一点,现在的应用级别越来越大,海量数据、高并发是处理的重点,单应用的程序已经无法满足要求,分布式是趋势,Dubbo、Zookeeper、Docker、SpringBoot、SpringCloud、MyCat等技术,包括上面系统模块里提到的一些技术都要学习的。
‘贰’ SQL设计图书管理系统
目 录
图书管理信息系统的设计和实现
端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。而对于后者则要求应用程序功能完备,易使用等特点。
本图书管理信息系统是利用计算机管理信息处理的迅速、准确、可靠且具有强大存储能力的突出特点,全面提高图书馆的管理水平和工作效率,并以及时、完整的业务经营资料,为图书馆的及时转换提供一定的支持。本图书管理系统涵盖了六个主要的子系统:图书资料管理、读者资料管理、借书操作、还书操作、修改密码和查询处理,并通过信息的收集、整理、存储、传递将它们有机地结合起来,提高了工作的准确率和效率。
本论文从系统分析、需求分析、概要分析、详细分析到系统实施、系统运行、系统维护等几个方面详细阐述了图书管理系统的开发过程,记录了开发过程中的分析依据和设计思路及相关图表,阐明了主要的设计内容和实施、运行情况,为本系统的使用、升级提供了完备的资料。
本系统开发时间将近四个月,初步完成了图书管理信息系统的初级版本,系统基本上实现了原定的基本功能,并将在以后进行陆续的改进和完善。
关键词:Delphi;SQL Server 2000;数据库;图书管理信息系统
Design And Implementation of The Books Management Information System
Abstract:The books management information system is the typical information management system (MIS), It mainly develops including two respects ,one is setting-up and maintenance of backstage supporter's database . Another is developing the front application program. As to the former demand set up data consistency , integrality strong and data security kind database.require to the latter the function of the application program is complete , Easy to use and so on the characteristic.
This books management information system is using the computer management information processing rapid, accurate, is reliable also has the formidable memory property the prominent characteristic, comprehensively enhances the library the management level and the working efficiency, and take the prompt integrity account executive material, provides the certain support for newer books and reference materials in time of the library. The books management information system has covered six subsystems: The books and reference materials management, the reader material management, taking advantage of the book operation, modify password and also the book operation, inquiry processing, and through the information collection, the reorganization, the memory, the transmission organically unifies them, enhanced the work rate of accuracy and the efficiency.
This thesis from the system analysis, the demand analysis, the outline analysis, the multianalysis to the system implementation, the system movement, the system maintenance and so on several aspects in detail elaborated the books management information system performance history, recorded in the performance history analysis to rest on and to design the mentality and the correlation graph, had expounded the main design content and the implementation, the movement situation, for this system use, the promotion have provided the complete material.
This system is nearly four months construction period, finished the elementary edition of the books administrative system tentatively, the system has basically realized the original basic function, and will carry on improvement and completion successively afterwards.
Keyword: Delphi ; SQL; database; books management information system
前 言
随着我国经济的高速发展,人们的物质需求已趋向饱和,而精神上的需求却日益提高。学习的繁重、工作的压力、竞争的刺激使人们感到知识的困乏,渴望进一步的充电。同时当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,正是因此计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。管理信息系统是先进的科学技术和现代管理相结合的产物,建立以计算机为主要手段的管理信息系统,已成为现代企业、政府部门等各类组织提高自身素质、实现组织的战略目标。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
为满足图书馆业务发展的需要,提高竞争能力,我决定利用计算机来提高图书馆管理水平和工作效率。根据图书馆的日常需要,确定系统要实现六个基本功能:图书资料管理、读者资料管理、借书操作、还书操作、修改密码和查询处理。同时该系统具有强大的查询功能和可靠性。
目标是努力达到:读者满意。图书馆内藏书丰富,品种齐全,但随着信息处理量的快速增大,工作越来越繁多、要求全面、先进、高效。纯办公软件无论从准确度还是及时性上都已无法满足业务的需要。因此,开发一个界面友好,易于操作的图书馆软件进行自动化处理变得十分重要,本系统开发目的和意义就是为了管理好图书馆信息,使图书管理工作规范化、系统化、程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。此图书管理信息系统以“以人为本”为服务宗旨,提高对读者的服务质量。
1 Delphi和SQL简介
1.1 数据库的介绍
数据库技术是计算机科学技术中的重要领域,也是应用最广的技术之一,而且已经成为电子信息系统的重要核心技术。众所周知,计算机应用从科学计算进入数据处理是一个划时代的转折。数据处理是指对各种形式的数据进行收集、存储、加工和传播的一系列活动的总和。其目的是从大量的,原始的数据中抽取,推导出对人们有价值的信息经作为行动和决策的依据,是为了借助计算机科学地保存和管理复杂的,大量的数据以便人们能方便而充分地利用这些宝贵的信息资源。数据库技术所研究的问题就是如何科学地组织和存储数据,如何高效地获取和处理数据。数据库系统就是当代计算机系统的重要组成部分。
数据处理的中心问题是数据管理,数据管理随着计算机硬件和软件的发展而不断发展,经历了三个阶段:人工管理阶段,文件系统阶段和数据库系统阶段。数据库系统具有以下特点:(1)数据结构化。(2)数据的共享性高、冗余度低、易扩展。(3)数据独立性高。(4)数据由DBMS统一管理和控制。包括数据的安全性保护,数据的完整性检查,并发控制以及数据库备份和恢复[2]。我做的图书管理系统中主要是用了Delphi和SQL 。
1.2 Delphi的简介
计算机软件的开发分为两个不同的分支,其中一个分支是使用传统的程序设计语言开发数值控制、数值运算等软件,围绕它们的重点是算法,数据结构以及面向对象技术,这里基本采用Pascal,Basic和C等到高级程序设计语言。另一个分支则是通用的数据库管理软件领域即数据库应用程序的开发。这两个分支的发展都有极为迅速,但是二者并没出现混合渗透的迹象。如果使用数据库语言进行传统的编程,虽然也能完成相应的功能,但是其编程过程可能极为复杂。反之,如果使用传统的编程语言进行数据库编程,通过调用专用的数据库应用程序接口函数据和过程,可能也会做出比较完善的数据库管理程序,但做起来大多是极其困难的。而Delphi结合了两个分支的优点,它结合了传统的编程语言Object Pascal和数据库语言的强大功能,既可以用于传统的算法编程,又可以用于数据库编程。特别是Delphi具有强大的数据库开发功能,利用Delphi的数据库开发工具,根本不需要编写任何Object Pascal代码便可以创建一个一般的数据库应用。
Delphi是面向对象的开发工具,它是目前开发客户/服务器数据库应用程序的强有力的工具。Delphi目前有两个版本:标准版本和客户/服务器版本。标准版本包含一个Borland Database Engine的局部拷贝,它允许用户创建能访问Dbase,Paradox 和 Local Inter Base服务器的数据库应用,它还支持具有ODBC(Open Database Connecticity)接口的数据库。客户/服务器版本包括Borland SQL Link,它能直接访问Oracle,SyBase 和Microsoft SQL Server,Informix等多种数据库服务器。
Delphi可以访问多种数据库管理系统的数据库,凭借窗体和报表,BDE(Borland Database Engine)可以访问Paradox,dbase,本地Inter Base服务器的数据库,也可以访问远程数据库服务器的
2 系统分析
2.1 系统调查
系统调查的主要内容有:系统的基本情况、系统中信息处理的状况、系统的资源情况及系统的各类人员对信息系统的态度。同时我了解到图书馆的使用人员有(1)系统管理员:维护整个系统的正常运行、及时更新系统,给每个新用户建立读者信息,给每个注销用户删除相应的读者信息。(2)图书管理员:负责给同学办理借书、还书、修改图书基本信息和图书流通状态。(3)读者:包括学生用户、老师用户和外界人士。
图书馆的组织机构设置如图1所示。
图1图书馆的组织结构
系统中信息处理状况:
通过对原有系统数据流程的分析,可以发现这种模式存在着一些不合理之处,完全可以改进,使工作效率提高,减少信息迂回。
图书馆现行系统存在的问题:第一,日常管理工作缺乏规范性,随意性很大,对人的经验水平有很大的依赖性,因此具体操作往往因人而异;第二,资料多次手工处理,如逾期通知等,出错率高,完全可以用数据库检索自动生成。第三,数据重复率高,有些地方人员多次使用相同数据,有些信息完全可以归类,第四,缺乏统计工作。
所以完全可以通过建立一套完整的图书管理信息系统,来对信息进行查询、修改、统计、检索等日常管理工作,尽量减少的人员介入和数据冗余,以简练实用为基础,实现信息管理计算机化提高工作效率和信息化水平。
2.2 可行性分析
可行性分析对系统的开发至关重要,可以大幅减少不必要的损失,保证系统开发的顺利进行。因此要对系统进行技术可行性、经济可行性、操作可行性三方面的系统可行性分析:
2.2.1 技术可行性
近几年来计算机技术发展异常迅猛,高速度大容量的电脑已成为许多学校里日常工作必不可少的设备,随着办公自动化的软件不断涌现,微机的普及为该系统的开发奠定了坚实的基础。
2.2.2 经济可行性
一方面,系统的开发不需要额外增加设备购置费、软件开发费、管理和维护费用。另一方面,系统的开发可以较好地解决图书馆因日常事务繁杂而造成的处理效率低,出错率偏高的局面,并可以及时了解各项日常事务的进展情况,为及时调整库存资料提供可靠的数据支持,从而明确工作目标,同时还可以减少人工劳动、提高工作效率、增加书本流通量。
2.2.3 操作可行性
计算机以强大的信息处理能力作为人类脑力劳动的有利助手登上历史舞台后,已渗透到社会生活的各个领域,使现代社会组织、特别是企业,学校的信息处理能力适应现代化管理的要求,且系统逐步从单项事务信息处理系统迅速向综合服务(决策支持系统)的管理信息系统发展。本系统使用界面良好,易于操作。图书馆拥有一批较高素质的员工,只需了解相关知识,就可熟练操作本系统了。
通过以上分析,图书馆管理信息系统的开发在经济上、技术上、操作上都是可行的。
2.3 系统的总目标
图书馆管理信息系统的总目标是按照管理信息系统的管理和开发方法,采用先进的信息技术和手段,支持并规范图书和读者资料的管理、借书、还书、修改密码、查询书本或学生等操作的全过程,并加强上述过程中各种信息资源的管理和应用,提高各部门管理工作的现代化水平,实现各部门信息的准确、及时处理和沟通及共享,为图书馆对库存资料的决策提供有利的支持和反馈信息,以实现图书馆的总体目标。
2.4 具体目标
(1)每年开学,新生报到的时候,图书馆系统管理员要给每一位新生的信息建立个人档案,办理图书借阅证。学生的个人档案包括学生的学号、姓名、性别、班级、年级、所属专业、电话号码。
(2)学生毕业的时候,图书馆系统管理员要及时对每位学生的信息进行删除。
(3)每次新进图书的时候,图书管理员要对每本图书的信息进行管理和录入,以方便读者的借阅。图书的基本信息有:图书索引号、图书名、作者、出版社、出版日期和图书的使用状态。
(4)当图书被读者借阅的时候,图书管理员要改变图书的使用状态,不再允许借阅,但是允许预约,而且每本书只允许被一个读者借阅,也只能被一个读者预约。
(5)当学生借阅的图书延期的时候,图书管理员要及时通知学生归还图书,并对其进行相应的处罚。学生可以在图书未超期的情况下办理续借。
(6)学生可以在图书管理系统中查询自己的借阅情况。
(7)当图书被损坏或图书出馆时,图书管理员要及时修改相应的图书信息。
(8)系统还应该提供强大的数据统计,查询等功能。
(9)系统应充许外界人士通过规定的步骤注册成为新用户,并享有一定的权利。
(10)系统应该有很好的可扩展性。
3 需求分析
需求分析阶段的根本任务是要明确图书馆在决策和日常事务处理上的信息需求,以便提出整个系统的总体方案。在需求分析中,主要采用流程图和数据字典来描述。
3.1 事务流程图
通过对图书馆的多次调查,大致了解了图书馆的日常的管理事务流程。每日处理的工作如图2所示。
图2图书馆的事务图
(1) 图书资料的管理
图书管理员将采购的图书入库分类处理,同时建立相关的图书资料信息,如果该书已有,则修改现有书本数等于原有书本数加新增书本数。如有图书损坏及罚款处理,也修改图书资料信息。如果图书出馆,则删除相关的图书资料信息。
(2) 读者资料管理
每年新生入校的时候,系统管理员要为每一个学生办理相应的图书借阅许可证,学生填写登记表包括学生学号、姓名、性别、年级、班级、专业名称、电话号码等基本信息。核对无误后交由系统管理员办理学生借阅证,如果读者更改任何个人信息,则应由学生写出书面申请,由系统管理员在相应的读者基本信息中进行修改。如果学生要离开学校,则审核该读者是否有逾期书籍和损坏,如无,则办理撤消业务,同时在读者资料库中删除该读者。最后给读者合格注销通知。对于教师用户也是一样的处理过程。
(3) 借书操作
读者把借阅证及想要借的图书交给图书管理员,图书管理员进行审核,如该读者是否有过期未还的图书,是否借阅图书已超过五本或未交清罚款,有上述情况之一则通知该读者借阅不成功。否则借阅成功,图书交给读者。同时图书管理员修改图书、读者及图书流通信息表。如读者逾期则可电话联系。如读者发现该图书已借出,则只可在图书资料库中进行预约。一本书同一时间只能被一个读者预约。如读者续借,则延长读者应还书日期。读者只可在该书本尚未超期的情况下才可以进行续借,否则续借不成功。
(4) 还书操作
读者把借阅证及要还图书交给图书管理员,由他进行审核,如该图书有逾期或破损,则通知该读者按比例罚款。否则图书交图书管理员放回书库。并修改图书、读者借书信息表。读者遗失书本则给予原价五倍赔偿。
(5) 查询处理
读者可以到图书馆内的电脑上查询自己的借书信息表,查询图书是否逾期,是否可以进行续借,也可以查找自己要借的图书是否在馆,以及近期图书馆的动态和公告。图书管理员可在图书到期前一天打印逾期清单,电话联系读者,以方便读者及时还书,加快书本流通。
(6) 修改密码
为了方便管理,图书馆系统管理员会给每一个新注册的用户一个初始密码,读者用初始密码首次登录系统后,应及时修改自己的密码,以保护自己的权利。或在使用的过程中通过修改密码来防
D1 库存清单
图7 归还图书的DFD
3.3 数据字典
int 4 f 所在专业代码
varchar 20 专业名称
表3图书基本信息表
字段名 字段类型 长度 NULL 字段意义
bookid varchar 10 f 图书索引号
bookname varchar 30 f 图书名称
Autor char 10 f 作者名字
department Int 4 所在书库代码
description char 20 描述
Lend char 1 f 是否借出
appoint char 1 f 是否预约
表4学生基本信息
userid varchar 10 f 用户编号
username varchar 10 f 用户名
sdepartment char 30 部门或专业
password varchar 20 f 密码
Right_1 bit 1 f 查询权
Ringht_2 bit 1 f 管理权
表6库存信息表
字段名 字段类型 长度 NULL 字段意义
department int 4 f 书库代码
description varchar 20 书库名称
3.4 数据项的页码设计
(1)对读者编号,为了便于查找采用层次码。
如:02(年级,即入学年份) 09(学院代码) 1(专业代码) 279
[注]: 学院代码如:商学院---01 信息学院---02 土木学院---03
外语学院---04 艺术学院---05 计算机科学与工程学院---09
计算机科学与工程学院的专业代码如:计算机科学与技术专业---1
网络专业---2
(2)图书编号,为了便于得到有关信息采用层次码。
如:TP(类别) 3111(编号) 01(内部编号)
[注]: 内部编号:同时采购了五本相同的图书,在类别和编号相同的时候,用01,02,03,04,05分别代表这五本相同的图书。
编号: 计算机应用基础---3111 计算机网络---3112
计算机组成原理---3113 数据库---3114
类别: 计算机类--- TP 文学类--- I 艺术类---V
数理化---O 英语类---H
4 概要设计
4.1 总体设计
系统功能结构如图8所示。
图8系统功能结构示意图
4.2 局部 E_R图
学生基本信息,图书基本信息,用户信息和读者借书情况表的局部E-R图如图9至图12所示。
图10书本基本信息表
图12 读者借书信息表
4.3 总体E-R图
本图书管理信息系统的总体E-R图如图13所示。
图13 总体E-R图
部分联系的属性如下:
1.借阅{借阅编号、图书索引号、借阅证号、借书日期、还书日期}
2.预订{预订编号、图书索引号、借阅证号、预订日期}
3.采购{采购编号、图书索引号、采购价格、采购数量}
4.报废{图书索引号,报废时间,报废原因}
4.4 E_R图向关系模型的转化
E_R图向关系模型的转化要解决的问题是如何将实体和实体之间的联系转化为关系模式,如何
图15 修改图书记录
图16 修改学生记录
图17 查询/借阅/预约图书
图18 查询/归还已借阅图书
5.2 建立索引和嵌套查询
索引是数据库中一常用而重要的数据库对象集。索引改进了数据库的性能和可访问性,可以用来排序和快速访问数据。大大改善了数据库的性能。下面以本人的图书管理信息系统中的book表为被借出时不能被预约。
(8) 修改图书的基本信息
这是图书管理员的权力,包括添加,删除和修改图书信息。当有新添加进来的图书时,图书管理员要查看图书馆里是不是已存有这样的图书,发现已有库存时,要修改图书的数目,否则就加入新的图书信息。当有旧书或损坏了的图书要退出的时候,要及时减少相应图书的数目或是删除相应的图书信息。学生借出书或归还图书时,要及时地修改图书流通信息表。
(9) 修改学生用户的基本信息
系统管理员在这里添加,删除和修改学生和教师的基本信息。当有新生入校时,根据学生填写的基本信息表为每个新生注册一个用户名,在校期间如果学生基本信息有变化可以交系统管理员审核后修改相应的信息,毕业或注销用户时,管理员要及时删除相应的记录。教师的处理情况相同。
(10)初始化系统
当遇到不可恢复的重大意外损伤时系统管理员可以用它来重新恢复图书馆的基本信息,保证图书管理系统正常工作。除了用户信息表恢复初始值外,其它的数据信息都会被清零。
(11) 公告栏
系统管理员向所有登录用户和外界人士及时发布图书馆最新消息的地方,包括注意事项等。
(12) 意见箱
所有登录用户可以在这里向系统管理员和图书管理员提出对图书管理的宝贵意见,方便管理员及时采取相应措施修改管理方案,方便用户以后的使用,提高整个系统的性能。
本系统主要提供图书管理,学生用户管理和系统管理。以下列出了图书管理信息系统主模块,系统总体结构、图书/读者功能模块和图书流通功能模块的示意图如图19至图21所示。
图19系统总体结构
图20图书/读者功能模块
图21图书流通功能模块
5.5 界面设计及功能实现
5.5.1 登录界面设计及功能的实现
图22 登录界面
‘叁’ Java程序员在写SQL时常犯的错误!
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相比UNION ALL还需要额外的关键字。如果SQL标准已经规定了支持,那么可能会更好点。
UNION(允许重复)UNION DISTINCT (去除了重复)移除重复行不仅很少需要(有时甚至是错的),而且对于带很多行的大数据集合会相当慢,因为两个子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等),这些比在内存中实现分页更快速。在处理大量数据中,效果尤其明显。
解决方法:
仅仅使用这些语句,那么一个工具(例如JOOQ)就可以模拟这些语句的操作。
5、在Java内存中加入数据
从SQL的初期开始,当在SQL中使用JOIN语句时,一些开发者仍旧有不安的感觉。这是源自对加入JOIN后会变慢的固有恐惧。假如基于成本的 优化选择去实现嵌套循环,在创建一张连接表源前,可能加载所有的表在数据库内存中,这可能是真的。但是这事发生的概率太低了。通过合适的预测,约束和索 引,合并连接和哈希连接的操作都是相当的快。这完全是是关于正确元数据(在这里我不能够引用Tom Kyte的太多)。而且,可能仍然有不少的Java开发人员加载两张表通过分开查询到一个映射中,并且在某种程度上把他们加到了内存当中。
解决方法:
假如你在各个步骤中有从各种表的查询操作,好好想想是否可以表达你的查询操作在单条语句中。
6、在一个临时的笛卡尔积集合中使用 DISTINCT 或 UNION 消除重复项
通过复杂的连接,人们可能会对SQL语句中扮演关键角色的所有关系失去概念。特别的,如果这涉及到多列外键关系的话,很有可能会忘记在JOIN .. ON子句中增加相关的判断。这会导致重复的记录,但或许只是在特殊的情况下。有些开发者因此可能选择DISTINCT来消除这些重复记录。从三个方面来说 这是错误的:
它(也许)解决了表面症状但并没有解决问题。它也有可能无法解决极端情况下的症状。对具有很多列的庞大的结果集合来说它很慢。DISTINCT要执行ORDER BY操作来消除重复。对庞大的笛卡尔积集合来说它很慢,还是需要加载很多的数据到内存中。解决方法:
根据经验,如果你获得了不需要的重复记录,还是检查你的JOIN判断吧。可能在某个地方有一个很难觉察的笛卡尔积集合。
7、不使用MERGE语句
这并不是一个过失,但是可能是缺少知识或者对于强悍的MERGE语句信心不足。一些数据库理解其它形式的更新插入(UPSERT)语句, 如 MYSQL的重复主键更新语句,但是MERGE在数据库中确是很强大,很重要,以至于大肆扩展SQL标准,例如SQL SERVER。
解决方法:
如果你使用像联合INSERT和UPDATE或者联合SELECT .. FOR UPDATE然后在INSERT或UPDATE等更新插入时,请三思。你完全可以使用一个更简单的MERGE语句来远离冒险竞争条件。
8、使用聚合函数代替窗口函数(window functions)
在介绍窗口函数之前,在SQL中聚合数据意味着使用GROUP BY语句与聚合函数相映射。在很多情形下都工作得很好,如聚合数据需要浓缩常规数据,那么就在join子查询中使用group查询。
但是在SQL2003中定义了窗口函数,这个在很多主流数据库都实现了它。窗口函数能够在结果集上聚合数据,但是却没有分组。事实上,每个窗口函数都有自己的、独立的PARTITION BY语句,这个工具对于显示报告太好了。
使用窗口函数:
使SQL更易读(但在子查询中没有GROUP BY语句专业)提升性能,像关系数据库管理系统能够更容易优化窗口函数解决方法:
当你在子查询中使用GROUP BY语句时,请再三考虑是否可以使用窗口函数完成。
9、使用内存间接排序
SQL的ORDER BY语句支持很多类型的表达式,包括CASE语句,对于间接排序十分有用。你可能重来不会在Java内存中排序数据,因为你会想:
SQL排序很慢SQL排序办不到解决方法:
如果你在内存中排序任何SQL数据,请再三考虑,是否不能在数据库中排序。这对于数据库分页数据十分有用。
10、一条一条地插入大量记录
JDBC“懂”批处理(batch),你应该不会忘了它。不要使用INSERT语句来一条一条的出入成千上万的记录,(因为)每次都会创建一个新 的PreparedStatement对象。如果你的所有记录都插入到同一个表时,那么就创建一个带有一条SQL语句以及附带很多值集合的插入批处理语 句。你可能需要在达到一定量的插入记录后才提交来保证UNDO日志瘦小,这依赖于你的数据库和数据库设置。
解决方法:
总是使用批处理插入大量数据。
来自:OSChina
译者:oschina.net/translate/10-common-mistakes-java-developers-make-when-writing-sql
‘肆’ 程序员。数据库软件SQL SERVER2005在服务里始终没有SQLSERVER(MSSQLSER
启动:net start mssqlserver
暂停:net pause mssqlserver
重新启动暂停的SQL SERVER:net continue mssqlserver
停止:net stop mssqlserver
DOS命令启动sql实例的服务大家都知道用NET START MSSQLSERVER\NET STOP MSSQLSERVER可以启动、关闭SQL默认的实例服务
但是如果安装了SQL实例,那么要启动这个实例的服务,就需要修改一下
比如安装了一个实例NewData,那么启动的时候就用
NET START MSSQL$NewData
即把原来的server换成 $实例名
关闭同理,用NET STOP MSSQL$NewData
‘伍’ 一个Java程序员有必要精通SQL么
程序员精通SQL是最基本的要求
因为做的程序是需要跟数据进行交互的,没有数据交互的程序,应用层面太狭隘了。
国外的岗位区分的很明确,专门写代码的,专门做数据库的,即便如此,也有区分,专门处理前台的、后台,专门做框架的架构师,还有专门的测试工程师。
但是国内不同,基本上程序员要掌握除了架构以外的全部技能。可以说国内的一流程序员就是万能的,什么都会。
这个也导致了国内IT行业从业人员入门的门槛高,培训不规范。新人不知道该从何入手。
现在国内的IT行业人才缺口很大。这个问题,本身跟行业规范也有一定原因。
作为刚刚进入行业的程序员,第一考虑的是自身能力一定要跟上公司的技能需求,然后在此基础上不断学习,有方向有机会的学习新的技能。这样才能拿到高薪。