博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
例4:通过数据源获得连接
阅读量:3673 次
发布时间:2019-05-21

本文共 3610 字,大约阅读时间需要 12 分钟。

使用JDBC API的一个主要好处就是独立于数据库的编程,因为大部分JDBC应用程序都可以被轻易地转换到不同的数据库。然而,仍然有两个主要的内容与特定的数据库有关,即JDBC Driver类和JDBC URL。

随着JDBC API的升级,数据源技术的引入,可以提高数据库访问的灵活性。本质上,DataSource对象表示一个特殊的数据源。除了将数据库和专门的JDBC驱动程序信息封装到一个单独的,标准化的对象中之外,数据源可以作为Connection工厂,并为设置和获取DataSource对象进行成功操作所需要的特定属性提供方法。DataSource对象可能需要的一些标准属性包括:

n databaseName

n serverName

n portNumber

n username

n password

使用数据源的另一个好处就是和安全有关的敏感信息,如用户名,密码甚至数据库服务器只在一处编码,这可以由系统管理员完成。虽然和DataSource对象的交互可以用图形应用程序完成,但真正看到运行的示例是有指导性的。虽然DataSource对象的概念很简单,但为了在Java应用程序中使用,DataSource对象是使用Java名称和目录接口(JNDI)来引用的。

下面首先介绍下JNDI的相关概念。JNDI是个JAVA API,它包括名称和目录服务器的概念,道理和JDBC与数据库进行通讯的概念差不多。如:硬盘通过与磁道和扇区打交道工作,但用户只关心文件名和目录,文件系统管理名称服务,该服务将给定的文件名和硬盘上特定的位置相关联。另一个简单的示例就是Web,多数用户只关心Web站点的名称,如www.5itjob.com,并不关心底层的IP地址。然而,TCP/IP通讯是通过使用IP地址,而不是人类能看懂的名称进行的。两个表示法之间的转换是通过DNS(域名系统,Domain Name System)完成的。虽然JNDI用自己的方式提供了一个丰富和有用的API,我们的需求却简单得多。简短地说,我们需要知道怎样做四件事:

n 创建名称并将其绑定到一个Java对象

n 查询名称以检索Java对象

n 删除一个名称

n 重新绑定名称到一个新的Java对象

首先要先加载数据源的驱动程序。让环境变量classpath指向下面几个jar文件

2,代码如下:     

import java.util.Hashtable;import javax.naming.*;import javax.naming.directory.*;import java.sql.*;import javax.sql.*;import com.microsoft.jdbcx.sqlserver.SQLServerDataSource;public class JNDIServer {	// First we define the relevant parameters for this datasource	private String serverName = "192.168.0.1";	private int portNumber = 1433;	private String login = "student";	private String password = "student";	private String databaseName = "mydb";	private String filePath = "jdbc/mydatasource";	public JNDIServer() {		Hashtable env = new Hashtable();		env.put(Context.INITIAL_CONTEXT_FACTORY,				"com.sun.jndi.fscontext.RefFSContextFactory");		try {			// 创建初始化上下文环境			Context ctx = new InitialContext(env);			// 如果filePath已经绑定过了,那么先解除绑定			ctx.unbind(filePath);			// 创建SQLServerDataSource			SQLServerDataSource ds = new SQLServerDataSource();			// 设置数据源的参数			ds.setServerName(serverName);			ds.setPortNumber(portNumber);			ds.setDatabaseName(databaseName);			ds.setUser(login);			ds.setPassword(password);			ds.setDescription("JDBC DataSource Connection");			// 绑定 JDBC 数据源			ctx.bind(filePath, ds);			ctx.close();			System.out.println("DataSource Created Success!");		} catch (Exception e) {			e.printStackTrace();		}	}	public static void main(String args[]) {		new JNDIServer();	}}

运行成功后,会在控制台打印:DataSource Created Success!

同时在运行该类所在的磁盘根目录下生成".bindings"文件,如下图:

数据源创建好之后,下面开始使用数据源。

代码如下:

import java.util.Hashtable;import javax.naming.*;import java.sql.*;import javax.sql.*;public class UseJNDI {	public static void main(String args[]) {		Connection con = null;				try {			Hashtable env = new Hashtable();			env.put(Context.INITIAL_CONTEXT_FACTORY,					"com.sun.jndi.fscontext.RefFSContextFactory");			Context ctx = new InitialContext(env);			// 获得数据源对象			DataSource ds =				(DataSource) ctx.lookup("jdbc/mydatasource");			// 通过数据源对象获得一个连接			con = ds.getConnection();			// 如果连接不成功,就会出现异常,不会执行下面这个语句			System.out.println("connect success!");		} catch (Exception e) {			e.printStackTrace();		} finally {			try {				if (con != null)// 用完连接后,要关闭释放					con.close();			} catch (Exception e) {				e.printStackTrace();			}		}	}

下面是删除JNDI的引用的代码:

import java.util.Hashtable;import javax.naming.*;import java.sql.*;import javax.sql.*;public class DeleteJNDI {	public static void main(String[] args) {		Hashtable env = new Hashtable();		env.put(Context.INITIAL_CONTEXT_FACTORY,				"com.sun.jndi.fscontext.RefFSContextFactory");		try {			Context ctx = new InitialContext(env);			ctx.unbind("jdbc/pubs");			ctx.close();			System.out.println("delete succeed!");		} catch (Exception ex) {			System.err.println("ERROR: " + ex.getMessage());		}	}}

转载地址:http://vzpbn.baihongyu.com/

你可能感兴趣的文章
Java重要知识点——方法的定义
查看>>
LinkedHashSet的使用
查看>>
JUC - 线程池:
查看>>
JUC - Java8流式编程
查看>>
JavaWeb框架 - Spring注解部分:
查看>>
SpringBoot使用外部的Tomcat: bean with name 'defaultValidator' defined in class path resource
查看>>
SpringBoot上传文件413问题:
查看>>
Java多线程 - AQS简单实现:
查看>>
建造者模式:
查看>>
适配器模式:
查看>>
美团Java一面面经
查看>>
疏漏总结(九)——http与https
查看>>
疏漏总结(十)
查看>>
线程池
查看>>
servlet的其他作用,git的使用方法
查看>>
Oracle数据库sql*plus常用命令
查看>>
Oracle中表的简单查询
查看>>
Linux-进程管理
查看>>
Linux-ssh服务及服务管理、文件传输
查看>>
Linux-网络配置
查看>>