JDBC:管理驱动、与数据库建立连接、执行SQL语句、处理结果
数据库连接池:程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
数据库连接池运行机制
1、从连接池获取或创建可用连接;
2、使用完毕之后,把连接返还给连接池;
3、在系统关闭前,断开所有连接并释放连接占用的系统资源;
4、还能够处理无效连接(原来登记为可用的连接,由于某种原因不再可用,如超时,通讯问题),并能够限制连接池中的连接总数不低于某个预定值和不超过某个预定值;
常用的数据库连接池
(1)JNDI(Java Naming and Directory Interface ):是SUN公司提供的一种标准的Java命名系统接口,是一组在Java应用中访问命名和目录服务的API。命名服务是将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,它提供了应用编程接口(application programming interface,API)和服务提供者接口(service provider interface,SPI)。这一点的真正含义是,要让应用与命名服务或目录服务交互,必须有这个服务的JNDI服务提供者,这正是JNDI SPI发挥作用的地方。服务提供者基本上是一组类,这些类为各种具体的命名和目录服务实现了JNDI接口—很象JDBC驱动为各种具体的数据库系统实现了JDBC接口一样。作为一个应用开发者,不必操心JNDI SPI。只需要确认要使用的每一个命名或目录服务都有服务提供者。
(2)C3P0:连接池作者是《星球大战》迷,C3P0就是其中的一个机器人,并且这个名称中包涵connection 和pool的单词字母。因此叫这个名字。
(3)DBCP(DataBase connection pool):是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar
<Context> <Resource name="jdbc/test" type="javax.sql.DataSource" username="root" password="root" driverClassName="com.mysql.jdbc.Driver" factory="org.apache.commons.dbcp.BasicDataSourceFactory" maxIdle="8" maxWait="5000" url="jdbc:mysql://localhost:3306/test" maxActive="15" initialSize="10"/> </Context>
<% try { InitialContext context=new InitialContext(); DataSource ds=(DataSource)context.lookup("java:/comp/env/jdbc/test"); Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); ResultSet set = stmt.executeQuery("SELECT id,name,age FROM user"); while(set.next()) { out.println(set.getString("name")); } BasicDataSource dbs=(BasicDataSource)ds; out.print(dbs.getNumIdle()+"<br>"); out.print(dbs.getNumActive()); } catch(NamingException e) { e.printStackTrace(); } catch(SQLException e) { e.printStackTrace(); } %>
<Resource auth="Container" description="DB Connection" driverClass="com.mysql.jdbc.Driver" maxPoolSize="10" minPoolSize="2" acquireIncrement="2" name="jdbc/mysqlDB" user="root" password="123123" factory="org.apache.naming.factory.BeanFactory" type="com.mchange.v2.c3p0.ComboPooledDataSource" jdbcUrl="jdbc:mysql://localhost:3306/mldn?autoReconnect=true" />
<Context> <ResourceLink name="jdbc/mysqlDB" global="jdbc/mysqlDB" type="javax.sql.DataSource"/> </Context>
<resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/mysqlDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
<% Connection conn=null; try { InitialContext ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysqlDB"); conn=ds.getConnection(); }catch(NamingException ex) { ex.printStackTrace(); } String sql="select * from user"; PreparedStatement ps=conn.prepareStatement(sql); ResultSet rs=ps.executeQuery(); while(rs.next()) { %> 字段1:<%=rs.getString(1)%> 字段2:<%=rs.getString(2)%><br /> <% } if(rs!=null) { rs.close(); rs=null; } if(ps!=null) { ps.close(); ps=null; } if(conn!=null) { conn.close(); conn=null; } %>
public class DBCPTest { private static BasicDataSource bds = null; private static ConnectionFactory cf = null; static{ bds = new BasicDataSource(); bds.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); bds.setUrl("jdbc:sqlserver://127.0.0.1:1433;databaseName=AjaxDb"); bds.setInitialSize(10); bds.setMaxActive(4); bds.setMaxWait(5000); bds.setUsername("sa"); bds.setPassword("Zzx198461"); cf = new DataSourceConnectionFactory(bds); } public static Connection getConnection() throws SQLException{ return cf.createConnection(); } public static void destroy() throws SQLException{ cf = null; bds.close(); bds = null; } public static void main(String[] args) throws Exception{ System.out.println(DBCPTest.getConnection()); } }
<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name=“JNDI名" auth="Container" type=“javax.sql.DataSource” username=“用户名” password=“密码" driverClassName=“驱动类" url=“数据连接字符串" maxActive="8" maxIdle="4"/> </Context>
<!– 声名工程所需资源--> <resource-ref> <!– JDNI资源名 --> <res-ref-name>connpool</res-ref-name> <!– 资源类型 --> <res-type>javax.sql.DataSource</res-type> <!– 资源范围 --> <res-auth>Container</res-auth> </resource-ref>
public class DBUtil { private DBUtil() { } public static Connection getConn() throws Exception { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) envCtx.lookup("connpool"); return ds.getConnection(); } }
<Context path="/YouWeb" docBase="F:\workspace\tea_forum\WebRoot"> <Resource name="jdbc/sqlserver" type="javax.sql.DataSource" driverClassName="sun.jdbc.odbc.JdbcOdbcDriver" maxIdle="2" maxWait="5000" username="sa" password="sa" url="jdbc:odbc:accp" maxActive="4"/> </Context>
<Resource name="jdbc/mssql" type="javax.sql.DataSource" driverClassName="sun.jdbc.odbc.JdbcOdbcDriver" maxIdle="2" maxWait="5000" username="sa" password="sa" url="jdbc:odbc:accp" maxActive="4"/>
<Context path="/testjndi1" docBase="F:\workspace\testpool\WebRoot" > <ResourceLink name="jdbc/mssql1" global="jdbc/mssql" type="javax.sql.DataSource"/> </Context> <Context path="/testjndi2" docBase="F:\workspace\testpool2\WebRoot"> <ResourceLink name="jdbc/sqlserver2" global="jdbc/mssql" type="javax.sql.DataSource"/> </Context>
<!--注意:res-ref-name节点里的名字要与上面的Resource节点里的name要一致。名字可以任意取,但一定要一致。--> <resource-ref> <res-ref-name>jdbc/sqlserver</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
<% try{ Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) envCtx.lookup("jdbc/sqlserver"); Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from test"); while (rs.next()) {%> <br><%=rs.getString(1)%> <%} out.print("<br>Successful!成功!!\n");%> <% rs.close(); stmt.close(); conn.close(); } catch (Exception e) { out.print("出现例外!" + e.getMessage()); e.printStackTrace(); }
<Context> <Resource name="jdbc/sqlserver" type="javax.sql.DataSource" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;databaseName=zf" username="sa" password="sa" /> </Context>
InitialContext ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/server"); Connection conn = ds.getConnection();
相关推荐
对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 在较为完备的数据库连接池实现中,可根据...
* 数据库连接池特点: * 获取连接时不需要了解连接的名字,连接池内部维护连接的名字 * 支持多线程,保证获取到的连接一定是没有被其他线程正在使用 * 按需创建连接,可以创建多个连接,可以控制连接的数量 * 连接...
C# 数据库连接池 C# 数据库连接池 C# 数据库连接池 C# 数据库连接池
context.xml, 数据库连接池配置文
C#高效数据库连接池源码
达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,
这个文档详细讲述了mysql数据库连接池的配置以及数据库连接池的工作原理。
数据库连接池的例子.doc数据库连接池的例子.doc数据库连接池的例子.doc
Druid为监控而生的数据库连接池,它是阿里巴巴开源平台上的一个项目。Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能.它可以替换DBCP和C3P0连接池。Druid提供了一个高效、功能强大、可...
提供了数据库连接池的驱动,分别有c3p0、druid、dbcp三种数据库连接池的驱动
Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置...
比较实用的几种数据库连接池详细配置,值得收藏
数据库连接池 数据库连接池 数据库连接池 数据库连接池
c#语言下,使用netcore2.1框架,调用netstandard数据库连接池组件
包含了连接数据库连接池所需的大部分jar包
数据库连接池DBCPjar包,数据库连接时.我们要是用到了数据库连接池,你需要的
java开发,数据库连接池c3p0所需jar包。
JAVA 使用数据库连接池连接Oracle数据库,全代码,附加详细说明
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接, 当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。 我们可以通过设定连接池最大连接数...
数据库连接池的基础学习,针对mysql数据库的数据库连接池在java中的具体实现及应用配置