`
烟的傀儡
  • 浏览: 26947 次
  • 性别: 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);
調用存儲過程或函數,略

分享到:
评论

相关推荐

    JDBC连接数据库详解

    这个主要是讲的如何连接数据库的关键代码,这边采用的是连接MYSQL的代码,其他代码类似

    JDBC连接DB2数据库详解

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

    Java中JDBC连接数据库详解

    本文主要介绍了JDBC连接数据库的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧

    JDBC连接DB2数据库详解.doc--转载

    关于DB2数据库的JDBC连接文章有很多,比较出名的有诸如“JDBC数据库连接大全”和“JSP的DB2连接数据库”,虽然都是很详细的资料,也...我就这两天的经验给大家写一篇关于JDBC连接数据库的文章,以解决一部分人的疑问。

    JAVA连接数据库操作的详解(JDBC)

    JAVA连接数据库操作的详解(JDBC),JDBC详尽的PPT入门教程

    Jdbc连接数据库基本步骤详解

    主要为大家详细介绍了Jdbc连接数据库的基本步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    java如何连接数据库jdbc详解

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

    数据库连接JDBC详解

    JDBC 从物理结构上说就是Java 语言访问数据库的一套接口集合。从本质上来说就是调 用者(程序员)和实行者(数据库厂商)之间的协议。...类和接口组成,使得开发人员可以使用纯Java 的方式来连接数据库,并进行操作

    java 中JDBC连接数据库代码和步骤详解及实例代码

    主要介绍了java 中JDBC连接数据库代码和步骤详解及实例代码的相关资料,需要的朋友可以参考下

    jdbc连接数据库实例详解

    在本篇内容里小编给大家分享了关于jdbc如何连接数据库的相关知识点内容,需要的朋友们学习下。

    jdbc操作数据库的基本流程详解

    所有的JDBC应用程序都具有下面的基本流程: 1、加载数据库驱动并建立到数据库的连接。 2、执行SQL语句。 3、处理结果。 4、从数据库断开连接释放资源。下面我们就来仔细看一看每一个步骤:其实按照上面所说每个...

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

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

    JDBC 连接MySQL数据库的一系列详细步骤

    JDBC 连接MySQL数据库的一系列详细步骤,包括JDBC API详解 1.DriverManager 2.Connection 3.Statement 4.ResultSet 5.PrepareStatement

    Spring 数据库连接池(JDBC)详解

    本篇文章主要介绍了基于Spring的JDBC基本框架搭建;基于Spring的JDBC增删改查;读取配置文件中的数据等,具有很好的参考价值。下面跟着小编一起来看下吧

    JDBC讲解详解详解详解

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

    jdbc连接oracle数据库两种方式源代码(myeclipse10.0版本)

    完全自己制作演示,有csdn博客详解,两种jdbc连接池方式,附带mysql、sqlserver连接配置注释,方便学习。欢迎下载,csdn博客地址https://mp.csdn.net/mdeditor/85070892

    JDBC数据库连接

    JDBC数据库连接原理和开发代码详解 oracle MYSQL等

    JDBC连接MySQL数据库批量插入数据过程详解

    主要介绍了JDBC连接MySQL数据库批量插入数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    UJOB项目-MySQL讲解及创建数据库表

    02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv 02C 创建项目并实现JDBC访问数据库.wmv 03A ORM实现数据的保存.wmv 03B ORM实现数据的保存.wmv 03C ORM实现数据的保存.wmv 04 ORM实现...

Global site tag (gtag.js) - Google Analytics