资源预览内容
第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
第9页 / 共24页
第10页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
#使用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_UPDATABLE); :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(); catch (Exception e) System.err.println(
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号