`
烟的傀儡
  • 浏览: 27671 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

jdbc连接数据库详解

    博客分类:
  • j2ee
阅读更多

Spring簡化了JDBC的數據庫操作,數據訪問不必使用煩瑣的Try…catch塊。同時還支持查詢結果的對象化

JDBC基礎,JDBC的全稱是Java Database Connectivity,即Java數據庫連接。通JDBC可以使用同一種API操作不同的數據庫系統。JDBC完成數據庫連接、發送SQL語句、處理結果三個基本的工作。JDBC 與數據庫之間還有一層,用於將JDBC調用映射成特定的數據庫調用,這個特殊的層就是JDBC驅動程序
JDBC常用的接口和類簡介:
1.DriverManager:管理JDBC驅動的報務類。
2.Connection:數據庫連接對象
3.Statement:執行SQL語句的工具接口
4.PreparedStatement是Statement的子接口,它可以預編譯SQL語句
5.ResultSet:結果集,這裡說一下它的一個方法:boolean absolute(int row)throws SQLException,要使用這個方法,必須使用帶參數的createStatement方法創建Statement對象
傳統的JDBC訪問數據庫
Class.forName(“oracle.jdbc.driver.OracleDriver”);
String url=”jdbc:oracle:thin:@localhost:1521:orcl”;
Connection conn=DriverManager.getConnection(url,”scott”,”tiger”);
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(“select * from test”);

數據庫連接池
數據庫的建立及關閉是極耗系統資源的操作。數據庫連接池的解決方案是:當應用程序啟動時,系統主動建立足夠的數據庫連接,並將這些連接組成一個連接池,每次使用時從池中取出已有的連接,關閉時歸還給連接池。JDBC標準的API並沒有提供連接池實現,僅僅提供DataSource接口。

事務處理
JDBC的Connection本身設置Connection的AutoCommit屬性爲false,提供對事務的支持,然後顯式地調用commit或rollback方法提交或囬滾事務

連接池的實現
連接池通常包括連接池類(DBConnectionPool)和連接池管理類(DBConnectionPoolManager)。目前流行的開源連接池有如下兩個:DBCP和C3P0
1.DBCP連接池
使用這個連接池要在系統中增加兩個jar文件:commons-dbcp-1.2.1.jar(連接池的實現)和commons-pool.jar(連接池的依賴庫),通過DBCP連接池得到數據庫連接代碼如下:
BasicDataSource ds=new BasicDataSource();
ds.setDriverClassName(“C”);ds.setUrl(“U”);ds.setUsername(“N”);ds.setPassword(“P”);ds.getConnection();
2.C3P0連接池
使用C3P0要到這個實現類包:c3p0-0.8.5.2.jar
ComboPooledDataSource ds =new ComboPooledDataSource();
ds.setDriverClassName(“C”);ds.setJdbcUrl(“U”);ds.setUsername(“N”);ds.setPassword(“P”);ds.getConnection();

Spring的JDBC體系
1.Spring的JDBC封裝。JDBC封裝的核心JdbcTemplate,牠幫助建立Statement,使用Statement執行命令,衹需提供SQL命令,無須關心連接的建立和關閉,無須關心Statement的創建和釋放。JdbcTemplate提供系列方法來簡化數據庫的訪問,具體方法請使用Eclipse的提示。
2.JDBC封裝的回調接口(我認爲囬調這個詞很形象,就是封裝了JDBC又囬調不封裝了)
使用囬調接口,允許在Spring的JDBC抽象體系內,使用原生JDBC查詢,有如下幾種囬調接口:
A.CallableStatementCallBack:可以使用原生的JDBC命令調用存儲過程和函數
B.CallableStatementCreator:用來獲得CallableStatementCallBack對 象
C.PreparedStatementCallback:可以使用原生的JDBC命令訪問數據庫
D.PreparedStatementCreator:用來獲得PreparedStatementCallback對象
E.StatementCallback:類似於PreparedStatementCallback,但沒有預編譯功能

Spring的JDBC和傳統的JDBC對比
簡化了數據庫的訪問、優秀的面向對象的操作方式、一致的異常繼承體系,無須捕捉JDBC特定的數據庫異常

使用JdbcTemplate訪問數據庫
//以下的訪問方式還不如上一章中的使JDBC DAO支持體系
ComboPooledDataSource ds=new ComboPooledDataSource();
ds.setDriverClass(“”);………..
JdbcTemplate jt=new JdbcTemplate();
jt.setDataSource(ds);
List nameList=jt.queryForList(“select name from …”);
//執行簡單的DDL。
jt.execute(“drop table if exists wawa”);
//使用StatementCallback訪問數據庫,該接口衹有一個方法需要實現:Object doInStatement(Statement stmt)throws //SQLException
jt.excecute(new StatementCallback(){
public Object doInStatement(Statement stmt)throws SQLException{
stmt.execute(“update …”);
}
});
//使用PreparedStatementCallback,實現這個接口也衹要實現一個方法:
Object doInPreparedStatement(PreparedStatement pstmt)throws SQLException,DataAccessException;
jt.excecute(“update…”,new StatementCallback(){
public Object doInPreparedStatement(PreparedStatement pstmt)throws SQLException{
pstmt.setString(1,””);
pstmt.execute();
}
});

連接數據庫的輔助類
衹要是用來連接數據庫的
1.使用數據源工具類(DataSourceUtils)
ComboPooledDataSource ds=new ComboPooledDataSource();
ds.setDriverClass(“”);………..
Connection conn=DataSourceUtils.getConnection(ds);
這與通過DataSource的getConnection獲取數據庫連接相比,前者是智能的,可以在必要是自動關閉連接,無須手動關閉
2.智能數據源(SmartDataSource)接口介紹
SmartDataSource繼承DataSource接口,它墜子提供DataSource的基本方法之外,還提供一個額外的功能:在恰當的時候關閉連接,它通過boolean shouldClose(Connection con)返回true時關閉連接
3.單連接數據源SingleConnectionDataSource
牠實現了SmartDataSource接口,它是單連接的DataSource,這個連接衹有銷毀SingleConnectionDataSource時才會關閉,牠主要作用是用來測試
SingleConnectionDataSource ds=new SingleConnectionDataSource();
ds.setDriverClassName(“C..”);
Connection conn=DataSourceUtils.getConnection(ds);
4.另一個數據源實現DriverManagerDataSource
牠繼承Spring的一個抽象類:AbstractDataSource,牠總是獲得新的連接,不會緩存連接,因此性能不好,主要的作用是用來測試
DriverManagerDataSourceds=new DriverManagerDataSource ();
ds.setDriverClassName(“C..”);
Connection conn=DataSourceUtils.getConnection(ds);

數據庫操作的對象化
對象化的操作由org.springframework.jdbc.object包中的類完成
查詢結果的對象化有如下兩种方法
1.使用RowMapper接口
2.使用MappingSqlQuery或MappingSqlQueryWithParameters
實現RowMapper接口衹有一個方法:
Object mapRow(ResultSet rs,int rowNum)throws SQLException
JdbcTemplate jt=new JdbcTemplate();
jt.setDataSource(ds);
List persionList=jt.query(“select *…”,new RowMapper(){
public Object mapRow(ResultSet rs,int rowNum)throws SQLException{
Person p=new Person();
p.setName(rs.getString(2));
}
});

查詢對象
查詢對象的父類是SqlQuery,通常使用牠的子類:MappingSqlQuery,MappingSqlQueryWithParameters和UpdatableSqlQuery。(我認爲可以把牠看作是一條封裝好原始SQL語句,返囬對象化結果的包裝好的SQL語句)。\
1.使用MappingSqlQuery,牠的子類必須實現mapRow(ResultSet int),把ResultSet的每一行轉換成對象
private class PersonMappingQuery extends MappingSqlQuery{
public PersonMappingQuery(DataSource ds){
super(ds,”select ….where p_age>?”);
super.declareParameter(new SqlParameter(“id”,Types.INTEGER));//參數類型
compile();//編譯
}
public Object mapRow(ResultSet rs, int rowNumber) throws SQLException
{
Person p = new Person();
p.setAge(rs.getInt(3));
p.setName(rs.getString(2));
return p;
}
}
使用方式:
PersonMappingQuery pmq=new PersonMappingQuery(ds);
Object[] values={new Integer(30)};
List personList=pmq.execute(values);
2.更新對象
更新對象通常繼承Sqlupdate類實現
class PersonUpdate extends SqlUpdate
{
public PersonUpdate(DataSource ds)
{
super(ds, "update person_test set p_name=’老人’ WHERE p_age > ?" );
super.declareParameter(new SqlParameter(“id”,Types.INTEGER));
compile();
}
}
使用方式:
PersonUpdate pmq = new PersonUpdate(ds);
Object[] values = {new Integer(30)};
int dd = pmq.update(values);
調用存儲過程或函數,略

分享到:
评论

相关推荐

    Java中JDBC连接数据库详解

    Java中JDBC连接数据库详解 Java中JDBC连接数据库详解是指Java程序使用JDBC(Java Database Connectivity)来连接和操作数据库的过程。JDBC是一种Java API,用于连接和操作数据库,它提供了一套标准化的接口,允许...

    JDBC连接数据库详解

    在本文中,我们将深入探讨如何使用JDBC连接MySQL数据库,并执行SQL查询。 首先,要连接到MySQL数据库,你需要引入JDBC驱动。在上述示例中,使用的驱动是`com.mysql.jdbc.Driver`,这是MySQL官方提供的JDBC驱动。在...

    JDBC连接数据库步骤及代码

    ### JDBC连接数据库步骤详解 #### 一、简介 在Java开发中,经常需要与数据库进行交互,例如查询数据、更新数据等操作。为了方便开发者进行这些操作,Sun公司推出了一套标准的Java访问数据库的API——Java Database...

    JDBC连接数据库各种数据库参数大全

    ### JDBC连接数据库各种数据库参数详解 #### 一、Oracle8/8i/9i数据库(thin模式) 在Java中通过JDBC访问Oracle数据库时,通常采用thin驱动方式。thin驱动是一种纯Java驱动,无需依赖任何非Java代码即可完成与...

    JDBC连接DB2数据库详解

    JDBC连接DB2数据库详解 — IT技术

    java jdbc连接数据库

    ### Java JDBC 连接数据库详解 #### 一、引言 在Java开发中,与数据库进行交互是一项非常常见的任务。JDBC(Java Database Connectivity)是Java中用来对关系型数据库进行统一访问的标准API,它为Java应用程序提供...

    java_JDBC连接数据库代码大全

    ### Java JDBC 连接数据库详解 #### 一、JDBC 概述 JDBC(Java Database Connectivity)是一种标准的 Java API,它允许开发者通过统一的接口来操作多种类型的数据库。这意味着,一旦掌握了 JDBC 的基本使用方法,...

    JDBC连接数据库里面有各数据库的应用说明

    ### JDBC连接数据库应用详解 #### 一、JDBC概述及DriverManager的作用 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一的访问接口。通过JDBC,Java应用程序...

    java JDBC连接数据库代码大全

    ### Java JDBC连接数据库代码大全详解 #### 一、JDBC基础概述 JDBC(Java Database Connectivity)是一种标准的Java API,允许Java程序连接并操作各种类型的数据库。它为开发人员提供了一种统一的方式,以便使用...

    JDBC连接数据库

    **Java JDBC连接数据库详解** Java Database Connectivity (JDBC) 是Java平台中用于与关系数据库进行交互的一种标准API。它提供了一套规范,使得Java开发者能够使用标准的Java语句来执行SQL命令,从而操作数据库。...

    JDBC操作数据库详解

    **JDBC操作数据库详解** Java Database Connectivity(JDBC)是Java平台中用于与关系数据库进行交互的一种标准接口。它是Java编程语言的一部分,允许应用程序通过Java代码来访问和处理数据库。本教程将深入讲解JDBC...

    JDBC连接数据库、增删改查

    根据提供的标题、描述和部分上下文内容,我们可以深入...以上就是关于JDBC连接数据库并进行增删改查操作的基础知识。这些内容对Java新手来说非常重要,掌握了这些技能后,就可以更高效地管理和操作数据库中的数据了。

    jdbc连接数据库

    ### JDBC 连接数据库知识点详解 #### 一、引言 在Java开发中,与数据库进行交互是一项基本且重要的任务。Java Database Connectivity (JDBC) 是一个Java API,它允许Java应用程序连接到几乎任何类型的数据库管理...

    JDBC不同数据库连接

    #### 二、JDBC 连接数据库的基本步骤 1. **加载驱动程序**:通过 `Class.forName()` 方法来加载相应的 JDBC 驱动。 2. **建立连接**:利用 DriverManager 的 `getConnection()` 方法建立到数据库的连接。 3. **执行...

    JDBC连接数据库步骤

    ### JDBC连接数据库步骤详解 #### 一、概述 在Java应用程序中,经常需要与数据库进行交互,例如查询、插入、更新或删除数据等操作。为了实现这些功能,Java提供了JDBC(Java Database Connectivity)技术,它允许...

    JDBC连数据库的步骤

    **JDBC连接数据库的步骤详解** Java Database Connectivity (JDBC) 是Java编程语言中用于与各种类型数据库交互的标准API。了解并熟练掌握JDBC连接数据库的步骤是每个Java开发人员的基础技能之一。以下是一个详尽的...

    JDBC连接所有代码

    **JDBC连接数据库详解** Java Database Connectivity (JDBC) 是Java平台中用于与关系型数据库交互的一组标准API。在Spring框架中,JDBC被用来简化数据库操作,提供了更高级别的抽象,使得开发者能更方便地处理数据...

    数据库实验JDBC连接数据库.docx

    ### 数据库实验JDBC连接数据库知识点 #### 一、实验目的 - **了解DBMS的各种语言接口编程方法:** - 数据库管理系统(DBMS)提供了多种编程接口,包括但不限于ODBC、JDBC等,这些接口允许应用程序通过标准的方式与...

Global site tag (gtag.js) - Google Analytics