数据流Java

2024-10-19

数据流Java(精选11篇)

数据流Java 篇1

1 概述

软件开发中,数据库往往是信息系统的基石,即便是最简单的信息系统中都会涉及到数据的持久性和数据的访问。而JAVA作为一种可以撰写跨平台应用软件的面向对象的程序设计语言,被广泛的应用与当前的各种信息系统开发。但对于用Delphi及.Net开发过应用系统的开发人员大多都使用过数据集组件来连接数据库并操作数据库表数据的功能。这些功能使用很方便,同时有强大的数据操纵能力,可以对各种数据库进行统一操纵,数据组件会根据不同数据库的语法要求自动生成新增(insert)、修改(update)及删除(delete)等DML语句对数据库记录进行操纵。在JAVA环境中没有与之对应的数据集组件,JAVA主要依靠JDBC接口[1]来操作数据库数据,但JDBC属于一个较低层次的接口,虽然功能强大但需要较多的编程量,所以使用并不方便。有些JAVA持久层框架[2(]如Hibernate)基于JDBC做了一些包装并提出了OR映射的概念,通过操作对象的方式间接操作关系数据库中的记录,由OR映射框架自动将对象的新增、修改、删除等操作自动转换成特定关系数据库的DML语句。这种方式在JAVA世界中应用很多。但OR映射需要许多手工配置,且在涉及大数据量且表间关系复杂的情况时容易出现性能问题。并且对习惯SQL及数据集操作的程序员来说,对于对象的操作不如对记录行的操作直接和灵活。针对这些框架的问题,IBM和BEA设计了SDO(Service Da-ta Object)[3],方便了数据访问和操作。该文借鉴了SDO的方法及Delphi、.Net数据集的设计理念[4-7],应用软件设计模式方法[8-9],结合实际的开发经验,设计一种基于JDBC的JAVA通用数据集数据访问框架。

2 总体设计

整个框架设计的目标包括:

1)通用性,实现一种通用的关系数据库访问机制,能够独立于数据库,采用一致的数据集的方式访问及操作各种关系数据库。

2) 方便性,充分利用数据库的元数据功能,无需配置就能根据数据集的状态,自动生成某种数据库的DML语句,尽量减少编程量。

3) 扩展性,能支持现存或未来出现的各种关系数据库系统。

设计思路:

为达到以上设计目标,考虑将通用数据集框架主要分为2个大的部分来实现:

第一部分是独立于数据库的,这一部分里,所有操作的实现对数据库来说是完全中立的,无需考虑数据库的差异性;

第二部分是数据库相关的,这一部分里,所有操作的实现都要考虑特定数据库的差异,并通过接口及抽象类使这种差异对第一部分屏蔽。

3 独立于数据库的部分设计

独立于数据库的部分主要是数据表(Data Table)对象,其中包括数据列管理器(Data Columns)、数据列(Data Column)、数据行管理器(Data Rows)、数据行(Data Row)、数据字段(Data Field)等对象。对于开发应用开发者来说,主要是对这些部分的对象进行操作。以下对这些对象的功能进行介绍。

3.1 数据表对象(Data Table)

Data Table数据表,实现IData Table接口,负责在内存中保持及操作数据集,并自动记录数据集及记录行的状态等信息。

IData Table接口定义如下:

数据表(Data Table)对象主要依靠所包含的数据列管理器(Data Columns)、数据列(Data Column)、数据行管理器(Data Rows)、数据行(Data Row)、数据字段(Data Field)等对象来实现数据集的操纵功能。

3.2 数据列管理器对象(Data Columns)

数据列管理器对象(Data Columns)实现接口IData Columns接口,是管理数据列对象(Data Column)的容器。

IData Columns接口定义如下:

3.3 数据列对象(Data Column)

数据列对象(Data Column)实现接口IData Column接口,主要记录表字段的属性信息。

IData Column接口定义如下:

3.4 数据行管理器对象(Data Rows)

数据行管理器对象(Data Rows)实现接口IData Rows接口,是管理数据行对象(Data Row)的容器。

IData Rows接口定义如下:

3.5 数据行对象(Data Row)

数据行对象(Data Row)实现接口IData Row接口,主要用于管理记录行。

IData Row接口定义如下:

3.6 数据字段对象(Data Field)

数据字段对象(Data Field)实现接口IData Filed接口,主要用于管理数据字段。

IData Filed接口定义如下:

public interface IData Field {public IData Table get Table();public IData Row get Row();public IData Column get Column();public Object get Value() throws Exception;public void set Value(Object value) throws Exception;public boolean is Null() throws Exception;public boolean is Empty() throws Exception;public boolean is Change() throws Exception;}

4 数据库相关的部分设计

数据库相关的部分主要包括数据源(Data Source)、元数据(Meta Data)、数据适配器(Data Adapter)及命令生成器(Data Command)三个对象。以下对这些对象的功能进行简要介绍。

4.1 数据源对象(Data Source)

数据源对象需实现接口IData Source,主要封装了JDBC中的数据库连接对象(Connection)。负责连接到数据库,提供数据库级别的事务控制,并根据数据库的类型创建元数据(Meta Data)对象、数据适配器(Data Adapter)对象及命令生成器(Data Command)对象。

接口IData Source定义如下:

IData Source接口最主要的目的就是管理数据库连接及本地事务控制。各类数据库都应实现该接口,在现实中一般会提供一个实现IData Source接口的抽象类Data Source,该类将实现一些数据源对象的公共操作,然后特定数据库的数据源类则继承Data-Source抽象类,并实现其特定的功能。如:Oracle的数据源类Oracle Data Source,Sql Server的数据源类Sql Server Data Source等。

4.2 元数据对象(Meta Dat)

段、视图、存储过程、触发器等)。元数据对象,实现IMeta Data接口,负责提供统一格式的数据库元数据。可由此对象获取当前数据库中的所有对象(如:表、字

IMeta Data接口定义如下:

接口最主要的目的就是获取表及其字段的信息,表各类数据库都需实现这个接口。在现实中一般会提供一个实现IMeta Data接口的抽象类Meta Data,该类将实现一些元数据的公共操作,然后特定数据库的元数据类则继承Meta Data抽象类,并实现其特定的功能。如:Oracle的元数据类Oracle Meta Data,Sql Server的元数据类Sql Server Meta Data等。

4.3 数据适配器对象(Data Adapter)

数据适配器对象,实现IData Adapter接口。特定于某种数据库,负责实现对数据库的读写操作,能够从数据库加载数据到数据表,以及执行DML语句,将数据的变化写入数据库。

IData Adapter接口定义如下:public interface IData Adapter {

IData Adapter接口最主要的目的就是实现对数据库的读写操做,表各类数据库都需实现这个接口。在现实中一般会提供一个实现IData Adapter接口的抽象类Data Adapter,该类将实现一些数据适配器对象的公共操作,然后特定数据库的数据适配器类则继承Data Adapter抽象类,并实现其特定的功能。如:Oracle的数据适配器类Oracle Data Adapter,Sql Server的数据适配器类Sql Server-Data Adapter等。

程序员一般不需直接使用数据适配器对象,在Data Table对象需要加载数据(如调用open Sql方法)或写入数据(如调用execute方法)时,Data Table内部会使用Data Adapter对象来读写数据,并将数据填充到Data Table对象中,同时更新数据的状态。

4.4 命令生成器对象(Data Command)

命令生成器对象,实现IData Command接口。特定于某种数据库,根据数据表的变化状态生成DML语句。

IData Command接口定义如下:

IData Command接口最主要的目的就是生成更新数据所需的SQL语句,主要是Insert、update、delete语句。各类数据库都需实现这个接口。在现实中一般会提供一个实现IData Command接口的抽象类Data Command,该类将实现一些命令生成器对象的公共操作,然后特定数据库的命令生成器类则继承Data Command抽象类,并实现其特定的功能。如:Oracle的命令生成器类Oracle Data-Command,Sql Server的命令生成器类Sql Server Data Command等。

程序员一般不会直接使用命令生成器对象,在Data Table对象中的数据新增、修改、删除后,在调用Data Table对象的执行方法时,Data Table内部会使用Data Command对象来自动生成SQL语句。

5 使用样例

在java环境下,使用本框架来访问关系数据库,本身无需任何配置。只需在J2EE应用服务器上配置好JDBC数据源,使用标准的SQL语言即可访问任何数据,更新数据时无需拼凑SQL语句。如下所示,程序员只需在服务器上配好JDBC数据源,使用该配置的jndi Name即可操纵数据。

IData Source ds = Oracle Data Source“(jndi Name”);//创建一个Oracle数据源

ds.open(false);//打开数据源,并设置为不自动提交事务

try {

摘要:考虑使用数据集组件来连接数据库并操作数据库表中数据在软件开发中的方便性,其具有强大的数据操作能力,在很多开发环境中都提供了相应的数据集组件,但在JAVA语言的开发环境中没有与之对应的数据集组件,一般采用JDBC接口或者OR映射的方式完成数据的操作,其中JDBC接口因其属于较低层次接口需要大量的编程,而OR映射在涉及复杂数据关系及大量数据访问是容易出现性能问题,在借鉴其他环境中数据集的设计理念的基础上,以实际开发要求为目标,设计一种基于JDBC封装的JAVA通用数据集数据访问框架。

关键词:数据集,数据集组件,数据访问,数据访问框架,JAVA语言

数据流Java 篇2

一个是final修饰的方法不能被Overload还是Override或者都可以或者都不能?

5.接口和抽象方法的区别,不是让写不同之处,是看代码中那个是错误的.,这个题也考extends和implement;

6.set list map区别

填空题:

1.java中提供对象比较的两个接口:(这个我没填上,记得最清楚了)

2.面向对象的特性:继承 封装 多态

3.11&12的值:8 (按位与运算)

编程:(给了一个表格,每种车有name、price、kind属性,然后有三辆车)编写一个抽象类Car,属性有name、price、kind;编写两个类(kind不同)分别继承Car,又有各自的计算初始折价率的方法(题目的意思是不同类型的车price*0.1,price*0.15);编写一个方法可以比较两种车的初始折旧率;写一个算法按初始折旧率升序排序;

数据库:

选择:

1.事务的特性考了一下下;

2.DML、DDL、DCL那个最重要

3.为了提高数据查询效率一般干什么事? 索引

4.删除表的语句

填空:

1.事务显式提交的命令是 ,事务回退的命令是 。

2.查询时匹配用 % _ ;只能对String数据类型起作用;

3.游标用法步骤:定义游标、后面三个空;

编程:

有一个职工表employee(eno,ename,esex,deptno,sal),其中eno代表职工号,数值型(整数),长度为8,eno为student表的主键;ename代表职工姓名,字符型,长度为10;esex代表性别,取值仅为“男”或者“女”;deptno代表部门号,数值型(整数),非空,长度为6;sal是工资(大概是这样)

1) :创建表

2):查询性张得员工

3):查询每个部门员工的人数

4):工资不等于1000的员工的人数

数据流Java 篇3

【关键词】:java 数据库 系统开发 计算机网络

中图分类号:G71 文献标识码:A 文章编号:1003-8809(2010)06-0127-01

引言

目前,网络正以一种前所未有的冲击力在影响着人类的活动,传统的购物方式也面临着改革,越来越多的商家在网上建起在线商店,向消费者展示出一种新颖的购物理念。网上购物系统作为B2B,B2C(BusinesstoCustomer,即企业对消费者),C2C(CustomertoCustomer,即消费者对消费者)电子商务的前端商务平台,在其商务活动全过程中起着举足轻重的作用。本文主要考虑的是如何建设B2C的网上购物系统。

1 系统开发的目标和意义

现在流行的网上购物系统不仅要有漂亮的网页,更要有严谨的规划,注重每一个细小的环节。这样才能使得在电子交易时避免不必要错误发生。我们将使用HTML、JSP等技术来编辑网页,并运用JDBC技术把数据库和动态网页相关联。传统的管理信息系统信息获取方法是由专业文字录入人员将信息输入到管理系统的数据库中,这种方法在数据量不大时有很多的应用场合。当数据量比较大,并且有较强的专业性时,录入的费用和出错的可能性都相应上升。

本平台利用现在比较广泛的JSP+My SQL数据库的架构实现的,此系统分为前台管理和后台管理。前台管理是友好的操作界面,供用户浏览、查询使用。包括:浏览商品、查询商品、订购商品、购物车、用户维护等功能;后台管理是提供给管理员的,其中包括:商品管理、用户管理等。使管理员从繁琐的手工操作中解脱出来,并提高了办公效率

2 网络数据库需求分析

网上的购物系统的主要对象是用户,所以必须建立用户表,包括用户的基本信息情况;用户的主要活动室针对商品购买的,所以必须建立商品信息表;用户对商品的购买,选择所需要的商品,首先得对商品进行搜索,所以我们必须对商品进行分类,进行大类和小类的划分,建立商品类别表和商品类别细分表;最后用户提交订单,建立订单表。

3 系统总体功能设计

经过前期的深入调查和研究,总结出该平台需要完成的一些具体功能,分析如下:

用户管理能够完成用户基本信息录入的注册和用户基本信息的修改。

管理员管理能够完成管理员对网站的商品信息管理(商品添加、商品审查),以及常规设置(广告添加,友情链接)的功能。

搜索功能能过电子商品的名称进行搜索。

查询功能能够通过查看购物车对所选商品进行确定、挑选。

4 系统功能模块流程

4.1注册功能

点击主页面的用户注册选项后,会弹出一个注册信息页面,用户需要如实填写用户名,密码,E_mail,地址,电话,真实,姓名等各项信息,提交后,系统进行检测判断该用户名是否已经注册过,如果已经存在则页面提示用户该用户名已经注册过,如果没有则进行下一步判断,然后依次往后判断用户所填写的各项信息是否符合要求,直到所有信息均正确无误,系统将该用户注册信息写入会员表即user并提示用户注册成功,用户登陆后,就可以进行有效的购物了。

4.2 用户登录

用户登录,首先要有一个提供用户登录的表单。用户登录的表单应该嵌入整体的结构当中。在实际的应用中,可以这样设计,如果用户没有登录,则在页面中显示用户登录的选项,用户登录后,则可隐藏用户登录的选项而代之以用户的基本信息。

商务网站需要很高的稳定性和安全性,用户的真实姓名是必不可少的,因此对用户名不允许使用恶意的代码作为用户名。同时对密码也要求保密,将密码加密后再存入数据库。。除此之外还需要用户的性别、E-MAIL、电话号码等。

4.3 商品管理

在该功能里管理员可以进行不需要的商品的删除,在这里管理员当然也可以浏览到商品的详细信息。并且比普通用户在浏览商品界面里所看到的商品信息多一个该商品在数据库中的ID。

4.4 购物车

购物车具体的实现可采用这种形式:定义一个购物车的类(Class)。

1.列出商品的列表,使用户能够自由选择所需要的商品。

2.当用户在点击“添加到购物车”的链接时,执行如下功能:

检查用户购物车类是否存在。如不存在,则建立,并注册这Session变量;在用户有购物车类存在的情况下,检查该类中是否有该商品。如存在,则商品数量相应加1;如没有,则将该商品添加到该类中。

4.5 商品查询

进入商城首页后,选择商品查询,进行一般的搜索和高级搜索。一般的搜索只是提供商品的名称、商品的类别就可以了;而高级搜索则需要提供商品的名称、商品的价格、商品的特征和商品的类别等更多详细的信息。通过这些信息和数据库中信息的比较,给出结果。

5 数据库设计

数据库设计要遵循一些规则,一个好的数据库满足一些严格的约束和要求。尽量分离各实体对应的表,一个实体对应一个表,搞清楚该实体有哪些属性,对应有些什么字段,以及各实体之间有何种联系。实体、属性与联系是进行概念设计时要考虑的三个元素,也是一个好的数据库设计的核心。

6 系统的性能分析

网上购物系统的性质决定了它的服务端工作负荷比较大,这就要求服务端的硬件配置要尽可能的高,主要是内存,而且操作系统也要尽可能的稳定。基于java的系统一般来说网络安全性比较好,但并不能说就一定安全,尤其在windows操作系统下,由于windows的漏洞比较多,系统装配在windows下并不是最佳的选择,如果有条件,建议可将系统装配在unix操作系统下,提高系统的抗侵入能力。系统的核心数据库,随着数据的不断增多,必然会产生冗余,导致系统运行效率降低,建议管理员定期备份和清理冗余数据,以保证系统的正常高效运行。

参考文献:

[1]Phil Hanna .JSP技术大全[M].北京:机械工业出版社,2002.3 

Java中数据查询方法 篇4

Java有很强的数据处理能力, 可操作多种数据库。Java操作数据库很方便, 也很重要。那么Java是如何完成对数据库的一系列操作呢?其对数据库查询有那些主要方法呢?本文分述如下。

1 数据库的连接

1.1 了解JDBC

JDBC (Java Database Connectivity, Java数据库连接) 是一套允许Java与SQL数据库对话的程序设计接口, 它是用于执行SQL语句的Java API, 是Java应用程序连结数据库、存取数据的一种机制, 可以为多种关系数据库提供统一的访问, 它由一组用Java语言编写的类和接口组成。

有了JDBC, 向各种关系数据库发送SQL语句就很容易了。Java和JDBC的结合, 使数据处理变得容易和经济, 即使这些数据是储存在不同数据库管理系统上, 企业也可继续使用它们安装好的数据库, 并能便捷地存取数据。

JDBC主要完成以下4方面的工作: (1) 加载JDBC驱动程序; (2) 建立与数据库的连接; (3) 使用SQL语句进行数据库操作并处理结果; (4) 关闭相关连接。

1.2 数据库的连接过程

1.2.1 加载JDBC驱动程序

JDBC驱动程序主要有4种: (1) JDBC-ODBC桥驱动程序, 将JDBC调用转换为ODBC的调用。JDBC-ODBC桥包含在Sun公司提供的JDBC软件包中, 它是一种JDBC驱动程序, 在ODBC的基础上实现了JDBC的功能, 充分发挥了支持ODBC大量数据源的优势; (2) Native-API partly-Java driver, 用于将JDBC的调用转换成主流数据库API的本机调用; (3) JDBC-Net pure Java driver, 将JDBC调用转换成与数据库无关的网络访问协议, 利用中间件将客户端连接到不同类型的数据库系统。使用这种驱动程序不需要在客户端安装其他软件, 并且能访问多种数据库。 (4) Native-protocol pure Java driver, 将JDBC调用直接转化为某种特定数据库的专用的网络访问协议, 可以直接从客户机来访问数据库系统。这种驱动程序与平台无关, 而与特定的数据库有关, 这类驱动程序一般由数据库厂商提供。如:Class.forName ("sun jdbc.odbc.JdbcOdbcDriver") ;可以加载JDBC-ODBC桥驱动程序。

1.2.2 建立与数据库连接

加载驱动成功后, 就要将Java与Access数据库真正建立连接了。使用包java.sql中的Connection类声明一个连接对象, 再使用类DriverManager的方法getConnection创建这个连接对象, 语句格式如下:

Connection con;

con=DriverManager.getConnection ("jdbc:odbc:数据源名", "user", "password") ;

建立了数据库的连接后, 就可以对数据库进行各种操作了。JDBC一般采用基于Statement对象的查询方法。首先使用Statement类声明一个SQL语句对象, 然后通过该连接对象调用createStatement () 方法创建SQL语句对象。语句格式为:

Statement sql;

sql=con.createStatement () ;

有了查询对象, 就可利用SQL语句对数据库进行操作了。

2 数据查询方法

2.1 筛选查询

利用select的where子句可以实现对表的查询结果进行筛选。其格式为:

select<字段名1>[字段名2, …]from<表名>where<条件>

2.2 模糊查询

并不确切的线索来查询信息。select在实际应用中, 不见得总是能够给出精确的查询条件, 因此经常需要根据一些语句提供的like子句来进行这类模糊查询。使用like子句的语法是:

select<字段名>[字段名2, …]from<表名>where<字段名>like<查询条件>

2.3 游动查询

前面的方法可顺序得到查询数据, 但有时需要在结果集中前后移动、或显示结果集指定的一条记录。这时, 必须要返回一个可滚动的结果集。方法如下:

先得到一个Statement对象, Statement stmt=con.createStatement (int type, int concurrency) ;然后根据参数的取值返回相应类型的结果集。

type取值有:ResultSet.TYPE_FORWARD_ONLY游标只能向下

ResultSet.TYPE_SCROLL_INSENSITIVE可滚动结果集, 结果不同步数据库变化

ResultSet.TYPE_SCROLL_SENSITIVE可滚动结果集, 结果同步数据库变化

Concurrency的取值决定是否可以用结果集更新数据库。

ResultSet.CONCUR_READ_ONLY不能用结果集更新数据库

ResultSet.CONCUR_UPDATETABLE能用结果集更新数据库

type取值有:ResultSet.TYPE_FORWARD_ONLY游标只能向下

2.4 随机查询

用Math类的静态方法random () 可以产生一个大于0小于1的数, 再用公式:

int i= (int) (Math.random () *number+1) 产生一个1到number之间随机数, 根据这个随机数移动到相应的行, 并输出该行。

2.5 顺序查询

利用select语句提供的order by子句, 可以得到排序后的查询结果, 其格式为:

select<字段名1>[字段名2, …]from<表名>order by<

字段名>;

2.6 参数查询

在查询中传递参数不同的值得到不同结果。

带参数有两种形式:

2.6.1 用变量做为参数

如:select*from stu where username='name'and password='ward'

其中name和ward就是参数。

2.6.2 预处理查询

sql="select*from stu where username=?"

PreparedStatement pst=con.prepareStatement (sql) ;

pst.setString (1, "yws") ;

将"yws"的值传递给name参数。

3 结束语

本文讲述了数据库的连接过程和数据查询的一些方法。数据查询技术多种多样, 这里仅供读者作一些参考。

摘要:数据处理最常见的是查询, 从几种查询技术入手, 介绍了Java对数据库中数据查询的方法。

关键词:Java,数据库,数据处理,查询,驱动,连接

参考文献

[1]雍俊海.Java程序设计[M].北京:清华大学出版社, 2004.

[2]张思明.Java语言程序设计[M].北京:清华大学出版社, 2007.

数据流Java 篇5

下一页123456

摘要

J2EE应用程序中的业务组件通常使用JDBC API访问和更改关系数据库中的持久数据。这经常导致持久性代码与业务逻辑发生混合,这是一种不好的习惯。数据访问对象(DAO)设计模式通过把持久性逻辑分成若干数据访问类来解决这一问题。

本文是一篇关于DAO设计模式的入门文章,突出讲述了它的优点和不足之处。另外,本文还介绍了Spring 2.0 JDBC/DAO框架并示范了它如何妥善地解决传统DAO设计中的缺陷。

传统的DAO设计

数据访问对象(DAO)是一个集成层设计模式,如Core J2EE Design Pattern 图书所归纳。它将持久性存储访问和操作代码封装到一个单独的层中。本文的上下文中所提到的持久存储器是一个RDBMS.

这一模式在业务逻辑层和持久存储层之间引入了一个抽象层,如图1所示。业务对象通过数据访问对象来访问RDBMS(数据源)。抽象层改善了应用程序代码并引入了灵活性。理论上,当数据源改变时,比如更换数据库供应商或是数据库的类型时,仅需改变数据访问对象,从而把对业务对象的影响降到最低。

图1. 应用程序结构,包括DAO之前和之后的部分

讲解了DAO设计模式的基础知识,下面将编写一些代码。下面的例子来自于一个公司域模型。简而言之,这家公司有几位员工工作在不同的部门,如销售部、市场部以及人力资源部。为了简单起见,我们将集中讨论一个称作“雇员”的实体。

针对接口编程

DAO设计模式带来的灵活性首先要归功于一个对象设计的最佳实践:针对接口编程(P2I)。这一原则规定实体必须实现一个供调用程序而不是实体自身使用的接口。因此,可以轻松替换成不同的实现而对客户端代码只产生很小的影响。

我们将据此使用findBySalaryRange行为定义Employee DAO接口,IEmployeeDAO.业务组件将通过这个接口与DAO交互:

clearcase/“ target=”_blank“ >cccccc border=0 heihgt=”“>

importjava.util.Map;

public interface IEmployeeDAO {

//SQL String that will be executed

public String FIND_BY_SAL_RNG = ”SELECT EMP_NO, EMP_NAME, “

+ ”SALARY FROM EMP WHERE SALARY >= ? AND SALARY <= ?“;

//Returns the list of employees who fall into the given salary

//range. The input parameter is the immutable map object

//obtained from the HttpServletRequest. This is an early

//refactoring based on ”Introduce Parameter Object“

public List findBySalaryRange(Map salaryMap);

}

提供DAO实现类

接口已经定义,现在必须提供Employee DAO的具体实现,EmployeeDAOImpl:

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.List;

import java.util.ArrayList;

import java.util.Map;

import com.bea.dev2dev.to.EmployeeTO;

public class EmployeeDAOImpl implements IEmployeeDAO{

public List findBySalaryRange(Map salaryMap)

{

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

List empList = new ArrayList;

//Transfer Object for inter-tier data transfer

EmployeeTO tempEmpTO = null;

try{

//DBUtil - helper classes that retrieve connection from pool

conn = DBUtil.getConnection();

pstmt = conn.prepareStatement(FIND_BY_SAL_RNG);

pstmt.setDouble(1, Double.valueOf( (String)

salaryMap.get(”MIN_SALARY“) );

pstmt.setDouble(2, Double.valueOf( (String)

salaryMap.get(”MIN_SALARY“) );

rs = pstmt.executeQuery();

int tmpEmpNo = 0;

String tmpEmpName = ”“;

double tmpSalary = 0.0D;

while (rs.next()){

tmpEmpNo = rs.getInt(”EMP_NO“);

tmpEmpName = rs.getString(”EMP_NAME“);

tmpSalary = rs.getDouble(”SALARY");

tempEmpTO = new EmployeeTO(tmpEmpNo,

tmpEmpName,

tmpSalary);

empList.add(tempEmpTO);

}//end while

}//end try

catch (SQLException sqle){

throw new DBException(sqle);

}//end catch

finally{

try{

if (rs != null){

rs.close();

}

}

catch (SQLException sqle){

throw new DBException(sqle);

}

try{

if (pstmt != null){

pstmt.close();

}

}

catch (SQLException sqle){

throw new DBException(sqle);

}

try{

if (conn != null){

conn.close();

}

}

catch (SQLException sqle){

throw new DBException(sqle);

}

}//end of finally block

return empList;

}//end method findBySalaryRange

}

数据流Java 篇6

关键词 Java 数据库 Mysql 数据库连接

一、java.sql类与其方法的理解

首先我们需要引用系统所提供创建语句和管理连接属性,建立与驱动程序的连接,在访问数据出问题时抛出和用于发送准备好的基本SQL语句的方法。由于系统有提供关于sql的方法,我们就可以直接拿来用,只需要去查看API中相应的介绍,API对于开发人员来说就相当于是一部学习的字典,当我们对某个方法和属性不太清楚或者不记得了,就可以来查阅API文档。如下引用的包。

import java.sql.Connection ;

import java.sql.DriverManager ;

import java.sql.SQLException ;

import java.sql.PreparedStatement ;

import java.io.File ;

import java.io.FileOutputStream ;

import java.sql.ResultSet ;

import java.io.InputStream ;

import java.io.InputStream ;

import java.io.OutputStream ;

而io这个包主要是对文件的输出输入流的方法。在这里我们主要用到引用的sql类包,有连接用的有驱动管理器,有对sql语句进行执行和一些数据容器类,这些数据容器可以来接受从数据库中获取的各种形式的数据,比如DataTable类和DataSet等

二、对Mysql数据库进行连接

对不同的数据库,所提供的驱动都是不一样的,对Mysql首先我们需要写一个公共类mysql,定义公共的静态字符串Driver ="org.gjt.mm.mysql.Driver";URL = "jdbc:mysql://localhost:端口号/mldn";User = "用户名";Pass = "密码"。然后就可以方便在主函数中写出连接的说sql语句和方法了。数据库参数一个为空的初始值,初始值的给予是为了给予内存资源,以下就一定要给出初始值。

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

之后只需要写出你所要的sql语句比如字符串sql = "SELECT name,photo FROM ?(表) WHERE id=?";读取数据库地址用户名和密码Class.forName(Driver),连接字符串有三个参数分别是地址、用户名和密码conn=DriverManager.getConnection(URL,User,Pass);再调用它的方面来运行sql语句,conn.prepareStatement(sql)。

三、对数据库中文件进行处理

执行SQl语句进行查询就要调用方面executeQuery() ;如果数据库中一直存在这里写一个判断语句if(rs.next()),获取字符串用getstring();这里可以简单的用System.out.println("用户名:" + name)来检测正确。当然我们还可以写的复杂一点,把文件读取出或者存入数据库中,首先定义一个文件类File f = new File("C:" + File.separator + "名字.gif"),这里是一个图片文件,再定义输出流OutputStream out = null,out = new FileOutputStream(f) ;如果一直有数据,不为空就边读边写出来while((temp=input.read())!=-1),out.write(temp)。最后关闭输入输出close()。并且关闭数据库连接,对数据进行操作后,需要关闭数据库,释放内存空间。

参考文献:

[1]郑瑛.JDBC与数据库应用程序的开发[J].内蒙古民族大学学报(自然科学版), 2004(02).

[2]张作宸.JDBC原理及操纵数据库方法[J].科技信息, 2009(02).

[3]赵丽敏.浅谈JAVA连接数据库[J].科协论坛(下半月) , 2008(01).

[4]陈卫荣.浅谈Java的数据库接口JDBC[J].宁德师专学报(自然科学版), 2002(04).

Java数据处理技术探究 篇7

比较流行的数据处理引擎开发语言有Java, C#, C++等。开发语言呈现出不同的开发表象, 但是传统的数据库连接技术都遵循一些制定好的技术规范准则。

开放数据库互连 (ODBC) 是由微软公司制定开放服务结构中有关数据库连接的一个组成部分, ODBC规定了一组规范, 并提供了一组对数据库访问的标准应用程序编程接口API。ODBC常见于微软数据库应用上, Oracle、My Sql也提供标准支持ODBC连接方式。这些API利用SQL来完成其大部分任务。开放数据库互连是一个早期的数据库连接标准, 由于是微软公司制定的数据库连接技术标准, 在今天依然有着广阔的使用范围, 最新版本3.8更新在Win8操作系统上。

OLEDB数据连接技术为开发人员提供了一种统一的数据连接技术标准。它可以在不同的数据源进行切换。开发设计人员把大部分经历放在对数据处理引擎的开发中, 不必在意过多的数据库连接协议。OLEDB与ODBC同样是微软的制定的通向不同的数据源的低级应用程序接口。OLE DB中的对象主要包括数据源对象、阶段对象、命令对象和行组对象。使用OLE DB的应用程序会用到如下的请求序列:初始化OLE、连接到数据源、发出命令、处理结果、释放数据源对象并停止初始化OLE。OLEDB最大的特点它是一种底层技术。ADO是微软公司基于高级面向对象编程语言使用对OLEDB的一种封装。ADO专门提供给微软编程语句开发人员一种更为简洁的连接数据库通道。

Java作为主流开发语言有着自己的连接数据库方式Jdbc。它类似于ADO的方式, 是一种用于执行SQL语句的Java API可以为多种关系型数据库提供统一的连接接口, 是Java开发人员能够用标准的Java API进行数据处理引擎的开发。Jdbc具体有2中连接数据库方式:1、直接采用Jdbc驱动连接数据库。2、连接数据库时首先访问j2ee服务器提供的数据库连接池。第二种方式在大型企业级应用中多为采用。从传统技术发展来看, 一般新技术通常不会跨越太大。特别是软件开发技术, 为了不过度超前采用一种妥协的技术发展方式向下兼容。新技术大多是从传统方式拓展延伸过来, 而不是跨越式的从新研发一套全新的技术, 大数据处理也遵循着这样的一个原则。只是在一些具体的数据并发处理方向进行改动, 适合几何级数量的数据库处理引擎进行云技术有效数据处理。

Java在处理大数据的时候, 容易造成内存溢出, 实际工作中对数据处理中我们不得不去面临海量数据, 这时我们就要采用一些方法来规避溢出错误的发生, 比较常见的处理方法是分解, 压比如, 开发人员要将数据库 (暂不考虑具体的数据源存储类型) 的数据源导出, 保存为Excel或文本文件;在Excel导出方式采用POI和JXL的接口, 开发人员很多时候没有办法去控制内存什么时候向磁盘写入, 这是在大数据环境下是很不安全的, 而且这些API在内存构造的对象大小将比数据原有的大小要扩大很多, 这样迫使开发人员需要提前预判拆分Excel。POI接口在3.8.4的版本后, 开始提供缓存方式来缓解这一项现象的发生。

在数据库处理引擎层面, 要从数据库中获取数据, 生成本地文件, 开发程序时候为了简化, 开发人员可以不考虑1M文件如何处理, 这个交给底层的驱动程序去拆分;开发人员把一个10000W数据的数据库表, 导出到文件, 就一定要进行分页, oracle数据库可以直接采用三层包装, mysql数据库采用用limit, 这样的处理方式虽然简单, 但是每次分页每次都会出发新的查询, 伴随着翻页次数增多, 直接后果就是数据处理速度变得异常缓慢。通过设置游标的方式, 将数据库中的数据直接缓存到本地内存, 然后通过设置statement.set Fetch Size (200) ;设置游标每次遍历的大小就可以缓解资源紧张的问题。

Java提供的标准数据连接API在大数据处理也未必有效, 一般还要考虑不同数据库的实现机制。对于oracle来说他本身就不是缓存到本地内存的机制, 所以Java内存不会出现缓慢的问题。如果是Mysql, 首先必须使用5.0以上的版本, 然后在连接参数上加上use Cursor Fetch=true这个参数, 至于数据库处理分页游标大小可以通过连接参数:default Fetch Size=1000来设置, 具体代码设置:jdbc:mysql://xxx.xxx.xxx.xxx:3306/abc?zero Date Timec onvert To Null&use Cursor Fetch=true&default Fetch Size=1000</span>这个问题处理上如果没经验很可能导致mysql的数据程序内存膨胀, 并行2个直接系统死机, 经过多次反复验证, 最后经过mysql技术的确认, 进行多次测试, 数据量都保持在500W以上的, 都不会导致内存膨胀, 数据处理引擎平稳运行。

参考文献

[1]郑学锋, 王志海, 孙鹏, 沈钧毅, 黄文辉.一种基于Java2D的均匀大数据集曲线表达快速算法.微电子学与计算机, 2006.

基于Java的医学图像数据接口 篇8

医学原始数据的进入是进行图像分析的第一步。但是专用医学图像(如CT, MRI)不采用BMP, JPEG等一般格式,而是以DICOM格式存放的。因此需要通过一个通用数据接口提供双向服务:(1)实现DICOM数据的解码,得到图像及相关病历信息。(2)提供DICOM图像数据向BMP ,JPEG等普通格式转化的功能。(3)经计算机处理后的图像数据及其他一些非DICOM图像数据编码为DICOM格式,亦即形成新的 CT/MRI文件,从而可以进入DICOM专用网络。

1 DICOM标准与Java实现接口的优势

DICOM协议主要是针对PACS系统中的图像格式的定义和图像通信的规范。其作为目前通用的医学图像标准,最重要的特性之一在于其面向对象性。这就决定了在该标准的软件实现中,Java具有独特的优越性。DICOM标准的面向对象性是基于一组显式的、细节化的实体关系模型(Entity-Relation模型)。模型具有以下三要素:(1)各种实体如患者(patient)、图像(image)、研究(studies)等代表对象。(2)属性,描述了对象的特性。属性赋值以后,抽象的实体成为实例(Instance)。(3)服务,处理信息对象的方法,如文件的存储和传输操作。E-R模型关系如图1所示。

例如:源实体为患者,目标实体为CT图像,关系为所属,这两个实体之间是1对n的关系。

Java具有以下几个特点:(1)面向对象性。(2)与平台无关性。(3)方便的网络移植性。用Java来实现DICOM接口,可以体现良好的数据抽象和数据封装,这与DICOM标准的基本设计思想完全吻合。最终目标是建立起一个与平台无关,同时基于网络运行的医学图像分析系统。因此基于Java开发的DICOM数据接口以Java包的形式向整个系统提供无缝连接,同时对其它Java的医学软件提供通用服务。

2 软件设计与实现

已有的同类型软件存在的主要问题在于:(1)通用性不够,只适用于特定范围。(2)功能的实用性没有很好的贴近医院的使用习惯。(3)无法保证效率。具体而言,就是指运算时间和内存占用这两方面的性能指标。由于一般情况下,对软件性能的要求不是基于单个文件,医院通常对每个患者的一次病理分析会产生几十兆的DICOM文件序列,软件的算法结构和内存分配是否合理,会对软件的性能有非常明显的影响。

2.1 通用性设计分析

目前很多DICOM软件之所以通用性不是很好,是由于设计时没有能够充分考虑到DICOM数据编码的灵活性,因而没有在程序中作相应处理。DICOM文件是标准的二进制流文件,它实际上是对各种对象的属性信息进行编码,其结构层次为:数据元素(Data Element)一数据集( Data Set) — 消息(Message)。作为最小单位的每一个数据元素在DICOM的数据字典中都有明确定义:惟一性标志(TAG) ,名称(NAME)和类型表示(VR)。数据字典以静态属性的形式封装进独立的Java类。从局部看按照TAG值升序排列,DICOM文件顺次存放如图2所示。

整体来讲,文件分为信息头和图像两大部分。前者存放患者信息和图像的总体指标,后者存放图像的象素信息。DICOM标准规定:信息头中一些关键属性值的设置非常灵活,而且对其它相关方而有直接影响。在一些文献中试图对这种灵活性进行归纳,本研究认为这些归纳并不全面。而一个全面的总结正是通用型程序结构的设计基础,具体如下:

(1)传输语法对信息头和图像部分编码的影响。

传输语法(Transfer Syntax)属性的值控制整个文件的编码结构。程序必须据此判断。

①类型表示(VR)在编码时显式(explicit)还是隐式(implicit)列出,相应“长度”项的位置(距“标志”项的偏移量)会有所不同。而“值”的读取一般依赖于正确的“长度”。

②字节顺序(byte ordering)是低位地址低位字节顺序(Little Ending)还是低位地址高位字节顺序(Big Ending)。从根本上影响到Java I/O中对二进制字节流的组合方式。

③图像数据是否经过压缩。大部分DICOM图像是没有经过压缩的原始数据,对于压缩图像,可以有JPEG压缩和游程编码压缩( RLE)两大类,并下分有损和无损情况。Sun公司提供了处理JPEG压缩/解压缩包。com.sun.image.codec.jpeg。RLE的压缩/解压缩算法包也是外挂的,可以很方便实现。如图3可以看出文件预处理过程。

(2)信息头对图像部分编码的影响。

①图像类别。

图像类别(Modality)属性直接影响后面象素值的读取,对于MRI灰度图像,没有CT灰度图像所具有的斜率,截距概念,也就没有相关的预处理过程。同时MRI灰度图像没有预定义窗宽、窗位,因此根据窗宽、窗位调整象素值的过程有别于CT灰度图像。

②光度表示。

光度表示(photometric Interpretation)属性定义如下几种:MONOCHROME灰度图像,RGB彩色图像,ARGB彩色图像,HSV彩色图像等。彩色图像的存储方式有别于灰度图像,同时也不存在调节窗宽、窗位的处理过程。

③位数分配和最高位。

位数分配(bits allocated)属性规定灰度图像中单一象素所占用的位数。最简单是8位的情况,16位时必须按照传输语法中低位在前还是高位在前进行两两字节的组合。12位(非8的倍数)是较为复杂的情况,需要结合最高位(high bits),每二个字节组合,再进行分拆。

④窗宽和窗位。

对于CT图像,经过组合分拆等方式解码后的象素值仍然不能直接用于成像,还需要从CT图像的信息头中提取缺省窗宽(Window Width)和窗位(Window Center)的信息,将范围内的象素值映射为成像的灰度值范围0~255。而MRI图像没有提供上述值,DICOM标准中没有明确规定如何获得缺省图像。这里给出遍历的方法,以整个象素范围作为窗宽,范围的中心值作为窗位。这样,MRI缺省图像将表现全部的象素信息。

由以上分析,对DICOM文件进行解码(读取)处理的程序流程图如图4,图5所示。

2.2 对性能的考虑

当DICOM文件的解码/编码是以序列为单位进行时,内存分配和时间两个性能指标是否得到优化显得尤其重要。

(1) 内存分配上的优化考虑

200幅512×512×16Bit的CT图像,驻留内存的象素值就需要100M左右的空间,另外再考虑到读取文件所开的缓冲区和其他棍种临时空间,因此必须尽最大可能提高内存利用率。实际操作中,采取以下方法:①Java对内存的垃圾回收机制无法满足要求,由于临时空间巨大,一旦不再需要即显示清除。②采用合理的数据类型,如灰度范围是0~256,通常是考虑用short类型。而本研究以byte型(-128-127)加偏移量代替,可以成倍缩小所需空间。

(2)操作时间上的优化考虑

JAVA在文件I/O的处理速度上落后于C/C++,只有在软件的算法结构上加以优化弥补。由程序控制流程可见,操作时间分为三部分:①遍历文件,直到找到象素标志(TAG),该位置为象素部分在整个文件中的偏移量。②对该位置之前的文件信息头部分,遍历各种属性值。③对该位置之后的文件图像部分,进行组合、拆分、映射等处理。其中,第一部分对于单个文件是必不可少的。Java读二进制流文件,要给出接收缓冲区的大小,而仅为文件信息头部分就开大缓冲区是不符合内存分配的原则。本研究采取的是“探测法”,例如先接收4096字节数据,如果找不到象素标志(TAG),再开4096字节。然而这在序列读取图像时带来时间上的消耗是令人难以接受的。幸而序列文件在象素偏移量上保持一致,因此只要对第一个文件进行“探测法”操作,其他文件可以直接以此偏移量为界,进入后两部分处理。此外,对于信息头的处理,序列文件在患者的某些属性上也具有一致性。因此,只需一个文件操作,就可以给出整个序列这些属性的值。后续文件可以跳过对它们的判断。经过以上优化整个操作时间大大减少。

3 结束语

为了匹配已使用面向对象分析方法的DICOM标准,采用了同样基于面向对象的Java语言进行接口设计,以包的形式进行封装,为基于Java的医学软件提供了通用服务,从而实现DICOM医学图像数据接口。同时在功能上对接口进一步有所扩展,实现了DICOM格式和其他普通格式,如BMP,JPEG的双向转换。同时考虑到运行性能,在数据载入的方式上采用序列化方式,从而使内存占用和运算时间达到最大限度的优化成为可能。

摘要:Dicom3.0标准作为目前通用的医学图像标准,最重要的特性之一在于其面向对象性,本研究依据这一重要特性,描述了如何使用面向对象的Java语言实现该标准的接口软件,从而解决了Dicom硬件设备与后继PACS处理软件的接口问题。同时,为了克服现有PACS系统的硬件瓶颈,对数据读入方式采取了优化,大大降低了CPU运行时间和内存占用空间,提高了系统的运行质量和性能。

关键词:医学数字成像和通讯标准,医学图像存储和传输系统,接口,面向对象

参考文献

[1]David M Geary.Java2图形设计(卷II:SWING)[M].立建森,译.北京:机械工业出版社,1999.

[2]Bruce Eckel.Thinking in Java[M].北京:机械工业出版社,1999.

[3]章毓晋.图像处理和分析[M].北京:清华大学出版社,1999.

[4]Bas Revet.DICOM Cook Book for implementations in Modalities,Chapter 1&2[M].Philips Medical Systems Nederland,1997.

数据流Java 篇9

随着信息技术尤其是数据库技术和网络技术的进步,很多企事业单位管理内部数据的手段和方式都发生了重大变化。绝大部分单位将数据存储在数据库中,并将某些公共信息在网上发布。

然而在实际工作中,有时又需要将数据库中的数据以某种常见的文件(如Word)形式进行展示或编辑。比如:在人事部门的日常工作中,有时需要将一部分职工信息提取出来,然后按照某种固定的Word版式打印输出,或在网上提供自由下载,如图1所示。若要完成以上所述的工作,需要进行以下操作:其一,按照特定要求提取数据库中的数据;其二,读取Word模板;其三,将提取的数据填充到Word模板中,生成Word文件。

那么,如何实现数据库数据动态填充Word模板文件,从而实现数据按照某种特定格式的动态输出呢?本文将以NEATBEANS6.1为开发环境,具体讨论在Java环境下读取Word模板,进行数据填充,并通过JSP提供Word文件下载的基本方法。

2 关键术语解析

首先介绍本文涉及的几个关键术语(Word模板、JSF和NetBeans)。

Word模板本文所讨论Word模板是事先编辑好的一个RTF格式Word文件,该文件内部可以包含表格。与普通Word文件的不同之处在于其内部一般包含一些特殊的符号(如:$或&),由这些符号限定的部分可以被数据库中的数据替换,一旦替换完成,Word模板文件就成为具有实际数据的普通Word文件了。文中涉及到的Word模板如图2所示。

JSF是由Sun公司推出的一种用来开发Web应用程序的技术,JSF和传统的Web技术有着本质上的差别。JSF提供了事件驱动的页面导航模型,该模型使应用程序开发人员能够设计应用程序的页面流,所有的页面流信息都定义在JSF的配置文件“faces-config.xml”中,而并非硬编码在应用程序中,这在很大程度简化了应用程序的开发。

NetBeans是由Sun Microsystems公司建立的开放源代码的软件开发工具,内嵌了GlassFish和Tomcat服务器以及JSF、Struts等多种Web软件开发框架,可用于多种不同类型软件的开发,尤其适用于基于Java平台的Web程序开发。

3 系统目标及运行界面

本系统的目标是:用户通过下拉列表选择部门数据,然后单击“创建名单”命令后,系统自动生成数据,并将数据填充到Word模板中生成Word文件,提供给用户下载。当用户单击下载图标后,出现“文件下载/文件打开”提示框。图3是用户选择打开生成的Word文件之后的效果。

为了便于论述以及系统的推广, 笔者在设计系统的过程中力求使其简单、实用, 读者只需在此基础上稍作修改, 即可扩充系统的功能并将其应用于实际情况。

4 程序的设计

4.1 数据库

系统采用MySql Server数据库管理系统。首先建立一个数据库,名称是“mydb”,然后在数据库中建立一个数据表“employee”,并输入几条记录。数据表“employee”的定义如下:

4.2 程序的配置

首先,启动NetBeans6.1开发环境,建立一个Web应用程序,命名为“WordModelApp”。创建过程中注意:Web服务器选择采用“GlassFish”;Web程序框架选择采用“JavaServer Faces”;将默认生成的欢迎页面重命名为“index.jsp”。

Web程序创建完成后,在程序根目录下创建两个文件夹“downLoad”、“model”,并将Word模板文件“模板.rtf”存放在“model”文件夹中,文件夹“downLoad”用来存放临时下载文件。Web程序的文件夹结构以及包含的库文件如图4所示。

然后,打开Web.XML配置文件,在标签之间添加如下代码:

最后,打开“faces-config.xml”文件,在标签之间添加如下代码:

至此,完成系统的创建和配置工作。当然,配置工作也可以在系统开发过程中随时进行补充和修改。

4.3 页面设计

本示例程序只需要一个JSP页面“index.jsp”。该页面中主要包含一个selectOneMenu下拉列表控件、一个commandLink命令控件,一个outputLink控件和若干个outputLabel信息输出控件。另外,为了使得这些控件能够正常工作,需要在页面中引进JSF的标签库。“index.jsp”页面的代码如下:

用户单击页面“index.jsp”中的“创建名单”命令后,由后台JavaBean“manageReport”的“createRecords”方法完成数据的检索并将检索到的数据填充到Word模板中,生成可供下载的Word文件。Word文件的路径和文件名分别由“manageReport”的“targetPath”和“targetFile”两个属性提供。特别注意,在定义后台JavaBean的属性时一定要同时定义好GET方法和SET方法,详细内容参见文后面的代码部分。

4.4 代码

在系统中定义一个Java包:“myClass”,在该包中定义3个Java类文件,分别是:“Employee.java”,“ManageReport.java”,“DbBean.java”,如表1所示。限于篇幅,只给出“ManageReport.java”,“DbBean.java”类中的核心代码。

类“ManageReport.java”的核心代码如下:

5 系统的发布与运行

一般情况下,利用NeatBeans6.1开发工具生成的Web程序会自动保存在系统根目录下的dist子文件夹中,其扩展名为“war”。启动GlassFish Web服务器,然后在Web服务器的管理控制台中单击“部署…”按钮(管理控制台可以在NeatBeans环境下启动,也可以在浏览器中输入http://localhost:4848来启动),即可将生成的程序文件“WordModelApp.war”部署到服务器中。

若程序部署成功,且Web服务器GlassFish v2和数据库系统mysql server 5.0正常运行,数据库定义完成后,任选下面一种方式运行系统即可:

方式一:在NETBEANS开发环境中选定项目“WordModelApp”,单击【F6】。

方式二:在浏览器地址栏中输入:http://localhost:8080WordModelApp/。

6 结语

基于NeatBeans6.1开发环境,一方面讨论了基于JSP技术的Web程序开发的主要步骤,另一方面针对“Java操作Word模板”的技术难点进行了仔细分析并给出了核心代码。希望通过本文的论述,能够抛砖引玉,为读者在设计与开发基于JSP技术的Web程序时提供参考。

摘要:利用JSF框架, 在NETBEANS6.1开发环境中, 构建出了一个简单的动态数据输出系统。以该系统为蓝本, 具体给出了Java语言读取Word模板文件的实现方法;利用MySQL数据库中的数据填充Word模板动态输出数据的实现方法及JSP提供Word文件下载的基本方法等。

关键词:JSF,NETBEANS,Word模板

参考文献

[1]http://www.mastertheboss.com/en/web-interfaces/124-jboss-RichFaces-tutorial.html.

[2]http://www.onjava.com/pub/a/onjava/2005/07/13/jsfupload.html, 2005.

[3]The Java EE5Tutorial.http://java.sun.com/javaee/5/docs/tu-torial/doc/index.html.

[4]刘永立, 白地动.基于JAVA平台的网上成绩管理系统的设计与实现[J].中国教育信息化, 2010, 1:48~52.

数据流Java 篇10

Java是一种面向对象的多线程解释型语言,具有健壮性、安全性、跨平台性、可移植性、动态性等诸多优点。在很多应用中,基于Java的应用开发都会涉及到与后台数据库的连接。目前,Java开发中的主流数据库连接技术有JDBC、连接池、Hibernate框架等几种。

2 Java数据库连接技术

2.1 JDBC数据库连接技术

JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁,它提供了Java应用程序与各种不同数据库之间进行对话的接口。使用JDBC,Java程序员可以使用纯Java语言编写完整的数据库应用程序。

JDBC可分为4种类型[1,2]:

(1)JDBC-ODBC桥

最初的数据库连接方式是借助各数据库厂商提供的差异性极大的数据库驱动接口来实现的,因此其实现非常繁琐并且通用性差,具有很大的局限性。为此,微软首先提出了通用的数据库连接机制和标准以实现各种不同关系型数据库统一的互联规范,该规范即为ODBC(开放式数据库连接)。而JDBC-ODBC桥实质上是Java提供的一种以JDBC为介质,通过传统的ODBC驱动程序来访问数据库的方法。通过使用JDBC中连接ODBC驱动的驱动程序,即可实现这种数据库连接。该方案需要在本地安装ODBC类库和驱动程序。

(2)Java到本地API

JDBC-ODBC桥由于采用了一种间接的数据库驱动方式,因此,效率上打了一定的折扣。一种较为高效的JDBC连接方法是JDBC驱动程序使用Java本地接口直接调用本地的数据库API,从而实现对数据库的连接和对数据的操纵。该方案也要求在本地安装连接目标数据库的类库。

(3)Java到网络协议

这类JDBC驱动程序是纯Java的驱动程序,它通过一定的网络协议与数据库服务器上的JDBC中间件通信。由于该类驱动程序不要求在访问数据库的Java程序各地都安装目标数据库的类库,因此,它是最灵活的JDBC方案,使得程序可以通过网络协议与不同的数据库进行通信。

(4)Java到数据库协议

这类驱动程序也是纯Java程序实现的,它通过实现一定的数据库协议直接与数据库通信。由于该方案直接与数据库通信,因此,其效率是4种方案中最高的。

通常,Java应用程序访问数据库的过程分为如下4个步骤:

(1)装载数据库驱动程序。

(2)通过JDBC建立数据库连接。

(3)访问数据库,执行SQL语句。

(4)断开数据库连接。

2.2 连接池技术

利用连接池技术可以解决Java与数据库连接过程中资源频繁分配/释放所带来的效率问题。其核心思想是连接复用:建立一个数据库连接池以及一套连接使用、分配、管理策略,避免数据库连接频繁建立、关闭所带来的频繁资源分配、释放开销。连接池技术通事先建立一些连接并且防止在“缓冲池”中以备使用,当需要建立数据库连接时,并不需要直接向数据库发出请求,而只需要从数据库连接池中取得所需要的连接;而当应用程序使用完一个连接,也不需要从物理上关闭该连接,而是将连接归还给连接池[3,4]。

JDBC的API中并没有提供连接池的方法。一些大型的Web应用服务器如BEA的WebLogic和IBM的WebSphere等提供了连接池的机制,但是必须要有第三方的专用类方法的支持。基于Java的连接池类的设计主要包括3个步骤[4]:

(1)定义连接池类:用于维护连接池中的连接对象,包括连接对象的创建、关闭、连接对象的数量,连接对象状态的监控、日志信息的记录。

(2)创建管理类:用于负责加载和注册所有JDBC驱动程序,根据对象的特点创建多个连接池对象,将客户请求映射到特定的连接池对象上,并提供客户从连接池获取和释放连接的接口,指定日志文件属性,将加载和注销JDBC驱动程序的信息记录到日志中。

(3)管理类与主程序的接口:用于记录最近使用时间、被使用的次数等连接池的状态。

2.3 Hibernate框架技术

通过吸收Spring等框架技术的优点,Sun在EJB3.0上做了一些大的改变和调整,提供了Hibernate框架技术。Hibernate是一个开源的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思想来操纵数据库。

Hibernate框架技术其本质还是JDBC,因为它是基于JD-BC实现的。JDBC本身具有强大的数据库连接功能,但是,由于JDBC复杂繁琐等原因,使用者对其的抱怨一直存在。为此,Sun不得不在Java的数据库连接问题上注入新的思想。为此,Sun提出了O-R Mapping(对象-关系映射)的概念,其基本思想是将Java的一个类与关系型数据库中的一张二维表相对应,这样,这个类的实例便与这张表的一条元组(一行)相对应,这种对应关系则通过其他的Java类(比如Top Link的descriptor类)或者XML文件来进行描述。通过这种映射关系,使得程序员不再需要直接与数据库打交道,而只需要通过操作Java对象。具体的与数据库的交互则交由系统去完成:框架会自动将对类的改动同步到相对应的表中。Hibernate框架正是在这种新思想的推动下产生的。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端使用,也可以在Servlet/JSP的Web应用中使用,并且,Hibernate可以在应用EJB的J2EE框架中取代CMP,完成数据持久化。

Hibernate的目标是简化开发者通常的数据持久化编程任务,以便大幅度地减少开发时人工使用SQL和JDBC处理数据的时间。通过使用Hibernate可以轻松解决开发者在使用传统的CMP以及JDBC和DAO技术开发持久层时遇到的困难。

3 结语

具有跨平台性的Java语言已经成为最常用的编程语言之一。在很多应用中,都涉及到使用Java开发的前台应用程序与后台数据库(Oracle、MSSQL Server、MySQL等)的连接和交互。

摘要:Java程序员经常访问数据库,在此介绍并比较了访问数据库的3种主要方法。

关键词:Java,JDBC,连接池,Hibernate

参考文献

[1]林元元.JDBC连接MySQL数据库的方法浅析[J].长沙通信职业技术学院学报,2009,(01).

[2]高伟,李爽,杜瑞庆.基于JDBC的SQL Server数据库访问[J].福建电脑,2008,(01).

[3]孙鑫鸽,陈刚,孙小玲.基于JDBC的数据库连接池技术的研究与设计[J].计算机与信息技术,2006,(08).

数据流Java 篇11

Java语言近些年被广泛应用 , 根据TIOBE编程语言排行 ,Java语言近3年均位列前3, 它具有卓越的通用性、高效性、平台移植性、 安全性和可扩展性。用户在进行Java项目开发过程中会将大量的常用操作进行封装, 以便其他项目开发过程中进行调用, 从而提高项目开发的效率。

Java语言读取Excel列表式数据在项目中使用很普遍 , 但Excel列表式数据复杂 , 如何封装读取Excel操作才能满足常用项目的需求是主要论述的内容。

2 需求分析

Java语言操作Excel的技术已 经非常成 熟 , POI、JExcel API等第三方的API能够很好地解决问题。Java项目开发过程中如果需要导入Excel数据, 首先需要使用API读取Excel每个单元格数据, 然后判断数据类型, 再将单元格数据赋值给Java对象的属性, 从而完成Excel数据的实体化。由于数据值及数据类型的复杂性, 导致导入Excel数据的过程非常复杂。讨论的内容是通过设计一个转换器封装这部分内容, 用户通过调用这个转换器将Excel数据转换为Java实体对象列表, 如图1所示。

2.1 Excel 数据实体化

Excel数据实体化是转换器的核心功能 , Excel转换器允许用户预先设定Excel原始数据字段和Java对象属性的对应关系, 转换器可以将接收的原始数据按照对应关系转换为Java实体对象的列表, Excel原始数据如表1所示。

2.2 数据类型转换

Excel数据和Java对象有各自的数据类型 , Java除了基本数据类型还有自定义数据类型, 转换器能够在Excel数据类型和Java数据类型之间建立映射, 而且在Excel数据类型不能满足Java需求时, 需要自动地转换数据类型。

2.3 数据校验

Excel在转换为Java对象之前需要预先设 定数据校 验规则, 转换器根据校验规则对导入的数据进行校验, 为了提高软件的可扩展性, 转换器也可以外接其他的校验器。

2.4 异常显示

Excel数据导入过程中可能产生各种各样的异常 , 合理的处理异常信息能够给予用户及时和正确的提示, 从而保证Excel数据能够正常导入。

(1) Excel文件由于文件类型、文件编码等错误不能满足导入要求, 需要中断导入, 并且提示用户修改Excel文件。

(2) Excel文件中数据字段名称无法满足转换器的需求 ,需要中断导入, 并且提示用户修改Excel文件的字段名称。

(3) Excel单元格数据无法通过验证或者不满足要求 , 需要中断导入, 记录单元格的位置和错误原因, 并且提示用户。

3 技术可行性和实现

根据以上的需求分析, 转换器的实现有以下几个技术要点:(1) 根据用户需求制定转换器可以阅读的配置文件, 设定Excel字段与Java属性的对应关系, 设定数据类型的对应关系和验证规则。(2) 转换器可以根据配置文件和Excel数据动态地进行Java实体对象的创建, 并且建立列表结构。 (3)转换器能够阅读正则表达式, 并且使用正则表达式验证Excel数据。(4) 具备强大的异常处理机制。

3.1 转换器配置文件

转换器允许用户预先在Excel数据字段和Java实体对象的属性进行映射。同时, Excel数据的验证规则也要根据用户的意图进行设定, 为了能够灵活地控制映射和验证, 可以通过XML语言进行表述。

Java语言通过DOM或者JDOM提供的API读取XML语言文件, 从而完成转换器加载映射关系和验证规则 的过程。以下是具体代码:

3.2 动态创建对象

Java语言提供了反射机制 , 这种机制是在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意一个对象的方法。

转换器根据XML配置文件, 在读取Excel数据的过程中利用反射机制动态地创建对象, 并且将Excel数据注入对象对应的属性, 从而完成对象的创建, 最后使用Java语言提供的列表API存储所有的对象提供给其他程序使用。

3.3 数据验证

转换器加载配置文件时, 已经从配置读取了每个字段的验证规则, Java根据验证规则建立验证类, 利用Java语言提供的“Pattern”和“Matcher”类解析正则表达式, 在读取Excel数据过程中根据验证类进行数据验证 , 如果数据无法通过验证, 将数据在Excel表格中的位置和无法通过验证的原因报告给用户。

3.4 异常处理

Java语言提供了强大的异常处理机制 , Java提供诸如Exception等丰富的异常类 , 允许用户通过继承的方式自定义异常, 然后通过捕获、抛出和处理异常信息。针对转换器需要专门设计异常类捕获Excel导入过程中产生的错误, 代码如下所示:

4 结语

上一篇:埋藏条件下一篇:省属高等学校论文