- 浏览: 97243 次
- 性别:
- 来自: 广州
文章分类
最新评论
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如下:
在访问数量大,并发大大情况下,毫无疑问是要选择使用BasicDataSource连接池,因为有连接池的功能,无论是效率还是在资源利用率上都优于DriverManagerDataSource。
驱动管理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(); } } }
发表评论
-
Java类修饰符总结
2014-10-27 04:00 872java的修饰符有:权限修饰符:public、protecte ... -
Java的参数传递(值传递与引用传递)作为形参传入方法,是否会改变原值?
2014-10-25 15:15 3894public class Hello { public s ... -
Java JDBC调用MySQL的存储过程简单示例
2013-09-30 04:07 716package com.toby.mysql; impo ... -
[转]Hibernate的dynamic-insert dynamic-update和select-before-update
2013-05-16 16:04 1113http://blog.csdn.net/hsuxu/arti ... -
Java.net的ServerSocket与Socket
2012-12-01 16:48 3689ServerSocket类 ServerSocket ... -
ClassLoader的loadClass方法源码浅析
2012-11-20 15:46 1087protected synchronized Class& ... -
Call stack 与 Stack frame的概念
2012-11-17 16:36 6008Call stack(调用堆栈):调用堆栈是一个方 ... -
查找Proxy链中被代理的target对象 -《Javareflection in action》的例子
2012-11-15 16:37 0xxxxxx -
Class.class.isInstance(Object.class)
2012-11-05 10:43 876Class.class.isInstance(Object ... -
Class.class.isInstance(Class.class)
2012-11-03 17:15 850Class.class.isInstance(Class. ... -
Java关键字native,strictfp,transient,volatile
2012-11-02 15:53 0待续编辑它 -
关于创建JavaBean的小细节
2012-10-15 10:56 840例如创建一个User class 普通模式: sett ... -
Java运算符优先级整理
2012-09-22 16:49 797Java 中共有 54 种运算符,按优先级可以分为 14 级, ... -
float与double的位分配
2012-08-25 17:30 2006摘自网络:http://zhidao.baidu.com/qu ... -
JAVA移位
2012-08-22 10:07 0移位运算符就是在二进 ... -
Java常量和类变量
2012-07-26 12:03 0常量的优点 如果在程序中直接填写数字,程序的可读性将会变差,程 ...
相关推荐
java.sql和javax.sql两个包中的类与接口(天龙八部): DataSource:数据源 DriverManager:驱动管理 Driver:JDBC驱动 Connection:数据库连接 Statement:语句,执行SQL PrepareStatement:预编译语句,...
JDBC1.0是原来是用DriverManager类来产生一个对数据源的连接。JDBC2.0用一种替代的方法,使用DataSource的实现,代码变的更小巧精致,也更容易控制。
包含:教学视频、源代码(与博客同步)、SQL文件 一、介绍 二、JDBC常用的接口和类 2.1 Driver接口 2.2 DriverManager类 2.3 Connection接口 2.4 Statement接口 2.5 PreparedStatement接口 2.6 ResultSet接口 2.7 ...
JDBC-ODBC桥驱动实现与数据库的连接。 1>.JDBC驱动程序类型: <1>.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合于企业网或三层结构应用程序 <2>.本地API:需要驱动程序的二进制代码支持 <3>.JDBC网络纯java...
本教程将从传统的 JDBC 驱动程序和 DriverManager 对象开始,讨论 JVM 内部的 Java 应用程序如何发现数据库和怎样与其进行通讯。在几个说明四种不同类型的 JDBC 驱动程序的示例之后,本教程接下来会讨论使用 JNDI 的...
* 获得与数据库的连接 * * @param path * @return Connection */ public static Connection getConn(String classDriver, String url, String user, String pwd) { try { Class.forName(class...
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 小...
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 小...
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 小...
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 小...
在JDBC中,我们可以通过DriverManager.getConnection()创建(而不是获取)一个Connection,在完成CRUD之后,再去销毁该Connection。在并发量不高的情况下,创建销毁Connection所花费的时间和资源是可以接受,但是随着...
conn=DriverManager.getConnection("jdbc:odbc:contentreply1");//contentreply1此为ODBC数据源连 接刚取的名称 } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } ...
DataSource ds = DruidDataSourceFactory.createDataSource(pro); Connection conn = ds.getConnection(); System.out.println(conn); //测试获取超过最大连接数的连接数量(连接关闭、未关闭的情况) }
<property name="JDBC.ConnectionURL" value="jdbc:hsqldb:data/tutorial"/> <property name="JDBC.Username" value="sa"/> <property name="JDBC.Password" value=""/> </dataSource> ...
目标 Spring Data Spring MVC 原理及实现 Spring Data Spring 提供集成关系数据库、noSQL 数据库进行...JDBC 规范:java.sql 和 javax.sql 两个包中的类与接口 DataSource – 数据源 DriverManager – 驱动管理 Driv