例4:通过数据源获得连接

原创 2012年03月21日 10:41:05

使用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());
		}
	}
}


阿里Druid数据源的使用

一、使用这个数据源能为我们带来哪些好处! 1、作为一个数据源本身应该具备的功能先不说,据阿里自测,该数据源性能高于其它的开源数据源,如DBCP、C3P0、Proxool、JBoss等。对比指标是LR...
  • iverson3sod
  • iverson3sod
  • 2015年06月09日 14:52
  • 3548

spring4+mybatis3多数据源配置

使用springAOP方式进行数据源的切换。 细节见配置: DataSourceAspect.java import java.lang.reflect.Method; impo...
  • ilyjiangnan
  • ilyjiangnan
  • 2016年11月28日 11:40
  • 1187

为什么要配置数据源ODBC

1.敲完学生和机房后,只知道配置ODBC数据源是为了连接vb与SQL 实现vb与数据库的完美交互,那么为什么要配置ODBC那: 主要是方便管理 1 你肯定要链接数据库 2 那么你肯定要用户名和密码 ...
  • wrs120
  • wrs120
  • 2016年08月18日 13:35
  • 2944

DBCP数据源使用

DBCP:DataBase Connection Pool 1、需要的jar:commons-dbcp.jar  commons-pool.jar 2、把DBCP的配置文件(dbcpconfig.pr...
  • liang5630
  • liang5630
  • 2014年09月04日 16:36
  • 4482

JavaWeb:Tomcat下配置数据源(JNDI)连接数据库

习惯了以硬编码的形式在程序中建立数据库连接,用完就在finally语句块中close一下就结束了。对于重视数据库连接数的应用来说,这样子做会耗费大量的时间和数据库资源,而且硬编码的形式也不甚灵活。 ...
  • jdfkldjlkjdl
  • jdfkldjlkjdl
  • 2014年10月29日 20:09
  • 1671

使用MySQL的jdbcutils配置多个数据源

框架的诞生使得原始的jdbc用得越来越少,在项目中有时候还是会不得不使用jdbc来连接数据库进行操作,毕竟jdbc的性能还是很客观的,原始jdbc在代码中一步一步打开连接,操作数据源,执行sql,获取...
  • chengyabingfeiqi
  • chengyabingfeiqi
  • 2015年09月11日 12:57
  • 38133

C3P0数据源和Tomcat jdbc数据源的基本配置

在项目中我们经常需要使用数据源,数据源存储所有建立数据库连接的信息。就象通过指定文件名你可以在文件系统中找到文件一样,通过提供正确的数据源名称,你可以找到相应的数据库连接。下面分别对C3P0数据源和T...
  • leox_2012
  • leox_2012
  • 2013年12月11日 12:01
  • 1760

java 数据源测试

1.创建类TestDAO,封装统一的查询方法 : import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQL...
  • u011569116
  • u011569116
  • 2015年04月30日 15:53
  • 286

Spring配置数据源的三种方式 (JNDI\C3PO)

Spring配置数据源的三种方式 文章分类:Java编程 1,使用org.springframework.jdbc.datasource.DriverManagerDataSource 说明...
  • qq_24273557
  • qq_24273557
  • 2017年04月13日 14:26
  • 497

以一个简单的数据库表为例来展示创建全局/局部数据源和连接池的配置与测试

讲述如何创建java的jdbc mysql连接池
  • Mlong54
  • Mlong54
  • 2016年06月05日 14:50
  • 1208
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:例4:通过数据源获得连接
举报原因:
原因补充:

(最多只允许输入30个字)