JDBC访问数据库

2024-10-23

JDBC访问数据库(精选6篇)

JDBC访问数据库 篇1

1 Java连接数据库方法

Java应用程序是通过JDBC访问数据库的, 如图1。

JDBC (Java Database Conectivity, Java数据库连接) 是应用程序编程接口 (API) , 描述了一套访问关系数据库的标准Java类库。JDBC的主要功能如下:

(1) 建立与数据库或其他表列数据源的连接。

(2) 向数据库发送SQL命令。

(3) 处理结果。

2 Java连接数据库过程

2.1 加载并注册数据库驱动

为了通过JDBC来连接关系数据库, 应用程序必须采取的第一个合理步骤是加载合适的JDBC驱动程序, 并获得一个与该数据库的连接。

首先必须明确的是java.sql.Driver接口是所有JDBC驱动程序需要实现的接口, 而这个接口是提供给数据库厂商使用的, 不同厂商实现该接口的类名个人不相同。如:SQL Server 2000的JDBC驱动的类名是com.microsoft.jdbc.aqlserver.SQLServerDriver;Oracle的JDBC驱动的类名是oracle.jdbc.driver.OracleDriver;MySQL的JDBC驱动的类名是com.mysql.jdbc.Driver;加载JDBC驱动是调用Class类的静态方法forName () , 具体为:public static Class< >forName (String className) throws ClassNotFoundException。

该方法利用参数className向其传递要加载的JDBC驱动的类名, 也就是各种厂商所提供的JDBC驱动类名。在运行时, 类加载器从CLASSPATH环境变量中定位和加载JDBC驱动类。每个Driver类在得到加载时, 一般都会创建它本身的一个实例, 并通过调用DriverManager类的RegisterDriver () 方法自动注册该实例。该方法具体为:public static void registerDriver (Driver driver) throws SQLException。

通常不需要去调用RegisterDriver () 方法去注册驱动程序类的实例, 因为实现Driver接口的驱动程序类都包含了静态代码块, 在这个静态代码块中, 会调用DriverManager.registerDriver () 方法来注册自身的一个实例。当这个类被加载时 (调用Class.forName () ) , 类加载器会执行该类的静态代码块, 从而注册驱动程序的一个实例。例:加载SQL Server数据库驱动的语句如:Class.forName ("com.microsoft.jdbc.aqlserver.SQLServerDriver") 。

2.2 建立到数据库的连接

一旦加载并注册了一个驱动程序, 就需要明确地建立一条与本数据库的连接, 以便访问所需要的数据。

建立到数据库的连接可以通过调用DriverManager类的getConnection () 方法, 该方法返回一个Connection对象。在DriverManager类中提供了3个重载的getConnection () 方法来连接数据库, 如下:

(1) public static Connection getConnection (String url) throws SQLException

该方法通过给出的数据库URL建立到数据库的连接。DriverManager将从注册的JDBC驱动中选择一个合适的驱动, 调用它的connect () 方法建立到数据库的连接。

(2) public static Connection getConnection (String url, Properties info) throws SQLException

该方法需要数据库的URL和java.util.Properties对象。Properties包含了用于特定数据库所需要的参数, 以键-值对的方式制定连接参数。通常至少应该包括“user”和“password”属性。

(3) public static Connection getConnection (String url, String user, String password) throws SQLException

该方法除了需要数据库的URL之外, 还需要用户名和密码来建立一个到数据库的连接。

JDBC URL (Uniform Resource Locator, 统一资源定位符) 是一个字符串对象, 用于标识一个被注册的驱动程序, 驱动程序管理器通过这个URL选择正确的驱动程序, 从而建立到数据库的连接。

JDBC URL的格式:jdbc:subprotocol:subname

jdbc为协议, 指的是这个URL指向一个JDBC数据源;

subprotocol为子协议, 用于标识一个数据库驱动程序;

subname为子名称, 与具体的驱动程序有关, 驱动程序可以选择任何形式的适合其实现的语法。

Oracle数据库的JDBC URL的形式为:Jabc:oracle:thin:@server:1521:databasename

其中server是数据库服务器的名称, 也可以用IP地址表示, 如果数据库在本机器上, 要用localhost替换。例建立到Oracle数据库的连接的语句如:Connection conn=DriverManager.getConnection ("Jabc:oracle:thin:@server:1521:databasename", "sa", "1234") 。

2.3 访问数据库

数据库连接被用于向数据库服务器发送命令和SQL语句, 在连接建立后, 需要对数据库进行访问, 执行SQL语句。Java.sql包提供了3个接口, 分别定义了对数据库调用的不同方式, 这3个接口是:Stateent, PreparedStatement和CallableStatement。

2.3.1 Statement接口

Statement接口用于执行静态的SQL语句, 返回执行的结果, 是由Connection对象调用createStatement () 方法创建, 该方法为:Statement createStatement () throws SQLException该方法创建了一个Statement对象, 用于向数据库发送SQL语句。

当建成一个Statement对象之后, 就可以通过该Statement对象执行下列执行方法来执行SQL语句:

(1) ResultSet executeQuery (String sql) throws SQLException

该方法用于在单个ResultSet对象的数据库中检索出数据的SQL语句。

(2) int executeUpdate (String sql) throws SQLException

该方法执行参数SQL指定的SQL DML (Data Manipulation Language) (数据操纵语言) 语句 (INSERT、UPDATE或者DELE-

TE) 以及SQL DDL (Data Definition Language) (数据定义语言) 语句 (CREATE TABLE、DROP TABLE和ALTER TABLE) 。

(3) boolean execute (String sql) throws SQLException

该方法执行返回多个结果集, 多个更新计数值或这两者组合的语句。

2.3.2 PreparedStatement接口

PreparedStatement接口用来把一个SQL串发送给数据库, 然后该SQL串在数据库中得到预处理, 并准备执行。该接口的优点是当传递的是相同的SQL语句, 但参数不同时效率较高, 因为在程序中传递的SQL语句在执行前必须被预处理, 包括语句分析、代码优化等, 然后才能被数据库引擎执行, 而PreparedStatement接口的对象表示一条预编译过的SQL语句, 这样当需要传递不同的参数时效率要高。

该对象可以通过Connection对象的preparedStatement () 方法来得到, 该方法具体为:PreparedStatement prepareStatement (String sql) throws SQLException

PreparedStatement对象所代表的SQL语句中的参数用问号 (?) 来表示, 调用PreparedStatement对象的setXXX () 方法来设置这些参数。setXXX () 方法有两个参数, 第一个参数要设置的是参数的索引 (从1开始) , 第二个参数要设置的是参数的值。

2.3.3 CallableStatement接口

CallableStatement接口用于执行SQL存储过程。合理地利用存储过程来完成数据库访问操作, 可以大大提高程序运行的效率, 因为存储过程直接保存在数据库端, 而数据库执行SQL语句的效率是非常高的, 如果用Java代码来代替存贮过程返程任务, 则要设计SQL命令的解析、数据的网络传输等开销, 因此效率则会比较低。

该对象可以通过Connection对象的prepareCall () 方法来得到, 该方法具体为:CallableStatement prepareCall (String sql) throws SQLException

在执行存储过程之前, 凡是存储过程中类型为OUT的参数必须被注册, 这可以通过CallableStatement对象的registerOutParameter () 方法来完成。对于类型为IN的参数, 可以利用setXXX () 方法来设置参数的值。

2.3.4 ResultSet接口

ResultSet接口的对象以逻辑表格的形式封装了执行数据库操作的结果集, 该对象是通过调用Statement对象的executeQuery () 方法创建的, 该方法具体:ResultSet executeQuery (String sql) throws SQLException

该对象维护了一个指向当前数据行的游标, 初始的时候, 游标在第一行之前, 可以通过ResultSet接口对象的next () 方法移动游标到下一行, 该方法如:boolean next () throws SQLException

该方法移动游标到下一行, 如新的数据行有效, 返回true, 否则返回false。通过判断这种方法的返回值, 就可以循环读取结果集中的数据行, 直到最后。

ResultSet接口中定义了很多方法来获取当前行中列的数据, 根据字段类型的不同, 采用不同的方法来获取数据。如:getArray () getAsciiStream () getBoolean () getByte () , getBytes () getDate () getDouble () getFloat () , getInt () getLong () getShort () getString () 等等。在这些方法中, 又提供了两种形式的调用, 一是以列的索引作为参数, 一是以列的名字作为参数。

3 实例

这是一个连接SQL Server 2000数据库管理程序中数据库名为Mydatabase的实例, 数据空中有一个表名为Student的表, 实例用PreparedStatement对象往表中插入数据, 用Statement对象向数据库发送SQL语句, 并用esultSet对象封装执行数据库查询操作的结果集。

4 结束语

Java应用程序通过JDBC与数据相连, 实现了Java语言的跨平台性, 开发人员不用过多考虑各种数据库管理软件的具体技术, 基本上只要依循以上提供的连接步骤, 其中只需要稍微修改一些代码, 就实现了与各种不同数据库的连接, 简化了用Java语言开发应用程序的工作。

摘要:介绍了在Java应用程序中通过JDBC连接数据库的方法和过程, 详细解释了在连接过程中需要运用的接口方法以及驱动, 并给出了一个成功连接到SQL Server 2000数据库的实例。

关键词:Java,数据库,JDBC,API,驱动

参考文献

[1]孙鑫.Java Web开发详解—XML+XSLT+Servlet+JSP深入剖析与实例应用[M].北京:电子工业出版社, 2006.

[2]KEVIN MUKHAR, TODD LAUINGER, JOHN CARNELL.Java数据库应用程序编程指南[M].北京:电子工业出版社, 2002.

[3]雷之宇.Java项目开发实践—网络篇[M].北京:中国铁道出版社, 2005.

[4]JOHN O'DONAHUE.Java数据库编程宝典[M].北京:电子工业出版社, 2003.

试对数据库访问技术进行研究 篇2

关键词:数据库访问技术;ADO.NET;安全性

中图分类号:TP311.13 文献标识码:A文章编号:1007-9599 (2011) 15-0000-01

Database Access Technology Research

Li Bin

(Guangdong Gaoyao People's Hospital,Zhaoqing526040,China)

Abstract:At present,along with the WWW growing,database access technology has gradually become the focus of the IT technical staff,understand and master the technology of database access,help to better the technology application.This article first elaborated the database access technology development,and based on the ADO.NET data access techniques are studied, for reference only.

Keywords:Database access technology;ADO.NET;Safety

一、数据库访问技术的发展

Web进入编程时代以前,在大部分IT人员眼里,数据访问仅仅是一个相对而言的问题,即需要使用到的所有数据都是自己事先准备好的。大多人关心的问题是如何选择性能好、价格低的数据库服务器,并且系统中涉及的全部模块必须和服务器兼容,其中客户机和服务器的应用是这种两层模型较为典型的范例。

在很短的时间内,三层系统模型发展成了Windows DNA,即Microsoft.NET服务器系统。该系统主要是利用统一的模型进行数据访问,其注重的是内容,而不是存储媒介及数据格式,具体的表达方式完全是建立在UDA的基础上的。为了提供一种通过VB方便访问OLE DB功能的途径,Microsoft设计了ADO。

ADO提供了对脱机记录集、服务器端游标和XML的支持,不仅增强了访问功能,同时还提高了访问效率。为了便于在Web环境下进行数据传输,Microsoft对ADO进行了优化。但是随着人们对可伸缩性以及协同工作能力要求的不断提高,ADO已经渐渐无法满足这一要求,ADO.NET随之出现。

二、ADO.NET数据访问技术

.NET框架是由微软公司推出的一个应用平台,在该平台中ADO.NET是Windows Forms和ASP.NET应用访问数据的标准服务,通过ADO.NET能够访问由.NET提供的不同类型的数据源。ADO.NET可以有效地从数据操作中把数据访问分解成若干个單独使用的组件。ADO.NET可以直接处理检索到的结果,或是将结果放入DataSet对象,并以特殊的方式向用户公开。

(一)ADO.NET的特点。ADO.NET是采用高度分布、松散的应用程序进行设计的,这类程序通常使用HTTP在逻辑程序连接中通信,XML便成为在该连接中交流数据的最佳选择,这是因为文本XML格式较为适合HTTP,当全部连接都处于同一网络时,XML通信提供了最大的灵活性。ADO.NET数据访问具有以下特点:1.不依赖于连续的活动连接。由于被打开的数据库连接会占用一定的系统资源,在正常情况下,数据库仅能维持少量的并发连接,并且维持这些连接会使应用程序的总体性能有所降低。而使用ADO.NET进行数据访问则是以较有节制使用连接的结构作为中心设计出来的,从而使应用程序连接到数据库的时间足以更新和获取数据。在这样的情况下,数据库未被大部分的时间空闲连接所占用,因此,能够为大量的用户提供服务。2.数据能够被缓存到数据集中。较为常见的数据任务是从数据库检索数据随后在对数据进行某些操作,例如显示及处理数据,或是将数据发给别的组件。但很多情况下,应用程序若是在每处理一条记录就返回一次数据库,显然是不切实际的,所以最佳的解决方法就是将从数据库中检索到的记录进行临时存储,然后再对该临时集进行使用,这就是数据集的概念。数据集其实是数据源检索到得记录的缓存,其工作方式好比虚拟的数据存储区。数据集里面的数据一般是数据库中内容的精简版本,可以采用和操作数据类似的方式对数据集进行操作,操作时数据集能够保持与数据库的不连接状态,从而使数据库可以自由执行其他任务。使用数据集最便利的地方在于组件能够按照需要交换数据集。因此,组件不必分别查询数据库。3.数据集独立于数据源。虽然数据集是从数据库中获取数据的缓存,但是两者之间却并没有任何实际啥关系。可以将数据集看作是一个容器,填充这个容器的主要内容是从数据适配器执行的SQL命令或存储过程。由于数据集并没有直接绑定在数据源上。因此,数据集则是来自于多个源的数据的集成点。

(二)ADO.NET数据访问技术的安全性研究。1.安全的ADO.NET连接。为了确保应用程序的安全,首要目标就是保护对数据源的访问,而要想保护对数据源的访问,就必须保持用户的密码、标识以及数据源名称等连接信息的私密性。应避免用纯文本的形式存储用户的密码和标识。因为这样做会造成严重的安全漏洞。用户的密码和标识属于源代码的一部分,如果源代码的安全受到威胁,那么用户的密码和标识则很容易遭受攻击,即便向外部源提供的代码是编译后的版本,也很有可能会被反汇编,从而导致用户的密码和标识被公开,所以说用户的密码和标识绝对不能用纯文本的形式存在于代码中。因此,在连接到Microsoft SQL Server时,可以使用集成安全性,这是因为集成安全性使用的是当前活动活动的标识,而不是传递用户的密码和标识。2.安全的ADO.NET编码。确保应用程序的安全还包括编写安全的代码,而代码则必须只公开客户端代码所需的信息和功能。通常在ADO.NET中最常见的攻击是SQL Insertion攻击,攻击者主要是通过在数据源位置插入其他的SQL语句来达到攻击的目的,这些命令不但能够破坏会修改数据源位置的信息,而且还可以检索用户的私人信息。为了防止SQL Insertion攻击,必须对来自外部源的输入进行验证,并传递列值作为参数,而不是串联这些值来创建SQL语句。

三、结论

总而言之,ADO.NET数据库访问技术具有不依赖于连续的活动连接、数据能够被缓存到数据集中和数据集独立于数据源等优点,必将得到广泛的应用。但在具体使用中必须对其安全性加以注意。只有在确保其安全的基础上,才能更好地发挥该技术的各种优点。

参考文献:

[1]吉占占.基于DataSet和ADO.NET的文献检索列表转换软件设计[J].计算机应用与软件,2009,6

[2]王丽芳.基于ADO.NET的O/R Mapping中间件的研究[N].西北工业大学学报,2010,6

JDBC访问数据库 篇3

最初Java并没有访问数据库的能力,1996年Sun推出了JDBC,将Java的应用范围扩展到了数据库领域,使Java应用程序具有访问不同类型数据库的能力。

1.1 JDBC概念

JDBC是基于Java的,用于访问关系数据库的应用程序编程接口(API),是对ODBC API的一种面向对象的封装和重新设计,Java应用程序通过JDBC API与数据库连接,而实际的动作则由JDBC驱动程序管理器(Driver Manager)通过JDBC驱动程序与数据库系统进行连接。JDBC作为一种数据库连接和访问标准,由Java语言和数据库开发商共同遵守并执行。

Java.sql提供了多种JDBC API,以下是最常见的几种:

1)Connection接口:代表与数据库的连接.通过它调用create Statement能够创建Statement对象。

2)Statement接口:用来执行SQL语句并返回结果记录集。

3)Result Set接口:SQL语句执行后的结果记录集,必须逐行访问数据行,但是可以用任何顺序访问列。

1.2 JDBC驱动程序类型

JDBC提供了以下四种类型的驱动程序,其中前两种基于已有的驱动程序,部分由Java实现,后两种是新设计的,全部由Java实现。

1)JDBC-ODBC桥驱动程序

通过把JDBC方法翻译成ODBC函数调用,使Java应用程序可以通过ODBC驱动程序访问数据库。

2)本地库Java实现驱动程序

与桥驱动程序相似,本地库Java实现驱动程序是建立在已有专用驱动程序基础上,将JDBC方法翻译成本地已有的专用驱动程序。

3)网络协议驱动程序

这是一种全新结构的驱动程序,它以“中间件”形式出现,由中间件组件把JDBC方法翻译成数据库客户端请求,再向数据库服务器发送请求,中间件组件和数据库的客户端通常位于中间层服务器上。

4)数据库协议驱动程序

这也是一种全新结构的驱动程序,它的特点是应用程序直接与数据库服务器端通信。这种方式需要数据库开发商的强力支持,提供基于特定数据库的网络插件,实现针对特定数据库的通信协议,使JDBC驱动程序通过网络插件直接与数据库服务器通信。

2 使用JDBC访问数据库

使用JDBC访问数据库一般要经过:装入合适的驱动程序,创建一个连接对象,生成并执行一个SQL语句,处理查询结果集关闭连接这几个步骤。

2.1 加载驱动程序并建立连接

Driver Manager类是JDBC的管理层,它工作于用户和驱动程序之间,它跟踪可用的驱动程序,并在数据库和相应驱动程序间建立连接。Driver Manager类包含各Driver类,所有的Driver类都必须包含一个静态部分。它创建该类的实例,然后在加载该实例时,Driver Manager类进行注册。注册方式有两种:

1)通过调用方法Class.for Name:这将直接加载驱动程序类。由于这与外部设置无关,故推荐使用这种加载方法:Class.for Name(“驱动名”)。

2)通过将驱动程序添加到java.lang.system的属性jdbc.drivers中,这是一个由Driver Manager类加载的驱动程序类名列表。

2.2 创建Connection对象建立与数据库的连接

与数据库建立连接的标准方式是调用Driver Manager.get Connection方法。该方法接受含有某个URL的字符串。其代码形式为:

String url=“JDBC数据源的URL”;

Connection conn=Driver Manager.get Connection(url,数据库名,密码);

URL表示网络上一个资源文件的地址,JDBC使用URL来表示JDBC驱动程序和数据源的位置。其格式为:jdbc:子协议:数据源

其中表示这个URL制定一个JDBC数据源,<子协议>指定JDBC驱动程序类型,<数据源>指定数据源名。

2.3 创建Statement对象执行SQL语句

建立了与特定的数据库的连接后,就可以用该连接发送SQL语句,Statement对象用Connection类的方法create Statement创建,例如:

接下来,可以通过Statement对象提供的方法执行SQL查询,例如:

2.4 处理查询结果集关闭连接

Result Set接口用于存储数据查询返回的结果集,一个Result Set对象,存储一个数据查询结果集,结果由若干列、若干行的数据项组成。Result Set接口声明了一组get()方法用于返回当前指定列的数据项值,参数分别是列序号或列名。一个结果集包含多行数据,如果需要查看多行数据,则使用一个循环语句。例如:

其中get String()方法是以字符串方式返回当前行指定列值,而无论列真正的数据类型。

Statement对象将由Java垃圾收集程序自动关闭,而作为一种良好的编程风格,应在不需要时显示的关闭它们,有助于避免潜在的内存问题。

最后关闭和数据库连接。代码如下:

stmt.close();

conn.close();

3 JDBC访问数据库实例

下面这段程序是利用JDBC访问SQL Server数据库的实例的核心代码:

在应用程序对数据库的访问时常遇到的几个问题:

1)可能会出现连接失败,或查询SQL语句错误,因此在建立连接时需要有抛出异常语句,我们还可以在创建main函数时直接抛出异常。如:

public void static main(String args[])throws Exception{//程序代码}

2)如果在取得一次结果后要很久不再操作,立即关闭结果集和断开同数据源的连接是对的,如果要连续操作,这样做则是很不明智的。

3)只要执行了stmt.close()就会把它的结果集同时关闭,而不需要再执行rs.close()了,最终一定要在finally语句中关闭同数据库的连接即conn.close()。

4 JDBC应用拓展

4.1 获取表的列信息

通过Result Set Meta Data对象可以获取有关Result Set中列的名称和类型的信息。假如results为结果集,则可以用如下方法获取数据项的个数个每栏数据项名称:

rsmd.get Column Count()//获取数据项的个数

rsmd.get Column Name(i)//获取第i栏字段名称

4.2 创建可滚动结果集

Connection对象提供的不带参数的creat Statement()方法创建的Statement对象执行SQL语句所创建的结果集只能向后移动记录指针。实际应用中,有时需要结果集中前后移动,这时就需要使用可滚动记录集。创建方法如下:

其中,result Set Type代表结果集类型,包括如下情形:

1)Result Set.TYPE_FORWORD_ONLY:结果集游标指向后滚动;

2)Result Set.TYPE_SCROLL_INSENSITIVE:结果集游标可以前后滚动,但结果集不随数据库内容的改变而变化;

3)Result Set.TYPE_SCROLL_SENSITIVE:结果集可前后滚动,而且结果集与数据库内容保持同步

result Set Cincurrency代表并发类型,取值包扩如下情形:

1)Result Set.CONCUR_READ_ONLY:不能用结果集更新数据库表;

2)Result Set.CONCUR_UPDATABLE:结果集会引起数据库表内容的改变;

具体选择什么类型的结果集取决于应用需要,与数据库表脱离的且滚动方向单一的结果在访问效率上更高。

4.3 数据库的更新

我们一般可以把操作分为两类,一类是查询,得到一个结果集;一类是更新,包括插入,更新,删除等。

1)数据插入。将数据插入数据库表格中需要使用INSERT语句,使用Statement对象的execute Update方法执行SQL语句来实现数据插入。例如:

String sql=“INSERT INTO student VALUES(‘张三’‘男’‘20050102’)”;

stmt.execute Update(sql);

2)数据修改。实现数据修改只需把INSERT改为UPATTE语句。例如:

String sql=“UPDATE student set sex=‘女’where number=‘20050102’”;

stmt.execute Update(sql);

3)数据删除。在数据库表中实现删除需要使用DELETE语句。例如:

execute Update()的返回值是一个整数,表示受影响的行数,对于DROP TABLE或者是CREATE TABLE等不操作语句,返回值总为零。

5 结束语

JDBC具有优越的跨平台性,安全性,完整性,健壮性等优点,它既实现了纯Java应用程序与数据库的连接,又实现了数据独立性,使程序具有很好的可移植性。Java与JDBC的结合提高了数据库开发的效率和可移植性,让开发人员在开发数据库应用时真正实现“一次编写,到处运行”。

参考文献

[1]叶核亚.Java2程序设计使用教程[M].北京:电子工业出版社,2007.

[2]丁振凡.Java语言实用教程[M].北京:邮电大学出版社,2008.

JDBC访问数据库 篇4

Java语言通过JDBC访问数据库。JDBC与Java结合易向各种关系数据库发送SQL语句。在实际应用中,面临海量数据和频繁操作,提升应用程序访问数据库的效率和性能显得越来越重要。基于自行开发的教务管理系统为例,从数据库连接和操作方面提出了访问优化的策略,多方面改善应用效果。

2 连接数据库的机制与过程

JDBC是一种用于执行SOL语句的Java API,可以为多种关系数据库提供统一的访问接口。有了JDBC,用户能够以一致的方式连接多种不同的数据库系统,进而可使用标准的SOL语言来存取数据库中的数据。它包括以下几个重要接口:

DriverManager:负责加载各种不同驱动程序,并根据不同的请求,向调用者返回相应的数据库连接。

Connection:数据库连接,负责与进行数据库间通信、SQL执行以及事务处理。

Statement:用以执行SQL查询和更新。

PreparedStatement:用以执行包含动态参数的SQL查询和更新

CallableStatement:用以调用数据库中的存储过程。

JDBC访问数据库的过程可概括为以下3点:

(1)与一个数据库建立连接。

(2)向数据库发送SOL语句。

(3)处理数据库返回的结果。

3 通过连接池技术提高数据库连接性能

数据库连接是一种关键的有限的昂贵的资源,如果某一应用程序耗尽数据库资源,其他应用程序就无法正常运行。

采用连接池技术可更有效地利用资源,避免浪费。数据库连接池负责分配、管理和释放数据库连接,允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。连接池的结构图如图1所示。

数据库连接池的主要方法如下(采用JavaBean技术):

通过数据库连接池技术的原理分析可得,它能够有效提高连接数据库的速度和效率。

4 数据库的优化技巧

在实际应用中,Java操作数据库可以总结出多种改进和优化的方法,提升执行效率与安全性,以自行开发的教务管理系统为例,结合编程经验予以阐述。

4.1 提升访问效率

存储过程是一组为了完成特定功能的SOL语句集,经编译后存储在数据库中,所以比SQL语句执行更快,并且存储过程被创建后可以多次调用。据此,可通过合理地使用存储过程优化数据库操作。在JDBC应用中,可以利用CallsableStatement对象执行数据库中的存储过程。以教务管理系统插入学生成绩为例:

4.2 PreparedStatement接口性能分析

PreparedStatement接口用以执行包含动态参数的SQL查询和更新。它是SQL预处理类。由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象。因此,多次执行的SQL语句经常创建为PreparedStatement对象,以提高效率。

PreparedStatement在设置参数是可以用“?”代替。以教务管理系统为例,插入一条学生用户信息,实现如下:

PreparedStatement经过预编译,处理效率显著提升,但创建对象的开销要明显大于Statement,因此适合处理同一种类型大量操作的任务(以规模操作节约时间弥补创建时的开销),如接受学生查看成绩等。

4.3 避免SQL语句漏洞的方法

在实际编程中,使用SQL语句时可能会产生漏洞,间接给攻击者提供了渠道。以教务管理系统为例,如下所示:

其中,username和password为用户输入的变量。这里存在隐患,如果任意输入username,并且把password输入为如下格式:’or‘’=‘’,此时where的判定条件恒为真,因此用户不需要有效的身份也可以登录成功,系统面临风险。

类似地,如果提供给使用者的查询功能是只与本人相关的,那么用户同样可以通过这样的方式,使限定条件失效,从而获得所有人的查询结果。

通过使用预编译语句,可使内容不和原来的语句发生任何匹配关系,解决登录漏洞的方案如下:

这样,用户合法输入被严格限制,可以有效防止SQL语句攻击。

5 结语

介绍Java通过JDBC访问数据库的机制,从不同方面研究了JDBC访问数据库的优化策略,并且结合开发的具体应用程序予以说明。从理论分析和实际效果得出,这些方案可以有效提升数据库访问的综合性能。实际应用中,要根据实际的开发环境,琢磨出合适的方案,得到较好的数据库访问效率。

摘要:JDBC是一种用于执行SQL语句的Java API。首先简要分析了JDBC访问数据库的机制,通过剖析访问和操作技术,结合实例,提出了改善数据库访问效率和安全性的优化策略。

关键词:JDBC,数据库,优化策略,Java

参考文献

[1]Cay S.Horstmann.Core Java,volume II:Advanced features.8th Edition 2008.

[2]黄汛,程治刚.数据库连接池技术的应用研究.武汉大学学报,2002.

JDBC访问数据库 篇5

网格计算[1]在分布式计算中是一个比较新的概念,它的目的是提供一种分发和共享资源的环境。随着这一概念的提出,急待解决的问题主要集中在分布式计算。网格中间件必须明确谁是它们宣称的用户,在什么条件下可以授权用户使用资源。网格中间件还应当提供如何找到特定的资源,分配工作,并传输文件和用户之间的资源。业界一致认为在提供这一基础构件的同时,对用户隐藏细节也是网格计算中的一个重要概念。

网格计算在过去的十年中已经取得了重要进展,为这些系统提供必要功能的中间件也已经开发出来。现在有几十种解决方案去落实和部署网格基础设施,如:Globus Toolkit[2],Unicore,g Lite,GridBus等等。

2. 相关工作

OGSA-DAI项目致力于打造一个通过网格访问和集成来自不同的孤立数据源的中件间。OGSA-DAI 3.0[3]符合基于OGSA的网格标准,并在Globus Toolkit 3.0上进行开发,支持DB2、Oracle、Xindice、MySql等数据库管理系统。网格数据库是对现有数据库的网格化,基于开放网格服务体系统结构提供网格数据库服务,使网格用户或其它网格服务可通过网格数据库服务访问网格中的各种异构数据库,从而达到数据资源的高度共享和协同处理,对数据资源的访问更加透明、高效、可靠,网格数据处理的能力更强,更好地满足更广泛虚拟组织的数据处理需求。它的主要功能是提供一个通用的方法,使用不同的数据库管理系统(DBMS)来管理不同的关系型数据库。DBMS使用Web服务标准的通信。OGSA-DAI中间件可部署在Globus容器,或在Tomcat容器上。随后,OGSA-DAI团队提供了一个客户端应用程序编程接口(API)编写的程序访问开放数据库。

JDBC API是由SUN公司提出的一个工业标准,它以Java语言作为访问数据库的基础。几经修订,自其成立以来现最新规格是6.0版本。JDBC的目的是为任何使用Java语言的DBMS提供一个共同的接口来访问数据库。这种方式被广泛使用,几乎被所有的Java程序员所熟知。

OGSA-DAI技术执行API行业标准的必要性首次被关注。我们的想法是整合JDBC和OGSA-DAI中间件,提供给在OGSA-DAI[4]项目中没有任何经验的Java程序员,使他们有可能以最小的代价得以访问在网格中的数据库。现在已经有了一个遵照开放标准的基于中间件的标准API。

3. 技术概览

在本节中我们要讨论可以用于这方面工作的主要技术。

3.1 Java数据库连接

基于平台的便携性考虑,Sun公司开发了JDBC Microsystems,并想让它成为访问数据资源的一种标准方式。JDBC实现了这个目标,它为每一个DBMS供应商提供了一个接口,即执行一个所谓的JDBC驱动程序。图1显示了JDBC API中最重要的接口和它们的相互作用。为了获取一个连接实例,SUN提供了一类驱动程序管理器来连接用户的驱动程序接口。在执行过程中用户应向Device Manager表明自己的驱动程序是否可以处理或在不作要求的基础上连接URL。如果是的话,JDBC就返回一个连接的数据库并编写声明,用来说明和调用接口之间的关系,然后提供一个查询数据库的连接,并在更新报表的情况下以整数的形式返回结果,或者选择一个指令的结果集。用JDBC的好处之一是在更改数据库以后不会影响代码,但一些配置文件应该重新编写。

现在面临的主要问题是直接在网络环境中使用JDBC时,通信协议和信息没有统一的规范标准,每一个数据库管理系统厂商都在执行JDBC的API时实施自己的通信协议。

3.2 OGSA-DAI的JDBC驱动

从一个Java程序员的角度来看,用OGSA-DAI基本构件编写客户端程序需要OGSA-DAI组织提供的客户端API。这就迫使Java程序员需要学习一种新的访问数据库的方式。还有一种观点认为,应从传统的应用程序和Java框架出发。为了使传统的应用程序可以访问在网格上孤立的数据库资源,所有编程人员编写的关于访问数据库的代码都应该更改,但这就可能会导致很多意想不到的错误。与Java框架相比,我们有一个类似的情况,即一个非常常见的Java语言的持久性框架,例如,Hibernate和Java持久性API(JPA)。它们都依赖于JDBC API。再者,如果框架开发商决定支持访问OGSA-DAI开放数据库,大量的代码都必须做相应改动。

4. 方案实现

OGSA-DAI的JDBC驱动程序的部署从无到有,该驱动程序基于JDBC规范的5.1版本。使用安装在Windows或Linux操作系统上的OGSA-DAI3.0进行代码测试。主机硬件为Core 2 Duo T7250的CPU,2GB内存及NVIDIA 135M显卡,在Windows或Linux系统下安装有VMWare的虚拟机上安装VMWare服务器,这可用于OGSA-DAI使用Apache Axis1.6版本部署Apache Tomcat或部署在Globus容器4.0.x版本上。

应像使用其它任何JDBC驱动程序那样,为了从开放数据库OGSA-DAI使用JDBC建立连接和检索信息,我们必须为驱动程序类指定详细路径,并应包含br.usp.pcs.lahpc.ogsadai.jdbc.Driver。我们还必须提供数据资源的URL,使用如下的标准:jdbc:ogsadai:///.

为了更好地了解JDBC URL,让我们来看一下每一部分都是如何工作的。

jdbc:ogsadai-它在ogsa-dai中,确定了数据库的基本类型。

/-这部分是部署OGSA-DAI服务的路径,例如:localhost:8080/dai/services

-最后你必须提供你想进入的数据库资源的名称,因为一个OGSA-DAI实例可以访问一个以上的数据库,所以这是必要的。

在Java语言中操作发送的查询和处理结果和其它任何JDBC驱动程序都是一样的,这是OGSA-DAI的JDBC驱动程序一个很大的优势。以下的代码是一个如何使用OGSA-DAI的JDBC驱动执行查询的例子。

上述代码对一个Java程序员来说肯定非常熟悉,其中的差别在于所指定的驱动程序类(第2行)和URL资源(第3行)。为了使OGSA-DAI的API一致,我们经历了一个很繁琐的过程。然而,通过这个过程中数据库的检索信息,客户将拥有更多的控制权。例如在使用My SQL时,我们只需要改变第2行和第3行上的代码。

5. 结论

在一个网格上使用现有的技术访问网络资源[5]可以促进OGSA-DAI的发展并使它在不具有网格计算专业知识的程序员当中流行起来。这种方式也可以使我们的传统应用程序访问网格资源。JDBC API访问数据库的应用将有助于普及OGSA-DAI。

使用OGSA-DAI的主要好处是允许现有的应用程序在原有源代码几乎不用改变的前提下访问数据资源。我们还强调通过OGSA-DAI在JDBC的基础框架上处理数据库的益处。现在JDBC技术应用如此广泛,这可能促使OGSA-DAI用于商业开发当中。

摘要:OGSA-DAI是一款能够在网格中开发和管理数据库的中间件。我们目前所做的工作是用SUN公司JDBC接口的一个应用来扩展OGSA-DAI的网格中间件,使用Java语言来访问数据库。本次应用使用OGSA的代客户端API,目的是提供一种简单的方法,使新的和现有的开发人员及应用程序能够在网格中使用OGSA-DAI中间件来操作数据库。

关键词:grid,网格计算,jdbc,开放式网格服务体系(OGSA),OGSA-DAI

参考文献

[1]都志辉,陈渝,刘鹏.网格计算[M].北京:清华大学出版社,2002.

[2]I.Foster.Globus toolkit version4:Software for service-oriented systems.Network And Parallel Computing[R]:IFIP International Conference,NPC2005,Beijing,China,November30-December3,2005:Proceedings,2005.

[3]C.Hong,A.C.Hume,M.Jackson.Ogsa-dai3.0-the what’s and whys[R].In UK e-Science All Hands Meeting,2007.

[4]Y.Chen,D.Berry,and P.Dantressangle.Transactionbased grid database replication[R].UK e-Science All Hands Meeting,2007.

JDBC访问数据库 篇6

一、使用JDBC连接Oracle数据库

JDBC与Oracle的连接方式通常有两种:OCI方式和thin方式。

(一) OCI方式

OCI是一种“胖”客户端的连接方式, 也就是说采用这种连接方式必须安装Oracle的客户端。OCI是Oracle公司提供的一种访问接口, 它的作用是使用Java语言来调用本地的Oracle客户端, 然后再访问数据库。OCI方式的连接和访问速度快, 但是需要额外安装和配置数据库。OCI方式连接O-racle的步骤如下:

1.首先在本地计算机安装Oracle数据库的客户端。

2.在安装的客户端目录中找到classes12.zip文件, 然后在本机的环境变量中设置classes12.zip所在的路径。

3.最后通过Java类库中的数据库连接类, 在本地通过OCI方式获取Oracle数据库连接。

步骤3中的主要代码为:

第一句语句为加载Oracle数据库驱动程序, 第二句语句为通过OCI方式与数据库建立连接。在第二句语句中的字符串"jdbc:oracle:oci8:user/pass@orcl"中, user为Oracle用户的用户名, pass为用户密码, orcl为数据库的服务名。

(二) thin方式

thin方式相对于OCI方式而言是一种“瘦”客户端的连接方式, 也就是说这种连接方式不需要再安装Oracle的客户端, 而只需要在本机环境中设置JDBC驱动和添加必要的jar包。实质上thin的连接方式就是使用纯Java语言编写的Oracle数据库访问接口。thin方式连接Oracle的步骤如下:

1.首先去Oracle的官网下载相应版本的Oracle JDBC驱动。

2.然后在本机的环境变量classpath中设置下载的驱动文件所在的路径。

3.最后通过数据库连接类, 在本地通过thin方式与Oracle数据库建立连接。

步骤3中的主要代码为:

第一句语句为加载数据库驱动程序, 第二句语句为通过thin方式与Oracle连接。第二句语句中的连接字符串中需要提供相应的数据库服务器的IP地址、端口号 (通常为1521) 、数据库服务名、用户账号和用户密码。

(三) OCI方式和thin方式的比较

OCI方式和thin方式连接Oracle数据库的主要区别如下:

1.从使用层面上来看, OCI方式要求必须在本地安装Oracle的客户端后才能进行连接, 而thin方式就不需要安装客户端。因此, thin方式在使用上更加方便, 灵活性更高, 适用性更强, 这也是thin方式更为常用的主要原因。

2.从原理层面上来看, thin方式是通过纯java语言来实现基于TCP/IP协议的客户端和数据库服务器端的通讯;而OCI方式是客户端通过native java method调用OCI来访问数据库服务器端。因此, OCI连接方式需要Oracle的客户端安装作为前提。

3.从驱动本身层面上来看, 它们分属不同的驱动类别, OCI为二类驱动, thin为四类驱动。

虽然两种连接方式在本质上有着巨大区别, 但它们在功能上没有明显的差异。两者之间的切换在设置上来说非常简单。以从thin驱动切换到OCI驱动为例, 只需把连接字符串"java:oracle:thin:@数据库服务器地址:端口号:数据库库服务名"转换为字符串"java:oracle:oci8@服务名"即可, 如从"jdbc:oracle:thin:@192.168.21.1:1521:orcl"改为"jdbc:oracle:oci8:@orcl"。

二、使用JDBC连接SQL Server数据库

SQL Server是微软公司的数据库产品, 被广泛应用于中小型商业软件的开发。JDBC连接SQL Server通常有三种方法:JDBC-ODBC连接桥、使用Microsoft提供的驱动方式和jtds方式。

(一) JDBC-ODBC连接桥

第一句语句为加载Jdbc Odbc驱动, 第二句语句为通过桥获取与数据库的连接。在第二句语句中需要提供正确的ODBC数据源名称、用户名和用户密码。

(二) 使用Microsoft提供的驱动方式

该方式是采用由微软公司本身提供的驱动程序与SQL Server进行连接。首先需要下载相应的驱动程序文件, 然后通过加载该驱动程序与数据库建立连接。值得注意的是该种方式连接SQL Server2000和SQL Server 2005时的主要连接代码会有所不同:

1.连接SQL Server 2000

2.连接Sql Server 2005

无论是连接SQL Server 2000还是SQL Server2005都必须在连接字符串中提供数据库服务器地址、端口号 (通常为1433) 、数据库名称、数据库用户名和密码。

(三) jtds驱动方式

该方式是利用第三方提供的驱动程序和SQL Server进行连接。首先需要下载jtds的驱动文件, 然后利用数据库连接类加载该驱动文件就可以通过jtds方式与SQL Server建立连接了。主要的连接代码如下:

第一句语句为加载jtds驱动, 第二句语句为通过jtds获取数据库连接。在第二句语句中同样需要为连接字符串提供正确的服务器地址、端口号、数据库名、数据库用户名和密码。

(四) 三种连接方式的比较

前两种连接方式的主要区别在于:JD-BC-ODBC连接桥方式需要配置ODBC数据源但不需要下载驱动程序;而使用Microsoft提供的驱动方式需要下载相应的驱动程序, 对于XP的用户还需要安装相应的补丁程序。

jtds方式与前两种方式的区别主要在于:

1.功能更加全面。jtds完全支持JDBC 3.0, 而Microsoft提供的驱动仅完全实现JDBC 2.0, JD-BC-ODBC桥仅支持JDBC 1.0。

2.完全免费, 开源代码。开发人员不仅能够使用jtds进行调试并微调形成自己喜好的方式, 还可以将jtds应用和发布于各种免费的或者商业性的应用程序中。虽然JDBC-ODBC桥和Microsoft提供的驱动也是免费的, 但是一旦遇到开发人员无法解决的问题就必须求助于Sun公司和微软公司。

3.稳定性更强。jtds比其他两种方式具有更好的稳定性, 一旦ODBC驱动产生问题和错误, JD-BC-ODBC桥会使Java虚拟机崩溃。而因为商业竞争, Microsoft提供的驱动也不可能真正完全地支持Java/JDBC。

三、结语

由于Java语言的普及和大量使用, 通过JDBC连接数据库的方式会在各类软件项目中获得更为广泛的应用, 它的重要性也将越来越突出。除了上述介绍的JDBC连接Oracle和SQL Server数据库的方式以外, JDBC还可以通过数据库连接池和hibernate等技术与不同的数据库建立连接。总之, 随着计算机技术水平的不断进步, 通过JDBC连接各种不同数据库将会变得更加灵活、稳定和高效。

参考文献

[1]许晓茹.浅议三层网络体系结构的特点[J].沿海企业与科技, 2005, (5) .

[2]刘志成.JSP程序设计案例教程[M].北京:清华大学出版社, 2007.

上一篇:工艺规程的编制下一篇:疝腹股沟疝