`
mywebcode
  • 浏览: 995415 次
文章分类
社区版块
存档分类
最新评论

jdbc详解(三)

 
阅读更多

开源数据库连接池

l现在很多WEB服务器(Weblogic,WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。
l也有一些开源组织提供了数据源的独立实现:
DBCP 数据库连接池
C3P0 数据库连接池
l实际应用时不需要编写连接数据库代码,直接从数据源获得数据库的连接。程序员编程时也应尽量使用这些数据源的实现,以提升程序的数据库访问性能。

DBCP数据源

lDBCP Apache软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个jar文件:
Commons-dbcp.jar:连接池的实现
Commons-pool.jar:连接池实现的依赖库
lTomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

DBCP数据源

static{

InputStream in =JdbcUtil.class.getClassLoader().

getResourceAsStream("dbcpconfig.properties");

Properties prop = newProperties();

prop.load(in);

BasicDataSourceFactoryfactory =newBasicDataSourceFactory();

dataSource =factory.createDataSource(prop);

}

C3P0数据源

JNDI技术简介

lJNDI(Java Naming and DirectoryInterface)Java命名和目录接口,它对应于J2SE中的javax.naming包,
l这套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需通过名称检索即可。
l其核心APIContext,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。

编写自己的JDBC框架

元数据-DataBaseMetaData

l元数据:数据库、表、列的定义信息。
lConnection.getDatabaseMetaData()
lDataBaseMetaData对象
getURL():返回一个String类对象,代表数据库的URL
getUserName():返回连接当前数据库管理系统的用户名。
getDatabaseProductName():返回数据库的产品名称。
getDatabaseProductVersion():返回数据库的版本号。
getDriverName():返回驱动驱动程序的名称。
getDriverVersion():返回驱动程序的版本号。
isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。

元数据-ParameterMetaData

lPreparedStatement .getParameterMetaData()
获得代表PreparedStatement元数据的ParameterMetaData对象。
Select* from user where name=? And password=?
lParameterMetaData对象
getParameterCount()
获得指定参数的个数
getParameterType(intparam)
获得指定参数的sql类型

元数据-ResultSetMetaData

lResultSet.getMetaData()
获得代表ResultSet对象元数据的ResultSetMetaData对象。
lResultSetMetaData对象
getColumnCount()
返回resultset对象的列数
getColumnName(intcolumn)
获得指定列的名称
getColumnTypeName(intcolumn)
获得指定列的类型

使用元数据简化JDBC代码

l业务背景:系统中所有实体对象都涉及到基本的CRUD操作:
所有实体的CUD操作代码基本相同,仅仅发送给数据库的SQL语句不同而已,因此可以把CUD操作的所有相同代码抽取到工具类的一个update方法中,并定义参数接收变化的SQL语句。
实体的R操作,除SQL语句不同之外,根据操作的实体不同,对ResultSet的映射也各不相同,因此可义一个query方法,除以参数形式接收变化的SQL语句外,可以使用策略模式由qurey方法的调用者决定如何把ResultSet中的数据映射到实体对象中。

O-RMapping简介

l什么是O-RMapping
l常用O-R Mapping映射工具
Hibernate
Ibatis
CommonsDbUtils(只是对JDBC简单封装)

ApacheDBUtils框架

lcommons-dbutilsApache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。
lAPI介绍:
org.apache.commons.dbutils.QueryRunner
org.apache.commons.dbutils.ResultSetHandler
工具类
org.apache.commons.dbutils.DbUtils、。

DbUtils

lDbUtils:提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:
public static void close(…) throwsjava.sql.SQLException: DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭ConnectionStatementResultSet
public static voidcloseQuietly(…):这一类方法不仅能在ConnectionStatementResultSetNULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception
public static voidcommitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。
public static booleanloadDriver(java.lang.StringdriverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException

QueryRunner

l该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
lQueryRunner类提供了两个构造方法:
默认的构造方法
需要一个 javax.sql.DataSource来作参数的构造方法。

QueryRunner类的主要方法

lpublicObject query(Connection conn, Stringsql, Object[]params, ResultSetHandlerrsh) throwsSQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理PreparedStatementResultSet的创建和关闭
lpublicObject query(Stringsql, Object[]params, ResultSetHandlerrsh) throwsSQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource)或使用的setDataSource方法中重新获得Connection
l
lpublicObject query(Connection conn, Stringsql,ResultSetHandlerrsh) throwsSQLException :执行一个不需要置换参数的查询操作。
l
lpublicintupdate(Connection conn, Stringsql, Object[]params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。
l
lpublicintupdate(Connection conn, Stringsql) throwsSQLException:用来执行一个不需要置换参数的更新操作。

ResultSetHandler接口

l该接口用于处理java.sql.ResultSet,将数据按要求转换为另一种形式。
lResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)

ResultSetHandler接口的实现类

lArrayHandler:把结果集中的第一行数据转成对象数组。
lArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
lBeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
lBeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
lColumnListHandler:将结果集中某一列的数据存放到List中。
lKeyedHandler(name):将结果集中的每一行数据都封装到一个Map<列名,列值>里,再把这些map再存到一个map里,其key为指定的key
lMapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
lMapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
注意事项
l不管java的对象存在何种关系,反映到关系型数据库中,都是使用外键表示纪录(即对象)的关联关系。
l设计java对象如涉及到多个对象相互引用,要尽量避免使用一对多,或多对多关系,而应使用多对一描述对象之间的关系(或使用延迟加载的方式)

分享到:
评论

相关推荐

    JDBC详解 JDBC详解

    JDBC详解 JDBC详解JDBC详解 JDBC详解JDBC详解 JDBC详解

    spring接管jdbc详解

    spring接管jdbc详解

    JDBC详解

    JDBC详解JDBC详解

    JDBC详解HTML-JDBC.pp

    &lt;1&gt;.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合于企业网或三层结构应用程序 &lt;2&gt;.本地API:需要驱动程序的二进制代码支持 &lt;3&gt;.JDBC网络纯java驱动程序:将JDBC转换为与DBMS无关的网络协议,又被某服务器转换...

    MSSQL 2008 连接java jdbc详解

    MSSQL 2008 连接java jdbc详解 ,详细的连接步骤,帮助初学者快速搭建好环境

    jdbc详解(基础版本)

    对初学JDBC的同志很有帮助,内容浅显易懂,图文并茂,讲解详尽,学习完此教程肯定会对JDBC有一个清晰的认识。

    JDBC讲解详解详解详解

    JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。比如建立数据库连接、执行SQL语句进行数据的...

    Java-Web程序设计实战-第8章-JDBC详解.pptx

    Java-Web程序设计实战-第8章-JDBC详解全文共86页,当前为第1页。 2 Java-Web程序设计实战-第8章-JDBC详解全文共86页,当前为第2页。 3 Java-Web程序设计实战-第8章-JDBC详解全文共86页,当前为第3页。 JDBC是一个...

    数据库连接JDBC详解

    JDBC 从物理结构上说就是Java 语言访问数据库的一套接口集合。从本质上来说就是调 用者(程序员)和实行者(数据库厂商)之间的协议。JDBC 的实现由数据库厂商以驱动程 序的形式提供。JDBC API 为Java 开发者使用...

    jdbc桥技术详解,例子详解

    jdbc桥技术详解,例子详解 实例讲解~·新手必看

    jdbc基础知识详解

    次文档详细的讲解了jdbc的工作原理,以及对它又简单到深处的详细讲解

    jdbc应用详解

    jdbc详解,包括应用步骤、各数据库连接语句

    JSP与JDBC应用详解

    此为原版书籍的电子版,已经按照章节拆分为多个PDF,可以下载后自行合并成完整的一份PDF。

    JDBC代码详解.docx

    jdbc原生代码详解 及 注释 解决方案

    JDBC教程详解

    JDBC教程详解

    Jdbc详解.pptx

    Java数据库连接,学习jdbc很详细的一份学习资料,不要错过哟

    JDBC详解.docx

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具...

    JDBC详解(连接操作数据库、处理大数据、批处理)

    详细介绍JDBC的连接操作数据库、处理大数据、批处理使用操作 Sun公司为了简化数据库开发,定义了一套JDBC接口,这套接口由数据库厂商去实现,这样,开发人员只需要学习JDBC接口, 并通过JDBC加载具体的驱动,就可以...

    java如何连接数据库jdbc详解

    最详细的java连接数据库,教你如何利用java连接数据库

Global site tag (gtag.js) - Google Analytics