`
gudujianxuehu
  • 浏览: 97177 次
  • 来自: ...
社区版块
存档分类
最新评论

JDBC基础理论与实践

阅读更多
Java技术中,JDBC是所有数据库操作的基础,不管是iBATIS还是Hibernate,其基础无不来自于JDBC。掌握了JDBC,对通用库的理解就简单了。

一. 数据库连接器
数据库连接器(java.sql.Connection)是JDBC操作的核心,一次完整的数据库操作均起始于数据库连接器。

有多种方式创建数据库连接器,基本方式有两种:DriverManager方式和DataSource方式。其中DriverManager是最原始的连接方式;DataSource方式统一了接口,通过不同的实现完成更多的任务,如Apache的DBCP就在DataSource基础上提供了强大的缓冲池技术,大大提高了创建数据库连接器的速度。

创建数据库连接器时需要提供四个基本数据,分别为

JDBC驱动:driverClassName
数据库连接字:url
数据库访问所需要的用户名:username
数据库访问所需要的密码:password

其中

JDBC驱动的值可以是:

MySQL:"com.mysql.jdbc.Driver"
PostgreSQL:"org.postgresql.Driver"
Oracle:"oracle.jdbc.driver.OracleDriver"
Sybase:"com.sybase.jdbc2.jdbc.SybDriver"
SQLServer:"com.microsoft.jdbc.sqlserver.SQLServerDriver"
DB2:"com.ibm.db2.jdbc.net.DB2Driver"

数据库连接字的值可以是:

MySQL:"jdbc:mysql://DbComputerNameOrIP:3306/DbName"
PostgreSQL:"jdbc:postgresql://DbComputerNameOrIP:3306/DbName"
Oracle:"jdbc:oracle:thin:@DbComputerNameOrIP:1521:DbName"
Sybase:"jdbc:sybase:DbName:DbComputerNameOrIP:2638"
SQLServer:"jdbc:microsoft:sqlserver://DbComputerNameOrIP:1433;databaseName=DbName"
DB2:"jdbc:db2://DbComputerNameOrIP/DbName"

以DriverManager方式创建数据库连接器的代码如下:

try {
    // 加载JDBC驱动
    Class.forName(driverClassName);
    // 建立数据库连接
    Connection conn = DriverManager.getConnection(url, userName, password);
}catch(ClassNotFoundException e) {
    // 驱动加载失败
}catch(SQLException e) {
    // 建立数据库连接失败
}

以DataSource方式创建数据库连接器的代码如下:


// 建立数据源  
org.apache.commons.dbcp.BasicDataSource dataSource =   
    new org.apache.commons.dbcp.BasicDataSource();  
// 设置基本属性     
dataSource.setDriverClassName(driverClassName);  
dataSource.setUrl(url);  
dataSource.setUsername(username);  
dataSource.setPassword(password);  
try {  
    // 建立数据库连接器  
    Connection conn = dataSource.getConnection();  
}catch(SQLException e) {  
    // 建立数据库连接器失败  



二. SQL声明
在一个数据库连接器中,我们可以调用多条SQL语句。每一条SQL语句的执行由一个SQL声明(java.sql.Statement)完成。

数据库连接器有三种声明SQL的方式:一般声明、预编译声明和存储过程声明。几种声明的本质区别在于SQL语句的指定时机,一般声明在执行时指定SQL语句,而后两种声明则在创建时指定SQL语句。

SQL声明的执行方式又分两种:基于检索的executeQuery方法,用于SELECT语句;以及基于变更的executeUpdate方法,用于INSERT、UPDATE、DELETE语句。同时还提供了通用性更强的execute方法。

一般声明
创建一个一般声明很简单,代码如下:

Statement state = conn.createStatement(); 

一般声明通过executeQuery执行一个查询语句(包括SELECT),查询语句的执行结果以结果集(java.sql.ResultSet)的形式提供。代码如下:

String querySql = "select ...";  
ResultSet rs = state.executeQuery(querySql); 

上述代码也可用如下方式完成:

String querySql = "select ...";  
boolean success = state.execute(querySql);  
if (success) {  
    ResultSet rs = state.getResultSet();  


一般声明通过executeUpdate执行一个更新语句(包括UPDATE、INSERT、DELETE),通过更新操作影响到的元素个数决定成功与否。代码如下:

String updateSql = "update ...";  
int result = state.executeUpdate(updateQql); 

上述代码也可用如下方式完成:

String updateSql = "update ...";  
boolean success = state.execute(updateSql);  
if (success) {  
    int result = state.getUpdateCount();  


预编译声明
与一般声明不同,预编译声明则是在执行前将SQL语句进行预处理,其最大的用处在于可将SQL语句参数化。创建预编译声明时需要指定一个SQL语句,语句中不确定的参数用“?”表示,参数根据序号(以1开始)通过一系列set方法设置。预编译声明的执行操作与一般声明类似但不提供参数。代码样例如下:

// 创建带有参数的SQL语句,参数用“?”表示。  
StringBuffer sql = new StringBuffer();  
sql.append("insert into T_DOC001 ")  
   .append("(DOC_ID, LANG_TYPE, DOC_NAME, PUB_DATE, SOURCE, SUMMARY)")  
   .append("values(?, ?, ?, ?, ?, ?)");  
// 创建预编译声明  
PreparedStatement preState = conn.prepareStatement(sql.toString());  
// 按序号(从1开始)设置参数值  
preState.setString( 1, docId);  
preState.setInt(    2, langType);  
preState.setString( 3, docName);  
preState.setDate(   4, pubDate);  
preState.setBlob(   5, source);  
preState.setString( 6, summary);  
// 执行SQL语句  
// 执行方法与一般声明相似,但不用提供参数。  
preState.executeUpdate(); 

存储过程声明
存储过程(Stored Procedure)属于数据库技术,存储过程直接保存在数据库中,由数据库对其进行优化。数据库连接器通过prepareCall创建存储过程声明。代码如下:

// 创建存储过程声明  
CallableStatement callState =   
    conn.prepareCall("{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}"); 


关于存储过程声明的详细用法,可参考:
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0802tiwary/

三. 事务处理
根据业务的不同多个SQL声明可以组成一个事务,在一个事务中保证了其中的所有SQL声明或者全部执行成功或者都不执行。简单的说,事务就是把一件事情分成几个步骤,并且确保这件事情的所有步骤要么全部做完,要么就全部都没做,不存在只做了其中几个步骤的可能。

在JDBC中事务的处理由数据库连接器完成,事务处理的最小单元就是一个SQL声明。数据库连接器中针对事务的操作有两种:commit及rollback。commit使SQL声明的执行立即生效而rollback则使执行了的SQL声明无效。

根据业务的不同,数据库连接器提供两种处理事务的策略:自动提交与手动提交。默认情况下,数据库连接器的事务处理策略是自动提交,在自动提交模式下,commit及rollback不必手动调用。JDBC会为每一个SQL声明提供独立的事务,执行每一个声明时立即commit,并在出现错误时自动rollback。这种传统的提交方式不能完成我们对事务的要求,所以我们必须用手动提交的方式完成事务处理。手动提交模式需要根据业务逻辑在适当的位置调用commit及rollback方法。将数据库连接器的事务处理策略设置为手动提交的代码如下:

// 将数据库连接器设置成手动提交模式  
conn.setAutoCommit(false);  
try {  
    // 第一个SQL声明的执行  
    {  
        conn.execute(...);  
    }  
    // 第二个SQL声明的执行  
    {  
        conn.execute(...);  
    }  
    // 手动提交事务  
    conn.commit();  
}catch(SQLException e) {  
    // 数据库发生错误,事务会滚。  
    conn.rollback();  


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/darxin/archive/2009/11/14/4809684.aspx
分享到:
评论

相关推荐

    01_传智播客JDBC_jdbc的理论概述.rar

    总的来说,“01_传智播客JDBC_jdbc的理论概述”应该涵盖了JDBC的基本概念、核心组件的使用以及如何在实际项目中应用JDBC进行数据库操作。通过深入学习这个课程,开发者将能够熟练掌握数据库编程,为后续的Java Web...

    【Java学习笔记】JDBC基础篇

    以实例驱动的方式,将理论知识与实际操作相结合,帮助您快速理解和掌握jdbc的使用。 jdbc基础篇教程pdf版:为了提供更多阅读选择,我们还准备了同一教程内容的pdf版本。精心排版的pdf文档保证了在不同设备上的阅读...

    JDBC与Java数据库编程.pdf

    ### JDBC基础应用 创建一个基本的JDBC应用程序涉及以下步骤: 1. **导入JDBC类或包**:首先需要在程序中导入java.sql.*或其他相关包。 2. **加载JDBC驱动程序**:通过Class.forName()方法加载对应的数据库驱动程序...

    JSP与JDBC应用详解

    **JSP(Java Server Pages)与JDBC(Java Database Connectivity)是Java开发中用于...通过阅读《关键技术——JSP与JDBC应用详解》这样的书籍,可以从理论到实践,全面深入地学习这两种技术,并在实际项目中灵活运用。

    jdbc_on_oracle

    标题与描述中的关键词“jdbc_on_oracle”与“jdbc_...这些实践经验将有助于巩固理论知识,并培养解决实际问题的能力。此外,定期关注JDBC和Oracle数据库的新版本发布,了解最新的功能和改进,也是保持技术领先的关键。

    IBM JDBC考试大纲

    这些章节覆盖了数据库理论基础、JDBC实际操作和高级数据管理策略。 首先,关系数据库是学习JDBC的基础。在这一章,考生需要掌握关系数据的基本概念,如关系模型,实体(Entity)、属性(Attribute)和关系...

    JDBC与Java数据库编程

    本课程通过理论与实践相结合的方式,全面介绍了JDBC的核心概念和技术要点,帮助学员掌握了使用Java进行数据库编程的基本技能。通过学习本课程,学员不仅能够熟悉JDBC的基本操作,还能够掌握如何使用JDBC进行复杂的...

    oracle 基础教程 jdbc 以及样式demo 各种数据库的连接方法

    Oracle基础教程涵盖了...对于JDBC和样例DEMO的实践,将有助于加深理论知识的理解,并提升实际开发中的应用能力。通过学习各种数据库的连接方法,开发者可以根据项目需求灵活选择合适的方式,确保程序的稳定性和性能。

    JDBC课件及源码.zip

    **JDBC基础与应用** Java Database Connectivity(JDBC)是Java平台中用于访问数据库的标准Java API,它使得Java程序员能够编写数据库无关性的代码,从而在不同的数据库之间进行数据操作。JDBC提供了一套全面的接口...

    jdbc开发教程pdf

    本教程涵盖了从基础到高级的JDBC概念,通过丰富的示例代码帮助读者实现理论与实践的结合。 首先,教程会介绍JDBC的基本概念,包括驱动程序类型、JDBC URL结构、以及如何加载和注册JDBC驱动。开发者将学习如何使用`...

    JDBC课件

    本课件旨在深入理解JDBC的工作原理及其在实际开发中的应用。 **1. JDBC的基本概念** JDBC是一个Java API,由一组接口和类组成,它定义了如何在Java程序中建立、执行SQL语句以及获取结果。JDBC提供了一种统一的方法...

    传智播客JDBC_所有源码与ppt

    【标题】"传智播客JDBC_所有源码与ppt"是一个教育机构传智播客发布的关于Java数据库...这个资源包对于初学者或希望巩固JDBC知识的开发者来说非常有价值,它结合理论与实践,有助于深入理解JDBC的工作原理和实际应用。

    分库分表理论与实战-基于ShardingJDBC5.4.1(资料+视频教程)

    本资源是一套专注于ShardingJDBC 5.4.1的分库分表理论与实践相结合的教程,旨在帮助开发者掌握在高并发、大数据量场景下的数据库优化技术。内容包括数据库分片的基础知识、ShardingJDBC的配置与使用、真实场景下的分...

    jdbc分页实例sqlserver2000

    1. **JDBC基础**:讲解JDBC驱动、连接数据库、创建Statement或PreparedStatement对象、执行SQL查询的基本步骤。 2. **分页原理**:解释为何需要分页,以及如何通过SQL的LIMIT或OFFSET/FETCH等方法实现分页。 3. **...

    javajdbc宠物商店

    1. **JDBC基础**: - JDBC是Java API,允许Java应用程序连接到各种类型的数据库,包括MySQL。 - JDBC提供了Connection、Statement、PreparedStatement、CallableStatement等接口,用于建立数据库连接、执行SQL语句...

    jdbc_html_javascript 资源

    【jdbc_html_javascript 资源】是一份综合性的学习资料包,主要涵盖了数据库操作、网页制作和客户端脚本编程这三个关键领域。这份资源对于那些对...记得理论与实践相结合,多动手编写代码,才能更好地掌握这些技术。

    JavaWeb程序设计入门课件JDBC理论共12页.pdf

    【JavaWeb程序设计入门课件...通过这12页的课件学习,初学者将能够建立起对JavaWeb中JDBC基础的扎实理解,为进一步的JavaWeb开发打下坚实基础。同时,结合实际的项目练习,能够更好地巩固这些理论知识,提升编程技能。

    Apress.JDBC.Recipes.A.Problem.Solution.Approach.Sep.2005.pdf

    JDBC是Java开发中用于与各种数据库进行交互的重要API,本书通过一系列实际问题和解决方案的形式,深入浅出地介绍了JDBC的核心概念、技术细节以及最佳实践,对于任何希望精通JDBC的Java开发者来说,都是一本不可或缺...

    传智播客 李勇老师 JDBC代码全部和ppt

    李勇老师的课程旨在帮助那些对数据库操作有需求但基础知识不够牢固的学生,通过由浅入深、逐步递进的教学方式,让学员掌握JDBC的核心概念和实际应用。 【描述】中提到的"传智播客视频"是一系列教学视频,这些视频...

    jdbc 连接各种数据库

    标题中的“jdbc 连接各种数据库...总的来说,学习JDBC连接各种数据库涉及Java编程基础、SQL语法、数据库理论以及Java的异常处理和资源管理。深入理解这些概念,结合实际的项目练习,可以提升你在数据库开发领域的技能。

Global site tag (gtag.js) - Google Analytics