jdbc與java數(shù)據(jù)庫編程知識(shí)整理

JDBC概述

?什么是JDBC

JDBC(Java DataBase Connectivity)

稱為Java數(shù)據(jù)庫連接斥赋,它是一種用于數(shù)據(jù)庫訪問的應(yīng)用程序API,由一組用Java語言編寫的類和接口組成,有了JDBC就可以用同一的語法對(duì)多種關(guān)系數(shù)據(jù)庫進(jìn)行訪問夺颤,而不用擔(dān)心其數(shù)據(jù)庫操作語言的差異镣奋。

?JDBC的結(jié)構(gòu)可劃分為兩層:

JDBC Driver Interface(驅(qū)動(dòng)程序管理器接口)

JDBC API

?JDBC優(yōu)缺點(diǎn)

–優(yōu)點(diǎn):

?JDBC使得編程人員從復(fù)雜的驅(qū)動(dòng)器調(diào)用命令和函數(shù)中解脫出來后豫,可以致力于應(yīng)用程序中的關(guān)鍵地方悉尾。

?JDBC支持不同的關(guān)系數(shù)據(jù)庫,這使得程序的可移植性大大加強(qiáng)挫酿。

?JDBC API是面向?qū)ο蟮墓姑校梢宰層脩舭殉S玫姆椒ǚ庋b為—個(gè)類,以備后用

–缺點(diǎn):

?使用JDBC早龟,訪問數(shù)據(jù)記錄的速度會(huì)受到一定程度的影響惫霸。

?JDBC結(jié)構(gòu)中包含不同廠家的產(chǎn)品,這就給更改數(shù)據(jù)源帶來了很大的麻煩葱弟。

?JDBC核心接口與類

?JDBC核心類庫包含在java.sql包中壹店。

–類

?DriverManager:負(fù)責(zé)管理JDBC驅(qū)動(dòng)程序。使用JDBC驅(qū)動(dòng)程序之前芝加,必須先將驅(qū)動(dòng)程序加載并注冊(cè)后才可以使用硅卢,同時(shí)提供方法來建立與數(shù)據(jù)庫的連接。

?SQLException-有關(guān)數(shù)據(jù)庫操作的異常

–接口:

?Connection:特定數(shù)據(jù)庫的連接(會(huì)話)藏杖。在連接上下文中執(zhí)行SQL語句并返回結(jié)果将塑。

?PreparedStatement:表示預(yù)編譯的 SQL 語句的對(duì)象。

?Statement:用于執(zhí)行靜態(tài) SQL 語句并返回它所生成結(jié)果的對(duì)象蝌麸。

?ResultSet :表示數(shù)據(jù)庫結(jié)果集的數(shù)據(jù)表点寥,通常通過執(zhí)行查詢數(shù)據(jù)庫的語句生成 。

?CallableStatement :用于執(zhí)行 SQL 存儲(chǔ)過程的接口 来吩。

創(chuàng)建JDBC應(yīng)用

?創(chuàng)建JDBC應(yīng)用程序的步驟

–1.載入JDBC驅(qū)動(dòng)程序

–2.定義連接URL

–3.建立連接

–4.創(chuàng)建Statement對(duì)象

–5.執(zhí)行查詢或更新

–6.結(jié)果處理

–7.關(guān)閉連接

?數(shù)據(jù)庫驅(qū)動(dòng)程序

–數(shù)據(jù)庫驅(qū)動(dòng)程序分類

?Type 1: jdbc-odbc橋

–把JDBC API調(diào)用轉(zhuǎn)換成ODBC API 調(diào)用, 然后ODBC API調(diào)用針對(duì)供應(yīng)商的ODBC 驅(qū)動(dòng)程序來訪問數(shù)據(jù)庫, 即利用JDBC- ODBC 橋通過ODBC來存儲(chǔ)數(shù)據(jù)源 敢辩。

?Type 2: 本地API驅(qū)動(dòng)

–本地api驅(qū)動(dòng)直接把jdbc調(diào)用轉(zhuǎn)變?yōu)閿?shù)據(jù)庫的標(biāo)準(zhǔn)調(diào)用再去訪問數(shù)據(jù)庫. 這種方法需要本地?cái)?shù)據(jù)庫驅(qū)動(dòng)代碼。訊误褪。

?Type 3: 網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)

–它使用一種與具體數(shù)據(jù)庫無關(guān)的協(xié)議將數(shù)據(jù)庫請(qǐng)求發(fā)送給一個(gè)中間服務(wù)器责鳍。

?Type 4: 本地協(xié)議驅(qū)動(dòng)

– 這種驅(qū)動(dòng)直接把jdbc調(diào)用轉(zhuǎn)換為符合相關(guān)數(shù)據(jù)庫系統(tǒng)規(guī)范的請(qǐng)求.由于4型驅(qū)動(dòng)寫的應(yīng)用可以直接和數(shù)據(jù)庫服務(wù)器通訊,這種類型的驅(qū)動(dòng)完全由java實(shí)現(xiàn)兽间,因此實(shí)現(xiàn)了平臺(tái)獨(dú)立性。

?通常開發(fā)中多采用第四種方式正塌,這種驅(qū)動(dòng)不需要先把jdbc的調(diào)用傳給odbc或本地?cái)?shù)據(jù)庫接口或者是中間層服務(wù)器嘀略,所以它的執(zhí)行效率是非常高的驅(qū)動(dòng)

?數(shù)據(jù)庫驅(qū)動(dòng)程序

–各數(shù)據(jù)庫廠商均提供對(duì) JDBC 的支持,即提供數(shù)據(jù)庫連接使用的驅(qū)動(dòng)程序文件

–需要為數(shù)據(jù)庫應(yīng)用程序正確加載驅(qū)動(dòng)程序文件以獲得數(shù)據(jù)庫連接乓诽,實(shí)施操作

–Oracle 數(shù)據(jù)庫的 JDBC 驅(qū)動(dòng)程序文件 “ojdbc14.jar”(Oracle官方網(wǎng)站下載)

?加載 JDBC 驅(qū)動(dòng)程序

–Class 類中提供加載驅(qū)動(dòng)程序的方法:

className-表示類的描述符的字符串

–Oracle 驅(qū)動(dòng)的類描述符為:

public static Class forName(String className) throws ClassNotFoundException

oracle.jdbc.driver.OracleDriver

–示例:

–在工程主類 JdbcOracleTest 的 main 方法中增加加載 Oracle 驅(qū)動(dòng)的代碼:

?聲明表示 Oracle 驅(qū)動(dòng)類描述符的字符串變量 driver

?調(diào)用 Class 類的靜態(tài)方法 forName 加載該驅(qū)動(dòng)(注意異常處理)

?建立與數(shù)據(jù)庫的連接

–DriverManager 類提供 getConnection 方法可獲得指定數(shù)據(jù)庫的連接對(duì)象:

–Oracle 數(shù)據(jù)庫的 url 格式為:

public static Connection getConnection (String url, String userName, String password) throws SQLException

jdbc:oracle:thin:@<主機(jī)名或IP>:1521:<數(shù)據(jù)庫名>

–示例

–修改類 JdbcOracleTest 的 main 方法:

?聲明表示指定數(shù)據(jù)庫url的字符串變量 url

?分別聲明表示用戶名和口令的字符串變量 userName 和 password帜羊,分別初始化為 "SCOTT" 和 "TIGER“

?聲明Connection接口對(duì)象con,賦值為 DriverManager類的getConnection方法的返回值

?輸出打印 “數(shù)據(jù)庫連接成功” 的提示信息

?獲得 Statement 對(duì)象

–Connection接口中提供可獲得 Statement 對(duì)象的方法:

–可調(diào)用重載的 createStatement 方法鸠天,可指定參數(shù)讼育,設(shè)置數(shù)據(jù)庫操作結(jié)果的相關(guān)屬性。

?執(zhí)行 SQL 語句

–Statement接口提供可執(zhí)行 SQL 命令的方法:

boolean execute(String sql) throws SQLException

ResultSet executeQuery(String sql) throws SQLException

int executeUpdate(String sql) throws SQLException

–示例(查詢)

–在工程主類 JdbcOracleTest 的 main 方法中增加操作數(shù)據(jù)庫的代碼:

?獲得可發(fā)送SQL命令的Statement對(duì)象st

?調(diào)用對(duì)象st的excuteQuery方法發(fā)送SQL查詢命令,查詢SCOTT下的表DEPT奶段,獲得所有記錄數(shù)據(jù)饥瓷,返回結(jié)果集對(duì)象rs

?操作結(jié)果集對(duì)象

–ResultSet接口提供可對(duì)結(jié)果集進(jìn)行操作的方法:

?移動(dòng)結(jié)果集操作指針:

?指定數(shù)據(jù)類型根據(jù)傳入列的名字獲取指定列的值:

?指定數(shù)據(jù)類型根據(jù)傳入列的編號(hào)獲取指定列的值:

boolean next() throws SQLException

Xxx getXxx(String columnName) throws SQLException

Xxx getXxx(1) throws SQLException

?關(guān)閉操作對(duì)象及連接

?可調(diào)用接口ResultSet、Statement痹籍、Connection 中的關(guān)閉方法呢铆,立即釋放數(shù)據(jù)庫和 JDBC 相關(guān)資源:

void close() throws SQLException

–示例

–在工程主類 JdbcOracleTest 的 main 方法中增加關(guān)閉數(shù)據(jù)庫操作對(duì)象的代碼:

?關(guān)閉結(jié)果集對(duì)象 rs

?關(guān)閉 Statement 對(duì)象 st

?關(guān)閉 Connection 對(duì)象 con

?JDBC日期時(shí)間處理

?對(duì)于數(shù)據(jù)庫種不同的時(shí)間類型,要分別采用與之相對(duì)應(yīng)的Java包裝類來存取:

–日期類型用java.sql.Date

–時(shí)間類型用java.sql.Time

–日期/時(shí)間類型用java.sql.Timestamp蹲缠;

–getTimestamp()可以把年月日時(shí)分秒都取出來棺克,getDate()只能取出年月日,getTime()只能取出時(shí)分秒线定。

?JDBC的日期/時(shí)間類型轉(zhuǎn)換為字符串

–Timestamp timeStamp = //通過數(shù)據(jù)庫訪問獲取到該數(shù)據(jù)

–SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

–String str = sdf.format(timeStamp);

?java.sql.Timestamp如何轉(zhuǎn)換為java.util.Date

–java.sql.Timestamp是java.util.Date的子類娜谊,不需要做任何轉(zhuǎn)換直接賦值即可:

–java.sql.Timestamp ts;

–java.util.Date utilDate;

–utilDate = ts;

?java.util.Date如何轉(zhuǎn)換為java.sql.Timestamp

–java.util.Date是java.sql.Timestamp的父類,要這樣轉(zhuǎn)換:

–java.sql.Timestamp ts;

–java.util.Date utilDate;

–ts.setTime(utilDate.getTime());

?PreparedStatement接口

–PreparedStatement接口是Statement接口的子接口斤讥,允許使用不同的參數(shù)多次執(zhí)行同樣的 SQL 語句因俐。

–Connection接口提供創(chuàng)建PreparedStatement對(duì)象的方法,可指定SQL語句:

PreparedStatement prepareStatement(String sql) throws SQLException

PreparedStatement pstmt = con.prepareStatement ("INSERT INTO EMP VALUES(?,?)"); pstmt.setInt(1, 99); pstmt.setString(2, "Tom"); int count = pstmt.executeUpdate( );

?PreparedStatement接口優(yōu)點(diǎn):

–可動(dòng)態(tài)設(shè)置參數(shù)

–增加了預(yù)編譯功能

–提高執(zhí)行速度

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末周偎,一起剝皮案震驚了整個(gè)濱河市抹剩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蓉坎,老刑警劉巖澳眷,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蛉艾,居然都是意外死亡钳踊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門勿侯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拓瞪,“玉大人,你說我怎么就攤上這事助琐〖拦。” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵兵钮,是天一觀的道長(zhǎng)蛆橡。 經(jīng)常有香客問我,道長(zhǎng)掘譬,這世上最難降的妖魔是什么泰演? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮葱轩,結(jié)果婚禮上睦焕,老公的妹妹穿的比我還像新娘藐握。我一直安慰自己,他們只是感情好垃喊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布猾普。 她就那樣靜靜地躺著,像睡著了一般缔御。 火紅的嫁衣襯著肌膚如雪抬闷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天耕突,我揣著相機(jī)與錄音笤成,去河邊找鬼。 笑死眷茁,一個(gè)胖子當(dāng)著我的面吹牛炕泳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播上祈,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼培遵,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了登刺?” 一聲冷哼從身側(cè)響起籽腕,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纸俭,沒想到半個(gè)月后皇耗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡揍很,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年郎楼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窒悔。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呜袁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出简珠,到底是詐尸還是另有隱情阶界,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布北救,位于F島的核電站荐操,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏珍策。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一宅倒、第九天 我趴在偏房一處隱蔽的房頂上張望攘宙。 院中可真熱鬧,春花似錦、人聲如沸蹭劈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铺韧。三九已至多矮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哈打,已是汗流浹背塔逃。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留料仗,地道東北人湾盗。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像立轧,于是被迫代替她去往敵國(guó)和親格粪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法氛改,類相關(guān)的語法帐萎,內(nèi)部類的語法,繼承相關(guān)的語法胜卤,異常的語法疆导,線程的語...
    子非魚_t_閱讀 31,587評(píng)論 18 399
  • 本人的環(huán)境為Myeclipse10、MySQL5.7.15 本文包括:簡(jiǎn)介JDBC編程步驟打通數(shù)據(jù)庫程序詳解—Dr...
    廖少少閱讀 3,930評(píng)論 7 39
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理瑰艘,服務(wù)發(fā)現(xiàn)是鬼,斷路器,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 對(duì)于寺廟紫新,對(duì)于出家人均蜜,大部份人如未上出家班之前的我一樣,對(duì)寺廟芒率、對(duì)佛法是陌生的囤耳,對(duì)寺廟的生活是好奇的。那么偶芍,借此機(jī)...
    當(dāng)時(shí)明月在zh閱讀 3,746評(píng)論 31 31
  • 翻看新聞匪蟀,其中有寫到貧困地區(qū)的一群“少女媽媽”椎麦。 有一位16歲的媽媽(化名:阿蘭)抱著剛出生的孩子還一臉天真地說:...
    因兒閱讀 283評(píng)論 0 0