jdbc-Java數(shù)據(jù)庫連接

今天要做異構(gòu)系統(tǒng)的數(shù)據(jù)集成。之前做過webservice的歌焦。以及調(diào)用webapi淮捆。具體情況具體分析。之后把webservice和webapi單獨整理一下躯护。
此次場景是對方系統(tǒng)直接提供數(shù)據(jù)庫視圖惊来,地址,用戶名和密碼棺滞。我們系統(tǒng)去直接讀取數(shù)據(jù)裁蚁。相關(guān)api都有點生疏了,通過此次继准,整理一下jdbc相關(guān)知識枉证。

JDBC介紹

Java數(shù)據(jù)庫連接,(Java Database Connectivity移必,簡稱JDBC)是Java語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應(yīng)用程序接口室谚,提供了諸如查詢和更新數(shù)據(jù)庫中數(shù)據(jù)的方法。JDBC也是Sun Microsystems的商標(biāo)。我們通常說的JDBC是面向關(guān)系型數(shù)據(jù)庫的秒赤。

jdbc步驟

//1.加載驅(qū)動程序
//Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("com.mysql.jdbc.Driver");
//2.獲得數(shù)據(jù)庫的連接
//String url = "jdbc:sqlserver://ip地址:端口;databaseName=數(shù)據(jù)庫名;user=用戶名;password=密碼";
//String mysqlurl="jdbc:mysql://ip地址:端口/數(shù)據(jù)庫名?user=用戶名&password=密碼&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false";
//Connection conn = DriverManager.getConnection(mysqlurl);
Connection conn = DriverManager.getConnection(URL,USER,PASSWORD);
//3.操作數(shù)據(jù)庫
//獲取Statement對象
Statement stmt = conn.createStatement();
//4.執(zhí)行sql語句猪瞬,獲取結(jié)果集
ResultSet rs = stmt.executeQuery("SELECT user_name,age FROM T_test");
//5.獲取返回的數(shù)據(jù)
while(rs.next()){
    System.out.println("用戶名:" + rs.getString("user_name") + "  年齡:" + rs.getInt("age"));
}
//6.釋放資源
rs.close();
stme.close();
conn.close();

主要類說明(api中文文檔原文)

DriverManager
  • 用于管理一組JDBC驅(qū)動程序的基本服務(wù)。
    注意: JDBC 2.0 API中新增的DataSource接口提供了另一種連接到數(shù)據(jù)源的方法入篮。 使用DataSource對象是連接到數(shù)據(jù)源的首選方法陈瘦。
    作為其初始化的一部分, DriverManager類將嘗試加載在“jdbc.drivers”系統(tǒng)屬性中引用的驅(qū)動程序類崎弃。 這允許用戶自定義應(yīng)用程序使用的JDBC驅(qū)動程序甘晤。 例如在?/ .hotjava / properties文件中,您可以指定:
    jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.taste.ourDriver
    DriverManager方法getConnectiongetDrivers已得到增強(qiáng)饲做,以支持Java Standard Edition Service Provider機(jī)制线婚。 JDBC 4.0驅(qū)動程序必須包含文件META-INF/services/java.sql.Driver 。 該文件包含java.sql.Driver的JDBC驅(qū)動程序?qū)崿F(xiàn)的java.sql.Driver 盆均。 例如塞弊,要加載my.sql.Driver類, META-INF/services/java.sql.Driver文件將包含條目:
    my.sql.Driver
    應(yīng)用程序不再需要使用Class.forName()顯式加載JDBC驅(qū)動程序泪姨。 目前使用加載JDBC驅(qū)動程序的現(xiàn)有程序Class.forName()將繼續(xù)無需修改工作游沿。
    當(dāng)調(diào)用方法getConnection時, DriverManager將嘗試從初始化中加載的驅(qū)動程序中找到合適的驅(qū)動程序肮砾,并使用與當(dāng)前小程序或應(yīng)用程序相同的類加載器顯式加載驅(qū)動程序诀黍。
    從Java 2 SDK,Standard Edition仗处,1.3版開始眯勾,只有在授予了適當(dāng)?shù)臋?quán)限后才能設(shè)置記錄流。 通常這將通過ToolTool工具來完成婆誓,該工具可用于授予permission java.sql.SQLPermission "setLog" 吃环。
Statement

public interface Statement
extends Wrapper, AutoCloseable

  • 用于執(zhí)行靜態(tài)SQL語句并返回其生成的結(jié)果的對象。
    默認(rèn)情況下洋幻,每個Statement對象只能有一個ResultSet對象同時打開郁轻。 因此,如果一個ResultSet對象的讀取與另一個對象的讀取交錯文留,則ResultSet對象必須由不同的Statement對象生成好唯。 在所有執(zhí)行方法Statement接口隱式關(guān)閉當(dāng)前ResultSet聲明的對象,如果一個開放的存在燥翅。
ResultSet

public interface ResultSet
extends Wrapper, AutoCloseable

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

  • ResultSet對象保持一個光標(biāo)指向其當(dāng)前的數(shù)據(jù)行权旷。 最初替蛉,光標(biāo)位于第一行之前贯溅。 next方法將光標(biāo)移動到下一行,并且由于在ResultSet對象中沒有更多行時返回false 躲查,因此可以在while循環(huán)中使用循環(huán)來遍歷結(jié)果集它浅。
  • 默認(rèn)的ResultSet對象不可更新,并且只有一個向前移動的光標(biāo)镣煮。 因此姐霍,您只能從第一行到最后一行迭代一次。 可以生成可滾動和/或可更新的ResultSet對象典唇。 以下代碼片段(其中con是有效的Connection對象)說明了如何使可滾動且對其他人更新不敏感的結(jié)果集镊折,這是可更新的。 有關(guān)其他選項介衔,請參閱ResultSet字段恨胚。
    Statement stmt = con.createStatement(
                                          ResultSet.TYPE_SCROLL_INSENSITIVE,
                                          ResultSet.CONCUR_UPDATABLE);
           ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
           // rs will be scrollable, will not show changes made by others,
           // and will be updatable 
  • 所述ResultSet接口提供getter方法( getBooleangetLong 炎咖,用于從當(dāng)前行檢索列值赃泡,等等)。 可以使用列的索引號或列的名稱來檢索值乘盼。 一般來說升熊,使用列索引將更有效率。 列從1編號绸栅。為了最大可移植性级野,每行中的結(jié)果集列應(yīng)以從左到右的順序讀取,每列應(yīng)只讀一次粹胯。
  • 對于getter方法蓖柔,JDBC驅(qū)動程序嘗試將底層數(shù)據(jù)轉(zhuǎn)換為getter方法中指定的Java類型,并返回合適的Java值矛双。 JDBC規(guī)范具有一個表格,該表格顯示了可由ResultSet getter方法使用的SQL類型到Java類型的允許映射蟆豫。
  • 用作getter方法輸入的列名不區(qū)分大小寫议忽。 當(dāng)使用列名稱調(diào)用getter方法時,多個列具有相同的名稱十减,將返回第一個匹配列的值栈幸。 列名稱選項用于在生成結(jié)果集的SQL查詢中使用列名時使用。 對于在查詢中未明確命名的列帮辟,最好使用列號速址。 如果使用列名稱,程序員應(yīng)該小心保證它們唯一地引用預(yù)期的列由驹,這可以通過SQL AS子句來確保芍锚。
  • JDBC 2.0 API(Java¢2 SDK,Standard Edition,1.2版)中的此接口添加了一組更新方法并炮。 關(guān)于getter方法參數(shù)的注釋也適用于updater方法的參數(shù)默刚。
  • 更新方法可以以兩種方式使用:
  1. 更新當(dāng)前行中的列值。 在可滾動的ResultSet對象中逃魄,光標(biāo)可以向前和向后移動到絕對位置或相對于當(dāng)前行的位置荤西。 下面的代碼段更新NAME所述的第五行中列ResultSet對象rs ,然后使用方法updateRow來更新該數(shù)據(jù)的源表rs推導(dǎo)伍俘。
  rs.absolute(5); // moves the cursor to the fifth row of rs
  rs.updateString("NAME", "AINSWORTH"); // updates the
  // `NAME` column of row 5 to be `AINSWORTH`
 rs.updateRow(); // updates the row in the data source 
  1. 將列值插入到插入行中邪锌。 可更新的ResultSet對象具有與其相關(guān)ResultSet的特殊行,用作構(gòu)建要插入的行的暫存區(qū)域癌瘾。 以下代碼片段將光標(biāo)移動到插入行觅丰,構(gòu)建一個三列行,并將其插入到rs 柳弄,并使用方法insertRow進(jìn)入數(shù)據(jù)源表舶胀。
 rs.moveToInsertRow(); // moves cursor to the insert row
 rs.updateString(1, "AINSWORTH"); // updates the
 // first column of the insert row to be `AINSWORTH`
 rs.updateInt(2,35); // updates the second column to be `35`
 rs.updateBoolean(3, true); // updates the third column to `true`
 rs.insertRow();
 rs.moveToCurrentRow(); 

ResultSet當(dāng)對象將自動關(guān)閉Statement生成它對象被關(guān)閉時,重新執(zhí)行碧注,或用于檢索從多個結(jié)果的序列中的下一結(jié)果嚣伐。
ResultSet對象的列的數(shù)量,類型和屬性由ResultSet.getMetaData方法返回的ResultSetMetaData對象提供萍丐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末轩端,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子逝变,更是在濱河造成了極大的恐慌基茵,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壳影,死亡現(xiàn)場離奇詭異拱层,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宴咧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門根灯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掺栅,你說我怎么就攤上這事烙肺。” “怎么了氧卧?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵桃笙,是天一觀的道長。 經(jīng)常有香客問我沙绝,道長搏明,這世上最難降的妖魔是什么鼠锈? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮熏瞄,結(jié)果婚禮上脚祟,老公的妹妹穿的比我還像新娘。我一直安慰自己强饮,他們只是感情好由桌,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著邮丰,像睡著了一般行您。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剪廉,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天娃循,我揣著相機(jī)與錄音,去河邊找鬼斗蒋。 笑死捌斧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泉沾。 我是一名探鬼主播捞蚂,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跷究!你這毒婦竟也來了姓迅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤俊马,失蹤者是張志新(化名)和其女友劉穎丁存,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柴我,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡解寝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了艘儒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聋伦。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彤悔,靈堂內(nèi)的尸體忽然破棺而出嘉抓,到底是詐尸還是另有隱情索守,我是刑警寧澤晕窑,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站卵佛,受9級特大地震影響杨赤,放射性物質(zhì)發(fā)生泄漏敞斋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一疾牲、第九天 我趴在偏房一處隱蔽的房頂上張望植捎。 院中可真熱鬧,春花似錦阳柔、人聲如沸焰枢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽济锄。三九已至,卻和暖如春霍转,著一層夾襖步出監(jiān)牢的瞬間荐绝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工避消, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留低滩,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓岩喷,卻偏偏與公主長得像恕沫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子均驶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361