`

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


分享到:
评论

相关推荐

    Spring Data JDBC与JDBC的区别

     java.sql和javax.sql两个包中的类与接口(天龙八部):  DataSource:数据源  DriverManager:驱动管理  Driver:JDBC驱动  Connection:数据库连接  Statement:语句,执行SQL  PrepareStatement:预编译语句,...

    DataSource接口介绍与使用

    JDBC1.0是原来是用DriverManager类来产生一个对数据源的连接。JDBC2.0用一种替代的方法,使用DataSource的实现,代码变的更小巧精致,也更容易控制。

    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 ...

    JDBC详解HTML-JDBC.pp

    JDBC-ODBC桥驱动实现与数据库的连接。 1&gt;.JDBC驱动程序类型: &lt;1&gt;.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合于企业网或三层结构应用程序 &lt;2&gt;.本地API:需要驱动程序的二进制代码支持 &lt;3&gt;.JDBC网络纯java...

    jdbc学习全程

    本教程将从传统的 JDBC 驱动程序和 DriverManager 对象开始,讨论 JVM 内部的 Java 应用程序如何发现数据库和怎样与其进行通讯。在几个说明四种不同类型的 JDBC 驱动程序的示例之后,本教程接下来会讨论使用 JNDI 的...

    java连接数据库工具类--DBConnection(java源码)

    * 获得与数据库的连接 * * @param path * @return Connection */ public static Connection getConn(String classDriver, String url, String user, String pwd) { try { Class.forName(class...

    Java数据库编程宝典2

    7.8 JDBC代码 7.9 小结 第8章 组织查询结果和使用索引 8.1 使用ORDER BY对查询结果进行排序 8.2 GROUP BY子句 8.3 聚合函数 8.4 使用HAVING子句筛选组 8.5 使用索引来提高SQL查询的性能 8.6 视图 8.7 小...

    Java数据库编程宝典4

    7.8 JDBC代码 7.9 小结 第8章 组织查询结果和使用索引 8.1 使用ORDER BY对查询结果进行排序 8.2 GROUP BY子句 8.3 聚合函数 8.4 使用HAVING子句筛选组 8.5 使用索引来提高SQL查询的性能 8.6 视图 8.7 小...

    Java数据库编程宝典1

    7.8 JDBC代码 7.9 小结 第8章 组织查询结果和使用索引 8.1 使用ORDER BY对查询结果进行排序 8.2 GROUP BY子句 8.3 聚合函数 8.4 使用HAVING子句筛选组 8.5 使用索引来提高SQL查询的性能 8.6 视图 8.7 小...

    Java数据库编程宝典3

    7.8 JDBC代码 7.9 小结 第8章 组织查询结果和使用索引 8.1 使用ORDER BY对查询结果进行排序 8.2 GROUP BY子句 8.3 聚合函数 8.4 使用HAVING子句筛选组 8.5 使用索引来提高SQL查询的性能 8.6 视图 8.7 小...

    guobin:Guobin DataSource

    在JDBC中,我们可以通过DriverManager.getConnection()创建(而不是获取)一个Connection,在完成CRUD之后,再去销毁该Connection。在并发量不高的情况下,创建销毁Connection所花费的时间和资源是可以接受,但是随着...

    配置MSSQL数据源连接步骤

    conn=DriverManager.getConnection("jdbc:odbc:contentreply1");//contentreply1此为ODBC数据源连 接刚取的名称 } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } ...

    JDBC中连接MySQL需要的jar包,包括Druid(德鲁伊)数据源

    DataSource ds = DruidDataSourceFactory.createDataSource(pro); Connection conn = ds.getConnection(); System.out.println(conn); //测试获取超过最大连接数的连接数量(连接关闭、未关闭的情况) }

    iBatis-设置缓存模式-Java源码(下载)

    &lt;property name="JDBC.ConnectionURL" value="jdbc:hsqldb:data/tutorial"/&gt; &lt;property name="JDBC.Username" value="sa"/&gt; &lt;property name="JDBC.Password" value=""/&gt; &lt;/dataSource&gt; ...

    Spring Data与Spring MVC的基础知识

    目标 Spring Data Spring MVC 原理及实现 Spring Data Spring 提供集成关系数据库、noSQL 数据库进行...JDBC 规范:java.sql 和 javax.sql 两个包中的类与接口 DataSource – 数据源 DriverManager – 驱动管理 Driv

Global site tag (gtag.js) - Google Analytics