数据库连接池的选择及其开发配置

转载自  数据库连接池的选择及其开发配置

一、数据库连接池概述

数据库连接的建立是一种耗时、性能低、代价高的操作,频繁的数据库连接的建立和关闭极大的影响了系统的性能。数据库连接池是系统初始化过程中创建一定数量的数据库连接放于连接池中,当程序需要访问数据库时,不再建立一个新的连接,而是从连接池中取出一个已建立的空闲连接,使用完毕后,程序将连接归还到连接池中,供其他请求使用,从而实现的资源的共享,连接的建立、断开都由连接池自身来管理。

数据库连接池为系统的运行带来了以下优势:昂贵的数据库连接资源得到重用;减少了数据库连接建立和释放的时间开销,提高了系统响应速度;统一的数据库连接管理,避免了连接资源的泄露。

数据库连接池运行机制:

系统初始化时创建连接池,程序操作数据库时从连接池中获取空闲连接,程序使用完毕将连接归还到连接池中,系统退出时,断开所有数据库连接并释放内存资源。

二、主流数据库连接池比较

常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid等

1、C3p0: 

开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。单线程,性能较差,适用于小型系统,代码600KB左右。

2、DBCP

DBCP (Database Connection Pool):由Apache开发的一个Java数据库连接池项目, Jakarta commons-pool对象池机制,Tomcat使用的连接池组件就是DBCP。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar,预先将数据库连接放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完再放回。单线程,并发量低,性能不好,适用于小型系统。

3、Tomcat Jdbc Pool:

Tomcat在7.0以前都是使用common-dbcp做为连接池组件,但是dbcp是单线程,为保证线程安全会锁整个连接池,性能较差,dbcp有超过60个类,也相对复杂。Tomcat从7.0开始引入了新增连接池模块叫做Tomcat jdbc pool,基于Tomcat JULI,使用Tomcat日志框架,完全兼容dbcp,通过异步方式获取连接,支持高并发应用环境,超级简单核心文件只有8个,支持JMX,支持XA Connection。

4、BoneCP:

官方说法BoneCP是一个高效、免费、开源的Java数据库连接池实现库。设计初衷就是为了提高数据库连接池性能,根据某些测试数据显示,BoneCP的速度是最快的,要比当时第二快速的连接池快25倍左右,完美集成到一些持久化产品如Hibernate和DataNucleus中。BoneCP特色:高度可扩展,快速;连接状态切换的回调机制;允许直接访问连接;自动化重置能力;JMX支持;懒加载能力;支持XML和属性文件配置方式;较好的Java代码组织,100%单元测试分支代码覆盖率;代码40KB左右。

5、Druid:

Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,是一个可用于大数据实时查询和分析的高容错、高性能的开源分布式系统,尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid仍能够保持100%正常运行。主要特色:为分析监控设计;快速的交互式查询;高可用;可扩展;Druid是一个开源项目,源码托管在github上。

主流连接池各项功能对比如下:

三、连接池Spring集成配置与JNDI配置

下面针对每一种连接池的使用方法,在开发中如何配置给出spring集成配置和在tomcat的conf/context.xml文件中配置2种方式,限于篇幅只给出基本参数,详细参数可自行研究。

3.1 阿里Druid连接池

Maven依赖

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.0.28</version>
</dependency>

Spring集成配置方式

<!--Spring Druid 数据源配置-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="20" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
<property name="filters" value="stat" />
</bean>
    Web.xml配置
     <!--druid WebStatFilter用于采集web-jdbc关联监控的数据-->
      <filter>
        <filter-name>DruidWebStatFilter</filter-name>
        <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
        <init-param>
          <param-name>exclusions</param-name>
          <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>DruidWebStatFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      <!--druid访问监控界面 /druid/index.html-->
      <servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/druid/*</url-pattern>
      </servlet-mapping>

Tomcat中context.xml文件JNDI配置方式

com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置/conf/context.xml配置JNDI方式

 <Resource
 name="jdbc/MysqlDataSource"
 factory="com.alibaba.druid.pool.DruidDataSourceFactory"
 auth="Container"
 type="javax.sql.DataSource"
 driverClassName="com.mysql.jdbc.Driver"
 url="jdbc:mysql://192.168.1.233:3306/lead_oams?useUnicode=true&characterEncoding=utf-8"
 username="lead_system"
 password="password"
 maxActive="50"
 maxWait="10000"
 removeabandoned="true"
 removeabandonedtimeout="60"
 logabandoned="false"
 filters="stat"/>

web.xml配置

 <!--MySQL数据库JNDI数据 -->
   <resource-ref>
   <description>MySQL DB Connection</description>
   <res-ref-name>jdbc/MysqlDataSource</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
   </resource-ref>

Java代码中获取JNDI数据源

//1、初始化名称查找上下文

 Context ctx =new InitialContext();

//2、通过JNDI名称找到DataSource

 DruidDataSource ds = (DruidDataSource)ctx.lookup("java:comp/env/jdbc/MysqlDataSource");

//3、通过ds获取数据库连接对象

  Connectionconn = ds.getConnection();
3.2 BoneCP连接池

Maven依赖

<dependency>
  <groupId>com.jolbox</groupId>
  <artifactId>bonecp-spring</artifactId>
  <version>0.8.0.RELEASE</version>
</dependency>

Spring集成BoneCP配置方式

<!-- Spring BoneCP 数据源配置-->
    <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
        <!-- 数据库驱动 -->
        <property name="driverClass" value="${jdbc.driver}" />
        <!-- 相应驱动的jdbcUrl -->
        <property name="jdbcUrl" value="${jdbc.url}" />
        <!-- 数据库的用户名 -->
        <property name="username" value="${jdbc.username}" />
        <!-- 数据库的密码 -->
        <property name="password" value="${jdbc.password}" />
        <!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->
        <property name="idleConnectionTestPeriod" value="60" />
        <!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->
        <property name="idleMaxAge" value="30" />
        <!-- 每个分区最大的连接数 -->
        <property name="maxConnectionsPerPartition" value="150" />
        <!-- 每个分区最小的连接数 -->
        <property name="minConnectionsPerPartition" value="5" />
    </bean>

Tomcat中BoneCP使用JNDI配置方式

<Resource
  name="JNDIName"
  auth="Container"
  type="com.jolbox.bonecp.BoneCPDataSource"
  factory="org.apache.naming.factory.BeanFactory"
  driverClass="oracle.jdbc.driver.OracleDriver"
  username="root" 
password="root" 
  jdbcUrl="jdbc:mysql://localhost:3306/test"
  idleConnectionTestPeriod="0"
  idleMaxAge="10"
  partitionCount="1"
  maxConnectionsPerPartition="5"
  minConnectionsPerPartition="1"
  connectionTestStatement=""
  initSQL="select 1 from dual"/>

Java代码中获取JNDI数据源

//1、初始化名称查找上下文

  Context ctx =new InitialContext();

//2、通过JNDI名称找到DataSource

 DataSource ds= (DataSource) ctx.lookup("java:comp/env/jdbc/MysqlDataSource");

//3、通过ds获取数据库连接对象

Connectionconn = ds.getConnection();
3.3 Tomcat Jdbc Pool连接池

Maven依赖

<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>tomcat-jdbc</artifactId>
  <version>7.0.75</version>
</dependency>
<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>tomcat-juli</artifactId>
  <version>7.0.75</version>
</dependency>

Spring集成Tomcat Jbdc Pool配置方式

<!--tomcat jdbc pool数据源配置--> 
    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
        <property name="poolProperties">
        <bean class="org.apache.tomcat.jdbc.pool.PoolProperties">
        <!--driverClassName url username password-->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        <!--jmx support-->
        <property name="jmxEnabled" value="true"/>
        <property name="testWhileIdle" value="true"/>
        <property name="testOnBorrow" value="true"/>
        <property name="testOnReturn" value="false"/>
        <property name="validationInterval" value="30000"/>
        <property name="validationQuery" value="SELECT 1"/>
        <property name="timeBetweenEvictionRunsMillis" value="30000"/>
        <!--最大连接-->
        <property name="maxActive" value="50"/>
        <!--初始化连接-->
        <property name="initialSize" value="5"/>
        <!--最长等待时间ms-->
        <property name="maxWait" value="10000"/>
        <property name="minEvictableIdleTimeMillis" value="30000"/>
        <property name="minIdle" value="10"/>
        <!--是否允许日志-->
        <property name="logAbandoned" value="false"/>
        <property name="removeAbandoned" value="true"/>
        <property name="removeAbandonedTimeout" value="60"/>
        <property name="jdbcInterceptors" value="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"/>
    </bean>

Tomcat中context.xml文件JNDI配置方式

<Resource   
name="jdbc/test"  
auth="Container"  
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"  
testWhileIdle="true"  
testOnBorrow="true"  
testOnReturn="false"  
validationQuery="SELECT 1"  
validationInterval="30000"  
timeBetweenEvictionRunsMillis="30000"  
driverClassName="com.mysql.jdbc.Driver"  
maxActive="100"  
maxIdle="40"
maxWait="12000"  
initialSize="10"  
removeAbandonedTimeout="60"  
removeAbandoned="true"  
logAbandoned="true"  
minEvictableIdleTimeMillis="30000"  
jmxEnabled="true"  
jdbcInterceptors=  
 "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"  
username="root" 
password="root" 
type="javax.sql.DataSource"   
url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"/>

Java代码中获取JNDI数据源

//1、初始化名称查找上下文

 Context ctx =new InitialContext();

//2、通过JNDI名称找到DataSource

DataSource ds= (DataSource) ctx.lookup("java:comp/env/jdbc/test");

//3、通过ds获取数据库连接对象

Connectionconn = ds.getConnection();
3.4 Apache DBCP连接池

Maven依赖

<dependency>
  <groupId>commons-dbcp</groupId>
  <artifactId>commons-dbcp</artifactId>
  <version>1.4</version>
</dependency>
<dependency>
  <groupId>commons-collections</groupId>
  <artifactId>commons-collections</artifactId>
  <version>3.2.2</version>
</dependency>
<dependency>
  <groupId>commons-pool</groupId>
  <artifactId>commons-pool</artifactId>
  <version>1.6</version>
</dependency>

Spring集成DBCP配置方式

 <!-- 配置dbcp数据源 -->
  <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 池启动时创建的连接数量 -->
<property name="initialSize" value="5"/>
<!-- 同一时间可以从池分配的最多连接数量。设置为0时表示无限制。 -->
<property name="maxActive" value="50"/>
<!-- 池里不会被释放的最多空闲连接数量。设置为0时表示无限制。 -->
<property name="maxIdle" value="10"/>
<!-- 在不新建连接的条件下,池中保持空闲的最少连接数。 -->
<property name="minIdle" value="3"/>
<!-- 设置自动回收超时连接 -->  
<property name="removeAbandoned" value="true" />
<!-- 自动回收超时时间(以秒数为单位) -->  
<property name="removeAbandonedTimeout" value="200"/>
<!-- 设置在自动回收超时连接的时候打印连接的超时错误  --> 
<property name="logAbandoned" value="true"/>
<!-- 等待超时以毫秒为单位,在抛出异常之前,池等待连接被回收的最长时间(当没有可用连接时)。设置为-1表示无限等待。-->  
<property name="maxWait" value="100"/>  
  </bean>

Tomcat中context.xml文件JNDI配置方式

<Resource name="/jdbc/test" 
        type="javax.sql.DataSource" 
        driverClassName="com.sybase.jdbc3.jdbc.SybDataSource" 
        url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8" 
        username="root" 
        password="root" 
        initialSize="5"
        maxActive="50" 
        maxIdle="10" 
        minIdle="3"
        maxWait="50000" />

Java代码中获取JNDI数据源

//1、初始化名称查找上下文

Context ctx =new InitialContext();

//2、通过JNDI名称找到DataSource

DataSource ds= (DataSource) ctx.lookup("java:comp/env/jdbc/test");

//3、通过ds获取数据库连接对象

Connectionconn = ds.getConnection();
3.5 C3p0连接池

Maven依赖

<dependency>
  <groupId>c3p0</groupId>
  <artifactId>c3p0</artifactId>
  <version>0.9.1.2</version>
</dependency>

Spring集成配置方式

<!-- Spring配置c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="100" />
<!--连接池中保留的最小连接数。-->
<property name="minPoolSize" value="1" />
<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize" value="10" />
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="30" />
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="5" />
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。Default: 0-->
<property name="maxStatements" value="0" />
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod" value="60" />
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts" value="30" />
<!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。Default: false-->
<property name="breakAfterAcquireFailure" value="true" />
<!--因性能消耗大请只在需要的时候使用它。Default: false -->
<property name="testConnectionOnCheckout"  value="false" />
</bean>

Tomcat中context.xml文件JNDI配置方式

<Resource 
  name="jdbc/MysqlDataSource" 
  auth="Container"
  factory="org.apache.naming.factory.BeanFactory" 
  type="com.mchange.v2.c3p0.ComboPooledDataSource"
  driverClass="com.mysql.jdbc.Driver"
  idleConnectionTestPeriod="60"
 maxPoolSize="50" 
 minPoolSize="2"
 acquireIncrement="2" 
 user="root" 
 password="root"
 jdbcUrl="jdbc:mysql://localhost:3306/test"/>

Java代码中获取JNDI数据源

//1、初始化名称查找上下文

Context ctx =new InitialContext();

//2、通过JNDI名称找到DataSource

DataSource ds= (DataSource) ctx.lookup("java:comp/env/jdbc/MysqlDataSource");

//3、通过ds获取数据库连接对象

Connectionconn = ds.getConnection();
总结

本文所比较的5种数据库连接池在性能方面,根据个人测试结果和参考网上资料Druid > TomcatJDBC > DBCP > C3P0,BoneCP的性能方面没有深入比较,应该和Tomcat Jdbc差不多。

对于小型的系统,并发压力不大时,选择哪一种数据库连接池差别不会很大,主要考虑的应该是连接池的稳定性。当并发量较高时,一般不会选择使用DBCP和C3P0,选择Druid是较好的。

本文给出了5种数据库连接池通过Spring配置和Tomcat JNDI方式配置两种方式,Spring配置一般使用单独的属性文件,每一个连接池都提供了使用代码创建的方式,使用方式也比较类似,感兴趣可以自行研究。

另外连接不同的数据库时,在配置方面的差异主要在driverClass和jdbcUrl两项,优化配置项可以另行考虑。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hyperf v2.1.4更新日志修复 #3165 修复方法 HyperfDatabaseSchemaMySqlBuilder::getColumnListing 在 MySQL 8.0 版本无法正常使用的问题。 #3174 修复 hyperf/database 组件 where 语句因为不严谨的代码编写,导致被绑定参数会被恶意替换的问题。 #3179 修复 json-rpc 客户端因对端服务重启,导致接收数据一直异常的问题。 #3189 修复 kafka 在集群模式下无法正常使用的问题。 #3191 修复 json-rpc 客户端因对端服务重启,导致连接池的连接全部失效,新的请求进来时,首次使用皆会报错的问题。 新增 #3170 为 hyperf/watcher 组件新增了更加友好的驱动器 FindNewerDriver,支持 Mac Linux 和 Docker。 #3195 为 JsonRpcPoolTransporter 新增了重试机制, 当连接、发包、收包失败时,默认重试 2 次,收包超时不进行重试。 优化 #3169 优化了 ErrorExceptionHandler 与 set_error_handler 相关的入参代码, 解决静态检测因入参不匹配导致报错的问题。 #3191 优化了 hyperf/json-rpc 组件, 当连接断后,会先尝试重连。 变更 #3174 严格检查 hyperf/database 组件 where 语句绑定参数。 新组件孵化 DAG 轻量级有向无环图任务编排库。 RPN 逆波兰表示法。Hyperf简介Hyperf 是基于 Swoole 4.4+ 实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换 与 可复用 的。框架组件库除了常见的协程版的 MySQL 客户端、Redis 客户端,还为您准备了协程版的 Eloquent ORM、WebSocket 服务端及客户端、JSON RPC 服务端及客户端、GRPC 服务端及客户端、OpenTracing(Zipkin, Jaeger) 客户端、Guzzle HTTP 客户端、Elasticsearch 客户端、Consul 客户端、ETCD 客户端、AMQP 组件、Nats 组件、Apollo、ETCD、Zookeeper 和阿里云 ACM 的配置心、基于令牌桶算法的限流器、通用连接池、熔断器、Swagger 文档生成、Swoole Tracker、Blade、Smarty、Twig、Plates 和 ThinkTemplate 视图引擎、Snowflake 全局ID生成器、Prometheus 监控 等组件,省去了自己实现对应协程版本的麻烦。Hyperf 还提供了 基于 PSR-11 的依赖注入容器、注解、AOP 面向切面编程、基于 PSR-15 的间件、自定义进程、基于 PSR-14 的事件管理器、Redis/RabbitMQ 消息队列、自动模型缓存、基于 PSR-16 的缓存、Crontab 秒级定时任务、Session、i18n 国际化、Validation 表单验证 等非常便捷的功能,满足丰富的技术场景和业务场景,开箱即用。Hyperf 功能特点框架初衷 尽管现在基于 PHP 语言开发框架处于一个百花争鸣的时代,但仍旧未能看到一个优雅的设计与超高性能的共存的完美框架,亦没有看到一个真正为 PHP 微服务铺路的框架,此为 Hyperf 及其团队成员的初衷,我们将持续投入并为此付出努力,也欢迎你加入我们参与开源建设。设计理念 Hyperspeed + Flexibility = Hyperf,从名字上我们就将 超高速 和 灵活性 作为 Hyperf 的基因。对于超高速,我们基于 Swoole 协程并在框架设计上进行大量的优化以确保超高性能的输出。 对于灵活性,我们基于 Hyperf 强大的依赖注入组件,组件均基于 PSR 标准 的契约和由 Hyperf 定义的契约实现,达到框架内的绝大部分的组件或类都是可替换的。 基于以上的特点,Hyperf 将存在丰富的可能性,如实现 单体 Web 服务,API 服务,网关服务,分布式间件,微服务架构,游戏服务器,物联网(IOT)等。文档齐全 我们投入了大量的时间用于文档的建设以提供高质量的文档体验,以解决各种因为文档缺失所带来的问题,文档上也提供了大量的示例,对新手同样友好。 Hyperf 官方开发文档生产可用 我们为组
目录 第1章 JDBC概述 1.1 JDBC简介 1.2 JDBC3.0规范 1.3 JDBC3.0 API的新特点 1.3.1 JDBC 3.0 API的一致性 1.3.2 不赞成的API 1.4 JDBC 3.0的类和接口 1.4.1 java.sql包的类和接口及其使用 1.4.2 javax.sql包所含内容及其使用 1.5 JDBC驱动程序简介 1.5.1 JDBC-ODBC 桥和ODBC驱动程序 1.5.2 本地API部分Java驱动程序 1.5.3 JDBC网络纯Java驱动程序 1.5.4 本地协议纯Java驱动程序 1.5.5 JDBC驱动程序的比较 1.6 本章小结 第2章 JDBC开发环境及配置 2.1 数据库系统 2.1.1 SQL数据库数据库基本操作语句 2.1.2 Microsoft SQL Server数据库设计及ODBC配置 2.1.3 Oracle 数据库的基本说明及其使用简介 2.1.4 MySQL的安装及使用简介 2.2 使用JDBC连接数据库 2.2.1 SQLJ基本知识 2.2.2 用PL/SQL和Java建立应用程序的基本知识 2.2.3 PL/SQL和Java的特性 2.2.4 PL/SQL和Java的实际开发应用实例 2.2.5 Java连接各类数据库的程序代码 2.3 Web应用服务器 2.3.1 Tomcat的安装及系统文件设置 2.3.2 WebSphere简介 2.3.3 WebLogic的安装和配置 2.3.4 Resin的安装与配置 2.4 Java开发环境 2.4.1 JDK设置 2.4.2 JBuilder的配置 2.4.3 Cafe的配置 2.4.4 JDeveloper的配置 2.4.5 FORTE FOR JAVA简介 2.5 JDBC开发调试技巧 2.6 本章小结 第3章 JDBC3.0 API数据库开发基本操作 3.1 数据库用例说明 3.2 与数据库建立连接 3.2.1 JDBC URL 3.2.2 连接事件(Connection Event) 3.2.3 连接事件监听器(Connection EventListener) 3.3 获取数据库信息 3.3.1 获取数据库详细信息 3.3.2 获取数据库基本信息 3.3.3 获取数据库表的信息 3.3.4 获取表各列的信息 3.3.5 获取索引的信息 3.3.6 获取数据库各种信息的实例 3.4 Statement对象 3.4.1 Statement对象使用基础 3.4.2 获取所有记录 3.4.3 获取指定记录 3.5 修改数据库表 3.5.1 修改数据库表本身 3.5.2 修改数据库表记录 3.6 结果集 3.6.1 结果集的基本操作 3.6.2 获取结果集的信息 3.6.3 使用流获取大型数据 3.6.4 可滚动结果集 3.6.5 可更新结果集 3.7 SQL和Java数据类型转换 3.8 本章小结 第4章 JDBC 3.0 API数据库开发高级操作 4.1 预编译语句 4.1.1 PreparedStatement对象的创建 4.1.2 传递IN参数 4.1.3 传递对象参数 4.1.4 传递大型数据参数 4.2 调用存储过程对象 4.2.1 CallableStatement对象的创建 4.2.2 IN、OUT及INOUT参数的使用 4.2.3 执行CallableStatement Object对象 4.2.4 CallableStatement对象使用实例 4.2.5 SQL Server存储过程编程经验技巧 4.3 成批更新(BatchedUpdate) 4.3.1 成批更新所使用的对象 4.3.2 使用成批更新的实例 4.4 行集合对象 4.4.1 设计时行集合 4.4.2 运行时行集合 4.4.3 非标准JDBC API类的行集 4.4.4 行集合的接口 4.5 事务 4.5.1 事务提交(Commit) 4.5.2 事务使用实例 4.6 JNDI与JDBC API 4.6.1 JDBC数据源 4.6.2 实例 4.7 连接池 4.7.1 连接池数据源(Connection PoolDataSource) 4.7.2 连接池处理事件 4.7.3 三层环境下的连接池操作 4.7.4 连接池和DataSource实现 4.7.5 包含连接池的数据源配置 4.7.6 池连接对象对于语句的重新利用 4.7.7 关闭池连接语句 4.7.8 连接池使用实例 4.8 分布式事务处理 4.8.1 XADataSource接口和XAConnection接口 4.8.2 事务管理器 4.8.3 关闭连接 4.9 例外处理 4.9.1 数据访问警告(SQLWarning) 4.9.2 数据截断(DataTruncation) 4.10 高级数据类型 4.10.1 Java对象类型 4.10.2 SQL3类型 4.10.3 定制类型 4.10.4 实例 4.11 本章小结 第5章 二层结构数据库开发实例 5.1 二层结构原理 5.2 Applet访问数据库实例 5.3 Application访问数据库实例 5.4 使用Jdevelpoer工具的数据库开发实例 5.5 二层结构开发数据库的优缺点 5.6 本章小结 第6章 三层结构数据库开发实例 6.1 三层结构原理 6.2 JSP数据库操作实例 6.3 Servlet数据库操作实例 6.4 JavaBeans操作数据库实例 6.5 三层结构开发数据库的优缺点 6.6 本章小结 第7章 综合开发实例分析 7.1 UML要点与应用 7.1.1 UML定义及组织 7.1.2 UML的概念模型 7.1.3 UML的应用 7.2 用UML建模开发网上商店实例 7.2.1 对网上商店的UML建模分析 7.2.2 网上商店数据库设计 7.2.3 网上商店的程序实现 7.3 用UML建模开发图书馆系统实例 7.4 本章小结 392 第8章 JAVA与XML数据转换 8.1 XML的基础知识 8.1.1 XML的特点 8.1.2 XML文档的结构 8.1.3 XML DTD的建立与使用 8.1.4 文档显示与样式单 8.1.5 XML链接语言 8.1.6 实用XML工具概览 8.2 XML数据与信息交换 8.2.1 XML数据源 8.2.2 XML在数据库的应用模式 8.2.3 XML数据交换技术及应用 8.3 使用JSP和XML两种技术建设动态网站 8.3.1 XML存储数据的优点 8.3.2 XML文档的Picture对象定义 8.3.3 JSP文档与XML的结合 8.4 用XML和XSL生成动态页面 8.4.1 建立标准的数据格式 8.4.2 生成动态XML 8.4.3 用XSL作为模板语言 8.4.4 生成HTML 8.5 从XML到Java代码的数据绑定 8.5.1 访问方式选择 8.5.2 数据绑定 8.5.3 约束数据 8.5.4 从XML获得Java 8.5.5 生成Java代码 8.5.6 完成包 8.6 使用JSP技术生成动态XML 8.6.1 JSP技术概述 8.6.2 使用JSP技术生成动态XML文档的结构 8.7 本章小结 第9章 JDBC程序开发高级技术 9.1 文处理技术 9.1.1 Java文处理的理论知识 9.1.2 文处理的解决方案 9.1.3 文处理技术程序实例 9.2 数据查询结果的分页显示技术 9.2.1 使用JavaBean和连接池实现数据分页显示 9.2.2 不用连接池不用JavaBean的分页显示 9.2.3 使用JavaBean不使用连接池的分页显示 9.2.4 用JSP和Servlet配合实现分页显示 9.3 数据库图形文件的存取技术 9.3.1 向数据库存储图形 9.3.2 将数据库的图象二进制数据显示成图片 9.4 Java开发的其他技术 9.5 本章小结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值