JDBC學(xué)習(xí)入門看這一篇文章就夠了

一当叭、JDBC相關(guān)概念介紹

1.1、數(shù)據(jù)庫驅(qū)動(dòng)

這里的驅(qū)動(dòng)的概念和平時(shí)聽到的那種驅(qū)動(dòng)的概念是一樣的,比如平時(shí)購買的聲卡今妄,網(wǎng)卡直接插到計(jì)算機(jī)上面是不能用的,必須要安裝相應(yīng)的驅(qū)動(dòng)程序之后才能夠使用聲卡和網(wǎng)卡,同樣道理盾鳞,我們安裝好數(shù)據(jù)庫之后犬性,我們的應(yīng)用程序也是不能直接使用數(shù)據(jù)庫的,必須要通過相應(yīng)的數(shù)據(jù)庫驅(qū)動(dòng)程序腾仅,通過驅(qū)動(dòng)程序去和數(shù)據(jù)庫打交道乒裆,如下所示:

1.2、JDBC介紹

SUN公司為了簡(jiǎn)化推励、統(tǒng)一對(duì)數(shù)據(jù)庫的操作鹤耍,定義了一套Java操作數(shù)據(jù)庫的規(guī)范(接口),稱之為JDBC验辞。這套接口由數(shù)據(jù)庫廠商去實(shí)現(xiàn)稿黄,這樣,開發(fā)人員只需要學(xué)習(xí)jdbc接口跌造,并通過jdbc加載具體的驅(qū)動(dòng)杆怕,就可以操作數(shù)據(jù)庫。

如下圖所示:

JDBC全稱為:Java Data Base Connectivity(java數(shù)據(jù)庫連接)壳贪,它主要由接口組成陵珍。
  組成JDBC的2個(gè)包:
   java.sql
   javax.sql
  開發(fā)JDBC應(yīng)用需要以上2個(gè)包的支持外,還需要導(dǎo)入相應(yīng)JDBC的數(shù)據(jù)庫實(shí)現(xiàn)(即數(shù)據(jù)庫驅(qū)動(dòng))违施。

二撑教、編寫JDBC程序

2.1、搭建實(shí)驗(yàn)環(huán)境

1醉拓、在mysql中創(chuàng)建一個(gè)庫,并創(chuàng)建user表和插入表的數(shù)據(jù)收苏。

SQL腳本如下:

create database jdbcStudy character set utf8 collate utf8_general_ci;

use jdbcStudy;

create table users(
    id int primary key,
    name varchar(40),
    password varchar(40),
    email varchar(60),
    birthday date
);

insert into users(id,name,password,email,birthday) values(1,'zhansan','123456','zs@sina.com','1980-12-04');
insert into users(id,name,password,email,birthday) values(2,'lisi','123456','lisi@sina.com','1981-12-04');
insert into users(id,name,password,email,birthday) values(3,'wangwu','123456','wangwu@sina.com','1979-12-04');

2亿卤、新建一個(gè)Java工程,并導(dǎo)入數(shù)據(jù)驅(qū)動(dòng)鹿霸。

  

3排吴、編寫程序從user表中讀取數(shù)據(jù),并打印在命令行窗口中懦鼠。
  具體代碼如下:

package me.gacl.demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JdbcFirstDemo {

    public static void main(String[] args) throws Exception {
        //要連接的數(shù)據(jù)庫URL
        String url = "jdbc:mysql://localhost:3306/jdbcStudy";
        //連接的數(shù)據(jù)庫時(shí)使用的用戶名
        String username = "root";
        //連接的數(shù)據(jù)庫時(shí)使用的密碼
        String password = "XDP";

        //1.加載驅(qū)動(dòng)
        //DriverManager.registerDriver(new com.mysql.jdbc.Driver());不推薦使用這種方式來加載驅(qū)動(dòng)
        Class.forName("com.mysql.jdbc.Driver");//推薦使用這種方式來加載驅(qū)動(dòng)
        //2.獲取與數(shù)據(jù)庫的鏈接
        Connection conn = DriverManager.getConnection(url, username, password);

        //3.獲取用于向數(shù)據(jù)庫發(fā)送sql語句的statement
        Statement st = conn.createStatement();

        String sql = "select id,name,password,email,birthday from users";
        //4.向數(shù)據(jù)庫發(fā)sql,并獲取代表結(jié)果集的resultset
        ResultSet rs = st.executeQuery(sql);

        //5.取出結(jié)果集的數(shù)據(jù)
        while(rs.next()){
            System.out.println("id=" + rs.getObject("id"));
            System.out.println("name=" + rs.getObject("name"));
            System.out.println("password=" + rs.getObject("password"));
            System.out.println("email=" + rs.getObject("email"));
            System.out.println("birthday=" + rs.getObject("birthday"));
        }

        //6.關(guān)閉鏈接钻哩,釋放資源
        rs.close();
        st.close();
        conn.close();
    }
}

運(yùn)行結(jié)果如下:

2.2、DriverManager類講解

Jdbc程序中的DriverManager用于加載驅(qū)動(dòng)肛冶,并創(chuàng)建與數(shù)據(jù)庫的鏈接街氢,這個(gè)API的常用方法:

  1. DriverManager.registerDriver(new Driver())
  2. DriverManager.getConnection(url, user, password),

注意:在實(shí)際開發(fā)中并不推薦采用registerDriver方法注冊(cè)驅(qū)動(dòng)睦袖。原因有二:
    1珊肃、查看Driver的源代碼可以看到,如果采用此種方式,會(huì)導(dǎo)致驅(qū)動(dòng)程序注冊(cè)兩次伦乔,也就是在內(nèi)存中會(huì)有兩個(gè)Driver對(duì)象厉亏。
    2、程序依賴mysql的api烈和,脫離mysql的jar包爱只,程序?qū)o法編譯,將來程序切換底層數(shù)據(jù)庫將會(huì)非常麻煩招刹。

推薦方式:Class.forName("com.mysql.jdbc.Driver");
  采用此種方式不會(huì)導(dǎo)致驅(qū)動(dòng)對(duì)象在內(nèi)存中重復(fù)出現(xiàn)恬试,并且采用此種方式,程序僅僅只需要一個(gè)字符串蔗喂,不需要依賴具體的驅(qū)動(dòng)忘渔,使程序的靈活性更高。

2.3缰儿、數(shù)據(jù)庫URL講解

URL用于標(biāo)識(shí)數(shù)據(jù)庫的位置畦粮,通過URL地址告訴JDBC程序連接哪個(gè)數(shù)據(jù)庫,URL的寫法為:

常用數(shù)據(jù)庫URL地址的寫法:

  • Oracle寫法:jdbc:oracle:thin:@localhost:1521:sid
  • SqlServer寫法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
  • MySql寫法:jdbc:mysql://localhost:3306/sid

如果連接的是本地的Mysql數(shù)據(jù)庫乖阵,并且連接使用的端口是3306宣赔,那么的url地址可以簡(jiǎn)寫為: jdbc:mysql:///數(shù)據(jù)庫

2.4、Connection類講解

Jdbc程序中的Connection瞪浸,它用于代表數(shù)據(jù)庫的鏈接儒将,Collection是數(shù)據(jù)庫編程中最重要的一個(gè)對(duì)象,客戶端與數(shù)據(jù)庫所有交互都是通過connection對(duì)象完成的对蒲,這個(gè)對(duì)象的常用方法:

  • createStatement():創(chuàng)建向數(shù)據(jù)庫發(fā)送sql的statement對(duì)象钩蚊。
  • prepareStatement(sql) :創(chuàng)建向數(shù)據(jù)庫發(fā)送預(yù)編譯sql的PrepareSatement對(duì)象。
  • prepareCall(sql):創(chuàng)建執(zhí)行存儲(chǔ)過程的callableStatement對(duì)象蹈矮。
  • setAutoCommit(boolean autoCommit):設(shè)置事務(wù)是否自動(dòng)提交砰逻。
  • commit() :在鏈接上提交事務(wù)。
  • rollback() :在此鏈接上回滾事務(wù)泛鸟。

2.5蝠咆、Statement類講解

Jdbc程序中的Statement對(duì)象用于向數(shù)據(jù)庫發(fā)送SQL語句, Statement對(duì)象常用方法:

  • executeQuery(String sql) :用于向數(shù)據(jù)發(fā)送查詢語句北滥。
  • executeUpdate(String sql):用于向數(shù)據(jù)庫發(fā)送insert刚操、update或delete語句
  • execute(String sql):用于向數(shù)據(jù)庫發(fā)送任意sql語句
  • addBatch(String sql) :把多條sql語句放到一個(gè)批處理中。
  • executeBatch():向數(shù)據(jù)庫發(fā)送一批sql語句執(zhí)行再芋。

2.6菊霜、ResultSet類講解

Jdbc程序中的ResultSet用于代表Sql語句的執(zhí)行結(jié)果。Resultset封裝執(zhí)行結(jié)果時(shí)济赎,采用的類似于表格的方式占卧。ResultSet 對(duì)象維護(hù)了一個(gè)指向表格數(shù)據(jù)行的游標(biāo)遗菠,初始的時(shí)候,游標(biāo)在第一行之前华蜒,調(diào)用ResultSet.next() 方法辙纬,可以使游標(biāo)指向具體的數(shù)據(jù)行,進(jìn)行調(diào)用方法獲取該行的數(shù)據(jù)叭喜。
  ResultSet既然用于封裝執(zhí)行結(jié)果的贺拣,所以該對(duì)象提供的都是用于獲取數(shù)據(jù)的get方法:
  獲取任意類型的數(shù)據(jù)
    getObject(int index)
    getObject(string columnName)
  獲取指定類型的數(shù)據(jù),例如:
    getString(int index)
    getString(String columnName)

ResultSet還提供了對(duì)結(jié)果集進(jìn)行滾動(dòng)的方法:

  • next():移動(dòng)到下一行
  • Previous():移動(dòng)到前一行
  • absolute(int row):移動(dòng)到指定行
  • beforeFirst():移動(dòng)resultSet的最前面捂蕴。
  • afterLast() :移動(dòng)到resultSet的最后面譬涡。

2.7、釋放資源

Jdbc程序運(yùn)行完后啥辨,切記要釋放程序在運(yùn)行過程中涡匀,創(chuàng)建的那些與數(shù)據(jù)庫進(jìn)行交互的對(duì)象,這些對(duì)象通常是ResultSet, Statement和Connection對(duì)象溉知,特別是Connection對(duì)象陨瘩,它是非常稀有的資源,用完后必須馬上釋放级乍,如果Connection不能及時(shí)舌劳、正確的關(guān)閉,極易導(dǎo)致系統(tǒng)宕機(jī)玫荣。Connection的使用原則是盡量晚創(chuàng)建甚淡,盡量早的釋放。
  為確保資源釋放代碼能運(yùn)行捅厂,資源釋放代碼也一定要放在finally語句中贯卦。

三、總結(jié)

如果覺得本文對(duì)你有幫助的話焙贷,請(qǐng)你也不要吝嗇你的贊脸侥,你們的支持是對(duì)我最大的鼓勵(lì)。今天的Java知識(shí)分享就到這里盈厘!想要知道更多Java基礎(chǔ)知識(shí)和面試資料的我這邊整理了一個(gè)我自己的GitHub倉庫:Java小白修煉手冊(cè),大家如果有需要可以自行查看

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末官边,一起剝皮案震驚了整個(gè)濱河市沸手,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌注簿,老刑警劉巖契吉,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異诡渴,居然都是意外死亡捐晶,警方通過查閱死者的電腦和手機(jī)菲语,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惑灵,“玉大人山上,你說我怎么就攤上這事∮⒅В” “怎么了佩憾?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)干花。 經(jīng)常有香客問我妄帘,道長(zhǎng),這世上最難降的妖魔是什么池凄? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任抡驼,我火速辦了婚禮,結(jié)果婚禮上肿仑,老公的妹妹穿的比我還像新娘致盟。我一直安慰自己,他們只是感情好柏副,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布勾邦。 她就那樣靜靜地躺著,像睡著了一般割择。 火紅的嫁衣襯著肌膚如雪眷篇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天荔泳,我揣著相機(jī)與錄音蕉饼,去河邊找鬼。 笑死玛歌,一個(gè)胖子當(dāng)著我的面吹牛昧港,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播支子,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼创肥,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了值朋?” 一聲冷哼從身側(cè)響起叹侄,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昨登,沒想到半個(gè)月后趾代,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丰辣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年撒强,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了禽捆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琉预。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡这刷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出暂衡,到底是詐尸還是另有隱情杖玲,我是刑警寧澤顿仇,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站摆马,受9級(jí)特大地震影響臼闻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜囤采,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一述呐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蕉毯,春花似錦乓搬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棉磨,卻和暖如春江掩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乘瓤。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工环形, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衙傀。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓抬吟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親统抬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子火本,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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