达梦(DM)数据库创建 JDBC 数据源

MoMo 2021年6月14日18:27:32
评论
42

创建 JDBC 数据源

       JDBC   2.0               JDBC   2.0         

javax.sql.DataSource 接口来描述这个概念。如果用户希望建立一个数据库连接,通过查询在

JNDITM  服务中的数据源,可以从数据源中获取相应的数据库连接。这样用户就只需要提供

一个逻辑名称(Logic Name),而不是数据库登录的具体细节。

JNDITM 的全称是 Java  Naming  and Directory Interface  可以理解为 Java 名称和目录服

务接口。JNDI  向应用程序提供了一个查询和使用远程服务的机制。这些远程服务可以是任

何企业服务。对于 JDBC 应用程序来说,JNDI 提供的是数据库连接服务。JNDI 使应用程序

通过使用逻辑名称获取对象和对象提供的服务,从而使程序员可以避免使用与提供对象的机

构有关联的代码。

一个  DataSource  对象代表一个实际的数据源。在数据源中存储了所有建立数据库连接

的信息。系统管理员用一个逻辑名字对应  DataSource  对象,这个名字可以是任意的。在下

面的例子中 DataSource 对象的名字是 NativeDB。依照传统习惯, DataSource 对象的名字包含

 jdbc/下,所以这个数据源对象的完整名字是:jdbc/NativeDB

数据源的逻辑名字确定之后,就需要向 JNDI 服务注册该数据源。下面的代码展示了向

JNDI 服务注册数据源的过程。

//  初始化名称-目录服务环境

Context ctx = null;

try{

Hashtable env = new Hashtable (5);

env.put (Context.INITIAL_CONTEXT_FACTORY,

"com.sun.jndi.fscontext.RefFSContextFactory");

env.put (Context.PROVIDER_URL, "file:JNDI");

ctx = new InitialContext(env);

}

catch (NamingException ne)

{

ne.printStackTrace();

}

bind(ctx, "jdbc/NativeDB");

程序首先生成了一个   Context   实例。javax.naming.Context   接口定义了名称服务环境

(Naming  Context)及该环境支持的操作。名称服务环境实际上是由名称和对象间的相互映射

                                          (Context Factory)  

com.sun.jndi.fscontext.RefFSContextFactory(该类在 fscontext.jar 中可以找到,由于 fscontext.jar

中包含的不是标准的 API,用户需要从 www.javasoft.com 中的 JNDI 专区下载 fscontext.jar)

类,环境工厂的作用是生成名称服务环境的实例。javax.naming.spi.InitialContextFactory 接口

定义了环境工厂应该如何初始化名称服务环境(该接口在   providerutil.jar   中实现,由于

providerutil.jar 中包含的不是标准的 API,用户需要从 www.javasoft.com 中的 JNDI 专区下载

providerutil.jar)。在初始化名称服务环境时还需要定义环境的   URL。程序中使用的是

"file:JNDI",也就是把环境保存在本地硬盘的 JNDI 目录下。目前很多 J2EETM 应用服务器

都实现了自己的 JNDI 服务,用户可以选用这些服务包。

初始化了名称服务环境后,就可以把数据源实例注册到名称服务环境中。注册时调用

javax.naming.Context.bind()方法,参数为注册名称和注册对象。注册成功后,在  JNDI  目录

下会生成一个.binding 文件,该文件记录了当前名称-服务环境拥有的名称及对象。具体实现

如下例所示:

void bind (Context ctx, String ln)throws NamingException, SQLException

{

//  创建一个 DmdbDataSource 实例

DmdbDataSource dmds = new DmdbDataSource ();

//  把 DmdbDataSource 实例注册到 JNDI 中

ctx.bind (ln, dmds);

}

当需要在名称服务环境中查询一个对象时,需要调用  javax.naming.Context.lookup()

方法,并把查询到的对象显式转化为数据源对象。然后通过该数据源对象进行数据库操作。

DataSource ds = (DataSource) lookup (ctx, "jdbc/NativeDB");

Connection conn = ds.getConnection();

DataSource 对象中获得的 Connection 对象和用 DriverManager.getConnection 方法获得的

对象是等同的。由于 DataSource 方法具有很多优点,该方法成为获得连接的推荐方法。

https://xpanx.com/
MoMo
  • 本文由 发表于 2021年6月14日18:27:32
  • 转载请务必保留本文链接:https://xpanx.com/2953.html
 TongWeb 在企业级应用中的作用 东方通

 TongWeb 在企业级应用中的作用

  应用服务器 TongWeb v7 全面支持 JavaEE7 及部分 JavaEE8 规范,作为基础架 构软件,位于操作系统与应用之间,帮助企业将业务应用集成在一个基础平台上, 为应用高效...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: