JDBC数据库连接

2024-06-21

JDBC数据库连接(精选7篇)

JDBC数据库连接 篇1

Browser/Server三层结构的开发模式已日渐成为商业软件开发的主流, 而基于Java数据库体连接体系结构的JDBC可以为B/S模式中的浏览器端客户向数据库服务器端的数据访问提供安全和统一的途径。JDBC是由Java语言编写的类和接口构成的组建, 它为软件和数据库的开发人员提供了一个标准的API, 由此可以构建更高级别的接口和工具。JDBC使开发人员能够运用Java语言编写各种类型的数据库应用程序。目前大部分的商业应用软件采用Oracle或者SQL Server作为后台数据库。文章将对JDBC与Oracle和SQL Server数据库的连接方式作深入的剖析。

一、使用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.

[3]赵景晖, 迟勇.Java语言程序设计[M].大连:大连理工出版社, 2009.

JDBC数据库连接 篇2

摘系统性能的连接使用问题是一个要急需攻克的瓶颈, 若能解决这个

难题, 那么在数据库连接管理方面将会更加便利, 能够发挥数据库连接最大的应用性能, 从而令数据库连接使用得到高效、安全的重复利用。在此, 本文将基于JDBC的数据库连接池高效管理策略进行研究, 进而提出高效的连接管理策略, 从设计与实现两方面入手进行深入分析, 以帮助解决连接使用过程中的问题。

理策略

一般情况下, 数据库的应用开发大多使用Java语言来展开, 在与数据库交互的过程中则使用JDBC来实现Connection (连接) , 连接是作为一个通道对数据库进行访问, 从中得到数据而后实现对数据的应用。在应用开发过程中, 简单的数据库应用并不会受到频繁的访问, 于是开发者会针对性选择数据库, 通过建立新连接来实现访问, 访问结束再关闭连接。但对数据库进行频繁的创建连接与关闭连接, 极易造成数据库性能系统性的降低, 因此如何解决系统性能的连接使用问题成为数据库应用开发中急需攻克的瓶颈。

1 高效连接管理策略

为了提高数据库连接使用的高效、安全重复利用, 降低因频繁访问数据库而产生的开销, 以减少建立与关闭连接过程中的不必要消费。于是, 高效连接管理策略被提出, 着重解决数据库访问过程中的连接复用问题。此外, 在这一连接管理策略中封装了JDBC中的原始连接, 这样便于高效使用连接数据库的应用, 而且还利用封装层隔开了应用自身处理逻辑, 同时也将其与具体数据库访问逻辑相隔离, 这样对数据库访问的连接复用就可以实现。

略的设计

鉴于以往数据库访问连接属于低效管理, 因而不利于实现资源共享以及连接复用。为了提高连接管理的高效性、共享性, 于是提出了以JDBC为基准的数据库连接池, 以实现合理规划及分配数据库资源, 并达到连接使用的高效率与重复利用率。

2.1 创建连接池

在Java中, 关于连接池的建立十分便利, 因为其中有许多容器类 (如Vector、Stack等) 为其提供了方便。在创立连接池之前将系统初始化, 而后依据配置需求建立连接使用, 并在连接池中有效放置。这样在以后的使用过程中就可以不必再创建新的连接, 能够便利、规划的在连接池中提取资料, 还节约了因反复连接与关闭产生的花费。

2.2 发挥分配、释放功能

在创建了基于JDBC的数据库连接池之后, 就需要发挥其高效的管理功能, 若有客户要求使用数据库连接, 这时可以先查看连接池中有无没被分配的连接接口, 若有则将其分配给客户使用并标出使用记号。而当连接池中连接接口都被分配出去了, 那么就在这些正在使用的连接当中为客户找到符合的连接通道, 以实现连接资源的复用。若发现已有客户将数据库连接使用权释放时, 那么在处理过程中保存连接状态, 并将其放置到连接池中, 以满足下次的连接复用。

2.3 配置策略

关于配置策略, 以数据库的初始系统配置为主, 连接池中的初始连接数目是依据配置应用需求而设定的, 随着连接使用的次数不断增多, 连接池中的连接数目也会不断增大, 直到扩张到最大数目为止。

3 基于JDBC的数据库连接池高效管理策略的实现

3.1 引用记数

引用记数是一种有效的设计模式, 英文称之为Reference Counting。将该模式引入数据库连接访问中, 可以实现连接资源的复用。为了掌握连接使用的客户数量, 当某一数据库被连接时需要标识出一个引用记数, 而在连接池中, 设置了空闲池、使用池两个分类, 分别用来放置未被分配与已分配使用的连接, 若连接实现分配时, 就需要将其放置在使用池里, 并添加一个引用记数。但当空闲池中没有连接库存时, 会依旧策略需求选取一个符合的、已在使用的连接, 进而提高使用连接的重复利用。

3.2 事务处理

为了实现数据库连接池的高效管理, 需要采取相应的事务处理, 并构建事务支持机制。而在Connection (连接) 中, 其自身能够满足支持事务处理的功能, 只需将其中Auto Commit调成false属性, 将调用显式设置为commit或者rollback即可。然而, 为了进一步确保连接复用过程中的高效与安全, 需要构建事务显式机制, 以掌握连接开始与结束的进程。同时, 通过设置事务注册表来划分事务处理、连接管理之间的关系, 记录连接使用者的信息, 及时掌握连接过程中使用与调用的动态情况。

3.3 封装

在以往的连接使用中, 数据库的访问、事务处理都划分了不同的操作接口, 但这样不利于合理调节连接分配与释放。于是, 需要利用能够容纳多个对象的Java, 将普通连接、事物连接封装为一体, 直接对外提供一个Db Connection接口, 而后客户根据自身需求及特点来对接口进行定义, 从而确保连接使用上的一致性。

3.4 并发问题

所谓的并发问题, 是指在连接管理服务中涉及到的多线程环境, 有了这种连接环境就可以实现连接资源的通用、共享。但前提是要保证两方面数据的一致性, 即连接管理本身数据、连接内部数据要一致, 不过Java在这方面有优势, 通过搜索synchronized (关键字) 来获得支持, 同时还能确保连接管理过程中高效、安全的使用。

4 结论

综上可见, 为了解决连接使用过程中产生的诸多问题, 提高连接使用的高效性、安全性、复用性, 开发者们研究出了基于JDBC数据库连接池的高效管理策略。具体的策略实施包括两方面, 一个属于设计范畴, 需要通过创建连接池、发挥分配与释放功能、提出配置策略才能实现数据库的连接复用;另一个属于实践范畴, 需要通过引用记数、事务处理、封装、并发问题四个方面的相互配合才能完成, 这样有利于令高效管理策略成为可能。

参考文献

[1]马海燕, 彭宇行.基于JDBC数据库连接池的自适应管理策略研究[J].计算机应用研究, 2006, 23 (2) :57-59.

JDBC数据库编程技术 篇3

1JDBC的嵌入式SQL编程方法

应用程序对数据库中数据的访问包括更新和查询操作。 用JDBC数据库连接方法连通数据库后,就可以将SQL语句嵌入到Java宿主语言中混合编程,SQL语句负责操纵数据库,Java语言语句负责控制程序流程。

在使用嵌入式SQL语句查询数据时,为了协调SQL面向集合和Java面向记录的不同处理方式,用游标存放查询结果,移动游标指针逐一获取每行记录,提交Java处理。

在JDBC编程中,用Statement接口对象的execute Query()方法执行SQL的查询语句,并返回一个Result Set接口对象,用ex-ecute Update()方法执行SQL的更新语句,并将影响的行数返回给客户端。

1.1更新数据的实现

首先建立数据库连接Connection接口对象,然后在该连接的基础上创建Statement会话接口对象,通过Statement会话接口对象执行更新的SQL语句。创建一个统一的数据更新方法的主要代码如下所示:

1.2查询数据的实现

在执行查询时,结果用Result Set对象保存,它代表符合SQL语句条件的所有行,并且它通过get XXX方法提供了对这些行中数据的访问。ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行。如果想要取得某一条记录,就要使用Result Set的next()方法,如果想要得到Result Set里的所有记录,就应该使用while循环。主要代码如下所示:

1.3动态SQL参数的实现

虽然可以使用Statement接口对象对数据进行更新和查询操作,但每次系统要重新编译SQL语句,并且所有的值是固定的,是静态SQL语句。JDBC中的Prepared Statement接口对象可以对要执行的SQL语句进行预编译,并可用于执行带参数的SQL语句,属于动态SQL语句。在创建Prepared Statement的时候所需要设置的内容可以通过点位符“?”表示,而在执行更新和查询之前,需要使用一系列的set XXX()方法设置“?”的数据。因此,当需要多次执行SQL语句,或需要动态改变参数时, 用Prepared Statement接口对象可以提高应用程序操作数据库的总体效率。如,创建向s表(id,name)中插入元组的动态SQL语句如下:

2存储过程调用方法

当客户端存在多个用户并发访问数据库的时候,客户端会向数据库服务器发送大量的SQL语句,增加网络负荷。可以用PL/SQL语句编写的存储过程实现更新和查询功能,经编译和优化后存储在数据库服务器中,在客户端的Java应用程序中用Callable Statement接口调用这些存储过程即可。如,创建向s表 (id,name)中插入元组的存储过程代码如下:

在程序中可用如下方法执行存储过程:

Callable Statementstmt=conn.prepare Call(“{callinsert D(?,?)}”);

stmt.set String(1,id);

stmt.set String(2,name);

int r=stmt.execute Update();

3批处理和事务操作

批处理指的是一次性向数据库中发出多条更新指令。在Statement接口中可用add Batch(sql)方法和执行批处理execute-Batch()方法,结果返回的是每一条SQL语句影响的数据行数量。在Prepared Statement接口中可用add Batch()方法[2]。如,创建向s表(id,name)中批量插入元组的代码如下:

以上SQL语句属于一个完整业务,由于JDBC在默认情况下自动提交事务,如果中间出现了错误,之前没有出现错误的语句会自动提交,所以必须手工进行事务处理。可以在Con-nection接口中利用commit()方法、rollback()方法和set Auto Com-mit()方法实现提交、回滚和自动事务。将上述代码加上事务操作后的代码如下:

4结束语

基于JDBC的数据库访问技术 篇4

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.

JDBC数据库连接 篇5

1.JDBC

1.1 JDBC概念

JDBC (java datebase connectivity, java数据库连接) 是一种用于执行SQL语句的java API, 可以为多种关系数据库提供统一的访问接口。JDBC由一组用java语言编写的类与接口组成, 通过调用这些类和接口所提供的方法, 用户能够以一致的方式连接多种不同的数据库系统 (如Access、Server2000、Oracle、Sysbase等) , 进而使用标准的SQL语言来存取数据库中的数据, 而不必再为每一种数据库系统编写不同的java程序代码。不但如此, 使用java编写的应用程序可以在任何支持JAVA的平台上运行, 不必在不同的平台上编写不同的应用程序。JAVA和JDBC的结合可以在开发数据库应用时真正实现"一次开发, 可随处运行"!简单地说, JDBC能完成下列3个功能:

1) 和一个数据库建立连接;

2) 向数据库发送SQL指令;

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

1.2 JDBC驱动

类型1:JDBC-ODBC桥 (JDBC-ODBCBridge) JDBC-ODBC桥驱动程序为Java应用程序提供了一种把JDBC调用映射为ODBC调用的方法。因此, 需要在客户端机器上安装ODBC驱动。JDBC-ODBC桥在JDBCAPI和ODBCAPI之间提供了一个桥梁, 这个桥把标准的JDBC调用翻译成对应的ODBC调用, 然后通过ODBC库把它们发送到ODBC数据源。

类型2:Java到本地API驱动程序 (JDBC-Native Bridge) JDBC本地驱动程序使用Java实现与数据库厂商专有API的混合形式来提供数据访问。它建立在本地数据库驱动程序的顶层, 而不需要使用ODBC。JDBC程序将标准的JDBC调用转变为对数据库API的本地调用, 该类型的驱动程序是本地部分Java技术性能的本机API驱动程序。使用此类型需要牺牲JDBC的平台独立性, 驱动程序和厂商专有的API必须在每个运行Java应用程序的客户端安装。

类型3:Java到专有网络协议 (JDBC-Network Bridge) JDBC网络桥驱动程序是个纯粹的Java客户程序库, 不再需要客户端数据库驱动程序。它使用跨数据库协议, 将数据库访问请求传输给服务器组件, 然后该服务器组件将访问请求转换成特定的数据库协议。它使用网络上的中间服务器来存取数据库。这种应用使得负载均衡、连接缓冲池和数据缓存等技术有了实现的可能, 很适合在Internet上使用。

类型4:Java到本地数据库协议 (Pure Java Driver) 该驱动程序是一个纯粹的Jav库, 用于将JDBC访问请求直接转换成特定数据库协议。这种类型通过使用一个纯Java驱动程序执行数据库的直接访问。Java驱动程序运行在客户端, 体系结构特别简单, 但相应的安全性和程序的逻辑性不好。

2、JDBC如何工作

在JDBC技术中, 程序员使用JDBC API将标准的SQL语句通过JDBC驱动管理器传递给相应的JDBC驱动, 并由该JDBC驱动传给所指定的数据库服务器, 这样就不必为访问不同数据库而分别编写不同的接口程序。JDBC-ODBC是利用现有的ODBC, 将JDBC翻译为ODBC的调用, 使Java应用可以访问所有支持ODBC的数据库。这种方法操作简单, 本文以此种驱动方法为例来说明利用JDBC如何访问数据库。JDBC API是实现JDBC标准支持数据库操作的类与方法的集合, 包括java.sql和javax.sql两个包。Java.sql包含了JDBC2.0核心API及JDBC3.0增加的部分。JDBC API的主要功能是:建立与一个数据源的连接;向数据源发送查询和更新语句;处理得到的结果。访问数据库的主要步骤如下:

(1) 加载JDBC驱动程序:JDBC的驱动管理器查找到相应的数据库驱动程序并加载。常用的方法是在程序中使用Class.for Name () 方法动态装载并注册数据库驱动, 在数据库的驱动程序加载后, 就可以建立与该数据库的连接了。

(2) 建立数据库连接:使数据库驱动连接到相应的数据库。常使用Driver Manager类的静态方法get Connection (String rul, String user, String password) 方法来完成。其中url是数据库连接串, 指定使用的数据库访问协议及数据源;user和password分别是建立数据库连接所使用的数据库用户名和口令。

(3) 执行SQL语句:在所建立的数据库连接上, 创建Statement对象, 将各种SQL语句发送到所连接的数据库执行。对于已创建的数据库连接对象, 调用create Statement () 方法, 就可得到一个Statement对象。

(4) 处理结果集:Result Set类的对象, 是保存SQL的SE-LECT语句返回的结果记录的表。结果集中通过游标控制具体记录的访问, 游标指向结果集中的当前记录。使用next () 方法使游标可以移到下一行, 并判断是否为最后一行, 如果是则返回False, 否则返回True。

(5) 关闭数据库连接:数据库操作完毕后, 要显式地关闭连接。先释放Statement对象, 再翻译连接对象。

3.JDBC的应用

以下通过建立一个学生数据库, 添加数据, 删除数据, 检索数据来说明JDBC数据库应用程序最常见的数据库操作。数据库结构为ACCESS格式, 数据库名为:Student, 表为:St, 字段为:姓名, 年龄, 成绩。建立的Ddbc数据源的名称为Student。

JDBC数据库应用程序设计步骤如下:

(1) 注册JDBC数据库驱动程序

(2) 建立数据库

建立应用程序与数据库的连接。

(3) 发送SQL语句, 对数据库进行操作

建立数据库:

插入数据:

Stmt.execute Update ("insert into student value ('张鹏', 23, 83) ") ;

Stmt.execute Update ("insert into student value ('李媛媛', 22, 92) ") ;

Stmt.execute Update ("insert into student value ('王磊', 21, 85) ") ;

删除数据:

Stmt.execute Update ("delete form student where name='张鹏'") ;

(4) 检索数据

(5) 关闭数据库

对数据库操作完成后, 需要关闭数据库。

Stmt.close () ;

Con.close () ;

4.结束语

在使用JDBC进行与数据库有关的应用开发中, 数据库连的管理是一个难点。采用数据库连接技术的系统在效率和稳性上比采用传统的其他方式的系统在性能和效率都有很大的高。本文着重阐述了Java数据库应用中jdbc的基本工作原理应用, 对开发高性能的数据库应用程序有一定的实用和参考价值。

参考文献

[1].李卓玲.Java程序设计实用教程 (第二版) [M].大连:大连理工大学出版社.2005

[2].郭广军, 陈代武等.基于JDBC的数据库访问技术的研究[J].南华大学学报 (自然科学版) .2005年6月, 第19卷 (2) 1673-0062

[3].飞思科技产品研发中心.Java2应用开发指南[M].北京:电子工业出版社.2002

JDBC数据库连接 篇6

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数据库连接 篇7

网格计算[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.

上一篇:产学研联合培养下一篇:推进精细化管理