`

DriverManager与DataSource的区别以及JDBC测试代码

    博客分类:
  • Java
 
阅读更多
DriverManager与DataSource  连接数据库有何区别?
        DriverManager传统的jdbc连接,通过Class.forName("XXX"),的办法注册之后,就可以DriverManager.getConnection()获得连接了。
        DataSource是建立在JNDI服务基础上的,需要application server配置datasource.首先需要注册一个DataSource(一般在/META-INF/context.xml下)然后在web.xml文件中引用这个DataSource,就可以DataSource.getConnection()获得连接,具体操作参考(tomcat目录里的JNDI Resources小节)

DataSource 与 DBCP pool(连接池) 的区别?
        J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
相当于是优化了DataSource的一种工具

在spring里配置DataSource例子,xml如下:

<bean id="propertyConfigurer"   
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
<!--PropertyPlaceholderConfigurer类来读取xxx.properties配置文件信息,以key和value的形式-->  
<property name="locations">  
    <list>  
        <value>  
          /WEB-INF/classes/config/pkm/environment/jdbc.properties  
        </value>  
        <value>  
          <!--多个xxx.properties文件-->  
        </value>  
    </list>  
</property>  
</bean>  
  
<!--事实上是因为DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用-->  
<!--两种不同的DataSource-->  
<!--单纯的DataSource-->  
<bean id="pkmDataSource"   
class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
    <property name="driverClassName">  
        <value>${pkm.jdbc.driverClassName}</value>  
        <!--${pkm.jdbc.driverClassName}是jdbc.properties文件 中的key-->  
    </property>  
    <property name="url">  
        <value>${pkm.jdbc.url}</value>  
    </property>  
    <property name="username">  
        <value>${pkm.jdbc.username}</value>  
    </property>  
    <property name="password">  
        <value>${pkm.jdbc.password}</value>  
    </property>  
</bean>  
  
<!--连接池-->  
<bean id="pkmDataSource"   
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" lazy-init="false">  
    <property name="driverClassName" value="${pkm.jdbc.driverClassName}"/>  
    <property name="url" value="${pkm.jdbc.url}"/>  
    <property name="username" value="${pkm.jdbc.username}"/>  
    <property name="password" value="${pkm.jdbc.password}"/>  
    <property name="initialSize" value="5"/>  
    <property name="maxActive" value="10"/>  
    <property name="maxWait" value="60000"/>  
    <property name="poolPreparedStatements" value="true"/>    
</bean>  

在访问数量大,并发大大情况下,毫无疑问是要选择使用BasicDataSource连接池,因为有连接池的功能,无论是效率还是在资源利用率上都优于DriverManagerDataSource。


驱动管理DriverManager
public class JDBCTest {
    public static void main(String[] args) {
        String driver = "com.mysql.jdbc.Driver";
        String dbName = "spring";
        String passwrod = "root";
        String userName = "root";
        String url = "jdbc:mysql://localhost:3308/" + dbName;
        String sql = "select * from users";
 
        try {
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url, userName,
                    passwrod);
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println("id : " + rs.getInt(1) + " name : "
                        + rs.getString(2) + " password : " + rs.getString(3));
            }
 
            // 关闭记录集
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
            // 关闭声明
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
            // 关闭链接对象
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}



数据源DataSource
		Context context = null;
		Connection conn = null;
		DataSource ds = null;
		Statement stat = null;
		ResultSet rs = null;
		try{
			 context = new InitialContext();
			 ds = (DataSource)context.lookup("");
			 conn = ds.getConnection();
			 stat = conn.createStatement();
			 rs = stat.executeQuery("");
			 while(rs.next()){
				 rs.getInt(0);
			 } 
		} catch(NamingException e){
			e.printStackTrace();
		} catch(SQLException e){
			e.printStackTrace();
		} finally{
			try{
				rs.close();
				stat.close();
				context.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} catch (NamingException e) {
				e.printStackTrace();
			}
		}
	}


分享到:
评论

相关推荐

    JDBC数据源(DataSource)的简单实现

    相比于传统的JDBC通过 `Class.forName()` 和 `DriverManager.getConnection()` 获取连接的方式,`DataSource`提供了更高效、更灵活的连接管理机制。这是因为`DataSource`支持连接池技术,可以复用已存在的数据库连接...

    JDBC DriverManager.registerDriver(new Driver());

    下面我们将深入探讨JDBC、`DriverManager`以及`registerDriver`方法的工作原理。 **JDBC**(Java Database Connectivity)是Java语言中用于与各种类型的数据库交互的一套标准API。它为开发者提供了一种统一的接口,...

    Spring Data JDBC与JDBC的区别

    Spring Data JDBC与JDBC是两种不同的数据库访问方式,它们在Java开发中有着广泛的应用。JDBC(Java Database Connectivity)是Java平台的标准API,用于与各种数据库进行交互。它提供了低级别的数据库操作,如建立...

    DataSource接口介绍与使用

    下面的代码片段示例了如何用JNDI上下文获得一个DataSource对象,然后如何用DataSource对象产生一个与数据源的连接: Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/...

    jdbc相关程序代码

    Java JDBC(Java ...通过这些代码,你可以深入理解JDBC的工作原理以及如何在实际项目中使用它。对于初学者来说,这是一个很好的学习资源,而对于有经验的开发者,这些示例可以帮助他们快速实现数据库相关的功能。

    JDBC汇总 包含sql oracle的jdbc代码

    JDBC驱动的工作原理是:首先通过`Class.forName()`方法加载对应的JDBC驱动类,然后使用`DriverManager.getConnection()`方法建立与数据库的连接。连接字符串中包含了数据库服务器的地址、端口号、数据库名称以及用户...

    jdbc课件以及源代码(数据源)

    **JDBC(Java Database Connectivity)**是Java编程语言中用于规范客户端程序如何访问数据库的应用程序接口,它提供了标准的API让Java程序员能够连接到不同类型的数据库系统,进行数据的增删改查操作,以及事务处理...

    JDBC(powernode CD2206)详尽版 (教学视频、源代码、SQL文件)

    包含:教学视频、源代码(与博客同步)、SQL文件 一、介绍 二、JDBC常用的接口和类 2.1 Driver接口 2.2 DriverManager类 2.3 Connection接口 2.4 Statement接口 2.5 PreparedStatement接口 2.6 ResultSet接口 2.7 ...

    java 测试数据库是否联通

    JDBC是Java平台的标准接口,它允许Java程序与各种类型的数据库进行通信。在Java中,我们使用`java.sql.DriverManager`类来管理数据库连接。以下是一个简单的示例,展示如何建立到MySQL数据库的连接: ```java ...

    Java jdbc

    JDBC使得Java开发者能够编写可移植的数据库应用程序,无需针对不同数据库系统编写不同的代码。JDBC的核心是一系列接口和类,它们允许Java程序执行SQL语句、建立和管理数据库连接,以及处理查询结果。 **1. JDBC的...

    JDBC代码题.docx

    标题中的“JDBC代码题.docx”显然与Java数据库连接(JDBC)有关,这是一个用于在Java应用程序中访问和操作数据库的关键技术。描述提到了jdbc工具类的创建和数据源的改革,暗示我们需要讨论JDBC工具类的实现以及数据...

    基于命令行的JDBC基本操作示例

    总结来说,这个基于命令行的JDBC示例展示了如何在Java中与数据库进行交互,包括使用JDBC API的基础操作,以及利用Druid和C3P0数据源提升性能和管理效率。此外,通过引入Apache Commons DBUtils,我们可以编写更简洁...

    JDBC讲义文档

    ### JDBC讲义文档知识点详解 #### 一、JDBC概念及意义 JDBC(Java Database Connectivity)是由Sun Microsystems提供的...JDBC不仅简化了Java应用程序与数据库的交互过程,还大大提高了代码的可维护性和可扩展性。

    jdbc连接各种数据库

    2. 创建连接:`Connection conn = DriverManager.getConnection("jdbc:odbc:datasource_name")` 在以上所有连接过程中,`hostname`是数据库服务器的IP地址或域名,`port`是数据库监听的端口号,`dbname`是数据库名...

    sqljdbc jdbc

    2. Type 2(部分Java驱动):这种驱动是半Java半本地代码实现,Java部分处理JDBC调用,而本地代码处理与特定数据库的通信。 3. Type 3(网络协议驱动):完全用Java编写,通过中间服务器处理数据库的特定协议,提供...

    jdbc连接模板-代码

    在Java编程中,JDBC(Java Database Connectivity)是Java应用程序与各种数据库进行交互的标准接口。JDBC提供了一组API,允许开发人员执行SQL语句、处理结果集以及管理数据库连接。下面将详细介绍JDBC连接模板的基本...

    oracle jdbc jar包

    在上述代码中,`Class.forName()`方法加载Oracle JDBC驱动,`DriverManager.getConnection()`用于创建数据库连接。`hostname`、`port`和`service_name`需替换为实际的数据库服务器信息。 Oracle JDBC还支持高级特性...

    sqlserver连接驱动包[sqljdbc.jar/sqljdbc4.jar]

    首先,JDBC是Java平台的标准接口,它允许Java应用程序通过Java代码与各种类型的数据库进行通信。JDBC驱动程序是实现这些接口的具体类库,它们负责将Java调用转换为特定数据库系统能理解的命令。 sqljdbc.jar是SQL ...

    jdbc资料jdbc资料jdbc资料pdf

    理解JDBC的工作原理、API以及如何编写基本的应用程序是Java开发人员必备的技能之一。通过上述介绍,我们可以看到JDBC不仅支持简单的数据库操作,还提供了高级特性如预编译的Statement,以满足更复杂的应用需求。

    sqljdbc4.jar依赖包

    本文将详细阐述sqljdbc4.jar的用途、功能以及使用方法,帮助开发者更好地理解和运用这一依赖包。 一、sqljdbc4.jar概述 sqljdbc4.jar是Microsoft为Java开发者提供的一款JDBC 4.0兼容的驱动程序,它实现了Java.sql...

Global site tag (gtag.js) - Google Analytics