没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
#使用 JDBC 操作数据库
#1、JDBC 基础
#JDBC 简介:JDBC(Java Database Connectivity)是一种可以执行 SQL 的 Java API,通过它可以用一
种 API 操作不同的数据库.
#JDBC 驱动:不同数据库间,标准的 SQL 语句可以移植,而数据库实际通信协议及某些数据库特征不可移
植,因此,JDBC 和数据库之间须还有一层,用于将 JDBC 调用映射成特定的数据库调用,此特殊层就是 JDBC
驱动程序.
常见的 JDBC 驱动有四种:
》JDBC-ODBC 桥,是最早实现的 JDBC 驱动程序,目的为了快速推广 JDBC,非多线程,能力有限,此驱动
程序将 JDBC API 映射成 ODBC API
》直接将 JDBC API 映射成数据库特定的客户端 API,这种驱动程序包含特定数据库的本地代码,可用于
特定数据库的客户端
》支持三层结构的 JDBC 访问方式,主要用于 Applet 阶段,通过 Applet 访问数据库
》纯 java 的,直接与数据库实例交互,智能型的,知道数据库使用的底层协议,是目前最流行的 JDBC 驱
动
#JDBC 常用接口和类简介
DriverManager:用于管理 JDBC 驱动的服务类,主要方法是获得 Connection 对象
public static synchronized Connection getConnection(String url,String user,String pass)
throws SQLException
Connection:代表一个数据库连接物理会话,若放我数据库,须先获得数据库连接.常用方法
》Statement createStatement() throws SQLException 返回 Statement 对象
》PreparedStatement prepareStatement(Strin sql) throws SQLException 返回编译的
Statement 对象
》CallableStatement preparedCall(Strin sql) throws SQLException 返回的
CallableStatement 对象用于存储过程调度
Statement:执行 DML SQL 的工具接口,常用方法:
》ResultSet executeQuery(String sql) throws SQLException 执行查询,返回结果集对应的
ResultSet 对象
》int executeUpdate(String sql) throws SQLException 执行 DML 并返回受影响的行数
》boolean execute(String sql) throws SQLException 返回 boolean 表式执行成功与否
PreparedStatement :是 Statement 的子接口,允许数据库预编译 SQL,避免数据库每次重新编译,以
后每次只改变 SQL 的参数,性能较好,常用方法
》ResultSet executeQuery() throws SQLException 执行查询,返回结果集对应的 ResultSet 对象
》int executeUpdate() throws SQLException 执行 DML 并返回受影响的行数
》boolean execute() throws SQLException 返回 boolean 表式执行成功与否
注:上述方法因 SQL 预编译,无须接手 SQL 字符串,只是需要接收参数,故有如下方法 void setXxx(int
paramIndex,Xxx value)
ResultSet:包含访问结果集的方法,可通过列索引或列名获得列数据,常用方法
》boolean next() throws SQLException,将 ResultSet 定位到下一行,结果集的起始位在第一行之
前
》void close()throws SQLException 释放 ResultSet 对象
》boolean absolute(int row)throws SQLException 将结果集移到指定行,若 row 是负值,则倒数移
动
注:默认方法创建的 ResultSet 不支持 absolute 方法因为结果集不支持后移,若想支持,需要如此创建
:Statement
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDAT
ABLE);
:ResultSet rs=stmt.executeQuery(sql);
#传统 JDBC 访问数据库步骤
》通过 Class.forName(String driverClass)注册数据库驱动
》通过 DriverManager.getConnection(String url,String user,String password)获得数据库连接
对象
》通过 Connnection.createStatement()或者 Connection.createPreparedStatement(String
sql)创建相应的 Statement 对象
》通过 Statement.execute(String sql)或者 PreparedStatement.execute()执行相应的 SQL,并
返回 ResultSet 对象
》操作 ResultSet
#2、数据库连接池
》数据库连接的建立及关闭极其耗资源,对系统性能影响尤为明显.
》传统数据库连接方式:一个数据库连接均对应一个物理连接,每次操作都要打开、关闭该物理操作,这
种频繁性,会造成系统性能下降,此时,考虑数据库连接池.
》数据库连接池解决方案:当应用程序启动时,系统主动建立足够的连接(按指定的初始化数据),并将这些
连接组成一个池.每次应用程序请求数据库连接时,无需重新打开连接,而是从池中取出已有的连接,使用完
后,不再关闭,而是直接将该连接归还池,使用连接池,可大大提高系统运行效率.
》数据库连接池介绍
》 对于共享资源的情况,有一个通用的设计模式--资源池(Resource Pool),用于解决资源的频繁请求、
释放所造成的性能下降.为解决数据库连接的这种频繁性,JDBC2.0 规范引入了数据库连接池技术,实际上,
数据库连接池是 Connection 对象的工厂,常用参数有:
@数据库的初始连接数 @连接池的最大连接数 @连接池每次增加的连接数
》连接池的工作示意图 {JDBC 标准的 API 并没有提供连接池的实现,仅仅提供了 DataSource 接口具
体的实现有一些厂商提供}
》 连接池的分配与释放
@程序启动,分配初始化数目的连接,按需分配,用过归还、超时归还,当申请时无或者达到指定的最小值,
按增量参数值分配新的连接
@为确保连接池中最小的连接数,通常有如下策略:
:动态--定时检查连接池,一旦发现数量小于最小连接数,则补充相应的新连接,保证连接池正常运转
:静态--空闲连接不足时,系统才检测是否达到最小连接
》连接池的实现
连接池通常包括连接池类(DBConnectionPool)和连接池管理类(DBConnectionPoolManager):
》连接池类是某一数据库所有连接的缓冲池,主要实现功能:@从连接池获取或者创建可用连接,@使用
完毕,归还给池连接,@系统关闭前,断开所有连接并释放连接占用的资源,@处理无效连接,@限制池中连接
的数节目,介于最小值和最大值之间
》连接池管理类是连接池类的包装类,该类采用单态模式设计,保证系统中只有一个实例,主要用于管理
多个连接池对象,主要实现以下功能:@注册数据库驱动程序,@根据配置文件,创建连接池对象,@命名、管
理连接池,@跟踪连接池的使用,需要时关闭并释放资源
:数据库连接池的管理是个难点,管理不当,造成系统开销过大,将成为性能瓶颈.对于高并发的 WEB 应用,
采用连接池技术效率和稳定性比传统的连接方式要好的多
:并发问题--数据库必须考虑此问题,对于并发,Java 语言提供管理并发的支持,使用 synchronized 关键
字可确保方法线程的安全.故,DataSource 的 getConnection 方法必须以该该关键字修饰
public synchronized Connection getConnection(); //保证线程安全
:事务处理--JDBC 的 Connection 本身通过设置 Connection 的 AutoCommit 属性为 false,提供对事
务的支持,然后,显式地调用 commit 或 rollback 方法提交或回滚事务.
连接池需要复用 connection,因此,必须提供相应的事务支持机制.考虑采用每个事务独占一个连接,此
法可降低事务管理复杂性.
:多数据库服务器和多用户--JDBC 规范中,DataSource 具备同时连接不同数据库的能力,如同时连
oracle 和 sql server.此时,考虑使用 xml 配置文件来配置连接所需的相关信息.然后,提供一个 Singleton
模式的连接池管理类,该管理类每次启动时读取配置文件信息,创建多个连接池类的实例,每个实例对应一个
数据库连接池.连接池管理类实例命名每个连接池实例,通过不同的名称管理不同的连接池.
对于多个用户访问同一个数据库的情况,也可考虑使用 xml 配置文件.
》常见的数据库连接池
通常,没有必要自己实现连接池.商用应用服务器都有自己的连接池实现,如 WebLogic 和 WebSphere,其
性能和稳定性绝佳,即使没有商用应用服务器,也可使用开源的连接池.目前流行的有 2 个:@DBCP 连接池
@C3P0 连接池
》DBCP 连接池
Appache 提供的开源实现,依赖于两个 jar 文件
@commons-dbcp-1.2.1.jar:连接池的实现
@commons-pool.jar:连接池实现的依赖库
Tomcat 的连接池正是采用该连接池实现的.连接该连接池,既允许与应用服务器整合使用,又可由应用
程序独立使用.下面的代码 DBConn 类通过 DBCP 获得数据库连接:
public class DBConn
{
private static DBConn dc;
private Connection conn = null;
private Statement stmt = null;
private DBConn()
{
}
public static DBConn instance()
{
if (dc == null)
{
dc = new DBConn();
}
return dc;
}
public Statement openStmt()
{
if (stmt == null)
{
conn = getConn();
try
{
stmt = conn.createStatement();
}
剩余24页未读,继续阅读
资源评论
- 楚靖靖2014-03-27说的挺详细的
- luckychechen2012-06-21谢谢,不过是word格式的
liudonghua0108
- 粉丝: 3
- 资源: 20
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 常用工具集参考用于图像等数据处理
- 音乐展示网页、基于Stenography的图像数字水印添加与提取,以及基于颜色矩和Tamura算法的图像相似度评估算法py源码
- 基于EmguCV(OpenCV .net封装),图像数字水印加解密算法的实现,其中包含最低有效位算法,离散傅里叶变换算法+文档书
- 基于matlab+DWT的图像水印项目,数字水印+源代码+文档说明+图片+报告pdf
- (优秀毕业设计)基于python实现的数字图像可视化水印系统的设计与实现,多种数字算法实现+源代码+文档说明+理论演示pdf
- 基于DWT-DCT-SVD和deflate压缩的数字水印方法python源码+Gui界面+演示视频(高分毕业设计)
- 基于matlab实现DWT、DCT、SVD算法数字图像水印可视化系统+GUI界面+文档说明+详细注释(高分毕业设计)
- NCIAE-Data-Structure大一大二笔记
- 学习wireshark笔记
- digital-image-数据可视化笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功