- 浏览: 99387 次
- 性别:
- 来自: 广州
文章分类
最新评论
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 914java的修饰符有:权限修饰符:public、protecte ... -
Java的参数传递(值传递与引用传递)作为形参传入方法,是否会改变原值?
2014-10-25 15:15 3970public class Hello { public s ... -
Java JDBC调用MySQL的存储过程简单示例
2013-09-30 04:07 754package com.toby.mysql; impo ... -
[转]Hibernate的dynamic-insert dynamic-update和select-before-update
2013-05-16 16:04 1160http://blog.csdn.net/hsuxu/arti ... -
Java.net的ServerSocket与Socket
2012-12-01 16:48 3725ServerSocket类 ServerSocket ... -
ClassLoader的loadClass方法源码浅析
2012-11-20 15:46 1128protected synchronized Class& ... -
Call stack 与 Stack frame的概念
2012-11-17 16:36 6060Call stack(调用堆栈):调用堆栈是一个方 ... -
查找Proxy链中被代理的target对象 -《Javareflection in action》的例子
2012-11-15 16:37 0xxxxxx -
Class.class.isInstance(Object.class)
2012-11-05 10:43 921Class.class.isInstance(Object ... -
Class.class.isInstance(Class.class)
2012-11-03 17:15 892Class.class.isInstance(Class. ... -
Java关键字native,strictfp,transient,volatile
2012-11-02 15:53 0待续编辑它 -
关于创建JavaBean的小细节
2012-10-15 10:56 866例如创建一个User class 普通模式: sett ... -
Java运算符优先级整理
2012-09-22 16:49 832Java 中共有 54 种运算符,按优先级可以分为 14 级, ... -
float与double的位分配
2012-08-25 17:30 2059摘自网络:http://zhidao.baidu.com/qu ... -
JAVA移位
2012-08-22 10:07 0移位运算符就是在二进 ... -
Java常量和类变量
2012-07-26 12:03 0常量的优点 如果在程序中直接填写数字,程序的可读性将会变差,程 ...
相关推荐
相比于传统的JDBC通过 `Class.forName()` 和 `DriverManager.getConnection()` 获取连接的方式,`DataSource`提供了更高效、更灵活的连接管理机制。这是因为`DataSource`支持连接池技术,可以复用已存在的数据库连接...
下面我们将深入探讨JDBC、`DriverManager`以及`registerDriver`方法的工作原理。 **JDBC**(Java Database Connectivity)是Java语言中用于与各种类型的数据库交互的一套标准API。它为开发者提供了一种统一的接口,...
Spring Data JDBC与JDBC是两种不同的数据库访问方式,它们在Java开发中有着广泛的应用。JDBC(Java Database Connectivity)是Java平台的标准API,用于与各种数据库进行交互。它提供了低级别的数据库操作,如建立...
下面的代码片段示例了如何用JNDI上下文获得一个DataSource对象,然后如何用DataSource对象产生一个与数据源的连接: Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("jdbc/...
Java JDBC(Java ...通过这些代码,你可以深入理解JDBC的工作原理以及如何在实际项目中使用它。对于初学者来说,这是一个很好的学习资源,而对于有经验的开发者,这些示例可以帮助他们快速实现数据库相关的功能。
JDBC驱动的工作原理是:首先通过`Class.forName()`方法加载对应的JDBC驱动类,然后使用`DriverManager.getConnection()`方法建立与数据库的连接。连接字符串中包含了数据库服务器的地址、端口号、数据库名称以及用户...
**JDBC(Java Database Connectivity)**是Java编程语言中用于规范客户端程序如何访问数据库的应用程序接口,它提供了标准的API让Java程序员能够连接到不同类型的数据库系统,进行数据的增删改查操作,以及事务处理...
包含:教学视频、源代码(与博客同步)、SQL文件 一、介绍 二、JDBC常用的接口和类 2.1 Driver接口 2.2 DriverManager类 2.3 Connection接口 2.4 Statement接口 2.5 PreparedStatement接口 2.6 ResultSet接口 2.7 ...
JDBC是Java平台的标准接口,它允许Java程序与各种类型的数据库进行通信。在Java中,我们使用`java.sql.DriverManager`类来管理数据库连接。以下是一个简单的示例,展示如何建立到MySQL数据库的连接: ```java ...
JDBC使得Java开发者能够编写可移植的数据库应用程序,无需针对不同数据库系统编写不同的代码。JDBC的核心是一系列接口和类,它们允许Java程序执行SQL语句、建立和管理数据库连接,以及处理查询结果。 **1. JDBC的...
标题中的“JDBC代码题.docx”显然与Java数据库连接(JDBC)有关,这是一个用于在Java应用程序中访问和操作数据库的关键技术。描述提到了jdbc工具类的创建和数据源的改革,暗示我们需要讨论JDBC工具类的实现以及数据...
总结来说,这个基于命令行的JDBC示例展示了如何在Java中与数据库进行交互,包括使用JDBC API的基础操作,以及利用Druid和C3P0数据源提升性能和管理效率。此外,通过引入Apache Commons DBUtils,我们可以编写更简洁...
### JDBC讲义文档知识点详解 #### 一、JDBC概念及意义 JDBC(Java Database Connectivity)是由Sun Microsystems提供的...JDBC不仅简化了Java应用程序与数据库的交互过程,还大大提高了代码的可维护性和可扩展性。
2. 创建连接:`Connection conn = DriverManager.getConnection("jdbc:odbc:datasource_name")` 在以上所有连接过程中,`hostname`是数据库服务器的IP地址或域名,`port`是数据库监听的端口号,`dbname`是数据库名...
2. Type 2(部分Java驱动):这种驱动是半Java半本地代码实现,Java部分处理JDBC调用,而本地代码处理与特定数据库的通信。 3. Type 3(网络协议驱动):完全用Java编写,通过中间服务器处理数据库的特定协议,提供...
在Java编程中,JDBC(Java Database Connectivity)是Java应用程序与各种数据库进行交互的标准接口。JDBC提供了一组API,允许开发人员执行SQL语句、处理结果集以及管理数据库连接。下面将详细介绍JDBC连接模板的基本...
在上述代码中,`Class.forName()`方法加载Oracle JDBC驱动,`DriverManager.getConnection()`用于创建数据库连接。`hostname`、`port`和`service_name`需替换为实际的数据库服务器信息。 Oracle JDBC还支持高级特性...
首先,JDBC是Java平台的标准接口,它允许Java应用程序通过Java代码与各种类型的数据库进行通信。JDBC驱动程序是实现这些接口的具体类库,它们负责将Java调用转换为特定数据库系统能理解的命令。 sqljdbc.jar是SQL ...
理解JDBC的工作原理、API以及如何编写基本的应用程序是Java开发人员必备的技能之一。通过上述介绍,我们可以看到JDBC不仅支持简单的数据库操作,还提供了高级特性如预编译的Statement,以满足更复杂的应用需求。
本文将详细阐述sqljdbc4.jar的用途、功能以及使用方法,帮助开发者更好地理解和运用这一依赖包。 一、sqljdbc4.jar概述 sqljdbc4.jar是Microsoft为Java开发者提供的一款JDBC 4.0兼容的驱动程序,它实现了Java.sql...