jdbc的理論概述,連接數(shù)據(jù)庫(kù)代碼和步驟

數(shù)據(jù)連接步驟
  • 注冊(cè)驅(qū)動(dòng)(只做一次)
  • 建立連接(Connection)
  • 創(chuàng)建執(zhí)行SQL的語(yǔ)句(Statament)
  • 執(zhí)行語(yǔ)句
  • 處理執(zhí)行結(jié)果(Result)
  • 釋放資源
1.JDBC連接數(shù)據(jù)庫(kù)

a.加載JDBC驅(qū)動(dòng)程序
在連接數(shù)據(jù)庫(kù)之前,首先要加載想要連接的數(shù)據(jù)庫(kù)驅(qū)動(dòng)到JVM通常使用
b.java.lang.Class類的靜態(tài)方法forName實(shí)現(xiàn)

  • 推薦使用這種方式不會(huì)對(duì)具體的驅(qū)動(dòng)類產(chǎn)生依賴
    Class.forName("com.mysql.jdbc.Driver");
  • 會(huì)造成DriverManager中產(chǎn)生一兩個(gè)一樣的驅(qū)動(dòng),并會(huì)對(duì)驅(qū)動(dòng)類產(chǎn)生依賴
    DriverManager.registerDriver(com.mysql.jdbc.Driver);
  • 雖然不會(huì)產(chǎn)生具體的驅(qū)動(dòng)類產(chǎn)生依賴,但是注冊(cè)不太方便,基本不使用
    System.setPropertry("jdb.drivers","driver1:driver2");
    例如:
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("找不到驅(qū)動(dòng)類,注冊(cè)失敗!");
            e.printStackTrace();
        }
    }
    
    成功加載后,會(huì)將Driver類的實(shí)例注冊(cè)到DriverManager類中.
2.建立連接(Connection)
  • 連接url定義了連接數(shù)據(jù)庫(kù)時(shí)的協(xié)議/子協(xié)議/數(shù)據(jù)源標(biāo)識(shí).
  • 書寫格式:JDBC:子協(xié)議:子名稱//主機(jī)名:端口/數(shù)據(jù)庫(kù)名稱?屬性名=屬性值&.....
    協(xié)議:在JDBC中總是以jdbc開始
    子協(xié)議:是橋連接驅(qū)動(dòng)程序或是數(shù)據(jù)庫(kù)管理系統(tǒng)名稱.
    user,password可以用"屬性名=屬性值"方式告訴數(shù)據(jù)庫(kù).
    例如:
    "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
    

   ######創(chuàng)建連接數(shù)據(jù)庫(kù)
    - 要連接數(shù)據(jù)庫(kù),需要向DriverManager請(qǐng)求并獲得Connection對(duì)象,該對(duì)  象就代表一個(gè)數(shù)據(jù)庫(kù)的連接
    - 使用DriverManager的getConnection(String url,String username,String password)方法傳入指定要連接的數(shù)據(jù)庫(kù)的路徑,用戶名和密碼
例如:

//連接mysql 數(shù)據(jù)庫(kù),用戶名root.密碼0000
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
Stringpassword = "0000";
try{
Connection conn =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("數(shù)據(jù)庫(kù)連接失斂瓯俊!");
se.printStackTrace() ;
}


#####3.創(chuàng)建執(zhí)行SQL語(yǔ)句(Statement)

要執(zhí)行SQL語(yǔ)句,必須獲得java.sql.Statement實(shí)例,Statement實(shí)例分為以下3種類型
- 執(zhí)行靜態(tài)SQL語(yǔ)句,通常使用Statement實(shí)例實(shí)現(xiàn),
- 執(zhí)行動(dòng)態(tài)SQL語(yǔ)句,通常使用PreparedStatement實(shí)例實(shí)現(xiàn),
- 執(zhí)行數(shù)據(jù)庫(kù)存儲(chǔ)過程,通常使用CallableStatement實(shí)例實(shí)現(xiàn).

######具體實(shí)現(xiàn)方式如下:

Statement
- Statement st = conn.createStatement();
- st.executeQuery(sql);
PrepasredStatement
- String sql = "select * from user where name = ?";
- PreparedStatement ps = conn.PreparedStatement(sql);
- ps.setString(1,"col_value");
- ps.executeQuery();
CallableStatement
- CallableStatement cst = conn.prepareCall("{CALL demoSp(?,?)}");

####4.執(zhí)行SQL語(yǔ)句

Statement接口提供了三種SQL語(yǔ)句的方法:executeQuery,executeUpdate,execute.

- ResultSet executeQuery(String sqlString):執(zhí)行查詢數(shù)據(jù)庫(kù)的SQL語(yǔ)句,返回一個(gè)結(jié)果集對(duì)象
- int executeUpdate(String sqlString):用于執(zhí)行insert,update或者delete以及執(zhí)行SQL語(yǔ)句,如:create table和drop table等.

######實(shí)現(xiàn)代碼

String sql = "select id,name,password,email,birthday from user";
ResultSet rs = st.executeQuery(sql);
或者

ResultSet rs = st.executeQuery("select * from user");

以及
int i = st.executeQuery(String sql);


####5.處理執(zhí)行結(jié)果(ResultSet)
兩種情況:
a. 執(zhí)行更新返回本次操作影響到的記錄數(shù).
b.執(zhí)行查詢返回的結(jié)果是一個(gè)ResultSet對(duì)象

// 參數(shù)中的1是指sql中的列索引,使用列的具體來拿

  • while (rs.next()) {

         System.out.println(rs.getObject(1);
    

while(rs.next){
String name = rs.getString("name");
}

####6.釋放資源
操作完成以后要把所有使用的JDBC對(duì)象全部關(guān)閉,以釋放JDBC資源,關(guān)閉順序和開始順序相反.
數(shù)據(jù)庫(kù)連接是非常稀有的資源,用完后必須馬上釋放,如果Connection不能及時(shí)正確關(guān)閉導(dǎo)致系統(tǒng)宕機(jī),Connection的使用原則是盡量晚創(chuàng)建,盡量早的釋放.
#####關(guān)閉順序:
1.關(guān)閉結(jié)果集ResultSet
2.關(guān)閉聲明Statement
3.關(guān)閉連接Connection

try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末龟劲,一起剝皮案震驚了整個(gè)濱河市胃夏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昌跌,老刑警劉巖仰禀,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蚕愤,居然都是意外死亡答恶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門萍诱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悬嗓,“玉大人,你說我怎么就攤上這事裕坊“瘢” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵籍凝,是天一觀的道長(zhǎng)周瞎。 經(jīng)常有香客問我,道長(zhǎng)饵蒂,這世上最難降的妖魔是什么声诸? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮退盯,結(jié)果婚禮上彼乌,老公的妹妹穿的比我還像新娘。我一直安慰自己渊迁,他們只是感情好囤攀,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宫纬,像睡著了一般焚挠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漓骚,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天蝌衔,我揣著相機(jī)與錄音榛泛,去河邊找鬼。 笑死噩斟,一個(gè)胖子當(dāng)著我的面吹牛曹锨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剃允,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼沛简,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了斥废?” 一聲冷哼從身側(cè)響起椒楣,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牡肉,沒想到半個(gè)月后捧灰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡统锤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年毛俏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饲窿。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡煌寇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逾雄,到底是詐尸還是另有隱情唧席,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布嘲驾,位于F島的核電站淌哟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏辽故。R本人自食惡果不足惜徒仓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望誊垢。 院中可真熱鬧掉弛,春花似錦、人聲如沸喂走。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芋肠。三九已至乎芳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奈惑。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工吭净, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肴甸。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓寂殉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親原在。 傳聞我的和親對(duì)象是個(gè)殘疾皇子友扰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • 本人的環(huán)境為Myeclipse10、MySQL5.7.15 本文包括:簡(jiǎn)介JDBC編程步驟打通數(shù)據(jù)庫(kù)程序詳解—Dr...
    廖少少閱讀 3,933評(píng)論 7 39
  • JDBC概述 在Java中庶柿,數(shù)據(jù)庫(kù)存取技術(shù)可分為如下幾類:JDBC直接訪問數(shù)據(jù)庫(kù)村怪、JDO技術(shù)、第三方O/R工具澳泵,如...
    usopp閱讀 3,533評(píng)論 3 75
  • JDBC簡(jiǎn)介 SUN公司為了簡(jiǎn)化盟广、統(tǒng)一對(duì)數(shù)據(jù)庫(kù)的操作酝陈,定義了一套Java操作數(shù)據(jù)庫(kù)的規(guī)范立倍,稱之為JDBC弥姻。JDBC...
    奮斗的老王閱讀 1,507評(píng)論 0 51
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis 缅疟? MyBatis 是支持定制化 SQL梗顺、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,453評(píng)論 0 4
  • 這兩天更新pod 發(fā)現(xiàn)各種坑啊,使用了各種方法終于更新成功了. 下面說一下最后成功的方法: 首先更新gem sud...
    于桁閱讀 389評(píng)論 0 0