JDBC鏈接MySql數(shù)據(jù)庫的簡單講解

JDBC鏈接MySql數(shù)據(jù)庫的簡單講解

一航闺、JDBC簡介

  • 數(shù)據(jù)庫驅(qū)動
  • SUN公司為了簡化,同意對數(shù)據(jù)庫的操作喝滞,定義了一套java操作數(shù)據(jù)庫的規(guī)范


  • JDBC全稱:Java Data Base Connectivity(java數(shù)據(jù)庫連接)阁将,它主要由接口組成。
  • 組成JDBC的2個包:
     * java.sql
     * javax.sql
  • 開發(fā)JDBC應(yīng)用需要以上2個包的支持外右遭,還需要導(dǎo)入相應(yīng)JDBC的數(shù)據(jù)庫實現(xiàn)(即數(shù)據(jù)庫驅(qū)動)做盅。

二、第一個JDBC程序

  • 一窘哈、搭建實驗環(huán)境 :

    - 1吹榴、在mysql中創(chuàng)建一個庫,并創(chuàng)建user表和插入表的數(shù)據(jù)滚婉。
    - 2图筹、新建一個Java工程,并導(dǎo)入數(shù)據(jù)驅(qū)動。

  • 二远剩、編寫程序扣溺,在程序中加載數(shù)據(jù)庫驅(qū)動

    DriverManager. registerDriver(Driver driver)
    
  • 三、建立連接(Connection)

    Connection conn = DriverManager.getConnection(url,user,pass);
    
  • 四瓜晤、創(chuàng)建用于向數(shù)據(jù)庫發(fā)送SQL的Statement對象锥余,并發(fā)送sql

    Statement st = conn.createStatement();
    ResultSet rs = st.excuteQuery(sql);
    
  • 五、從代表結(jié)果集的ResultSet中取出數(shù)據(jù)痢掠,打印到命令行窗口

ResultSet rs = stmt.executeQuery("select * from stu");
        // 5驱犹、輸出結(jié)果集的數(shù)據(jù)
        while (rs.next()) {
            System.out.println("id :" + rs.getInt("id") + " name :" + rs.getString("name"));
        }
  • 六、斷開與數(shù)據(jù)庫的連接志群,并釋放相關(guān)資源
    // 6着绷、關(guān)閉鏈接、命令對象锌云、結(jié)果集
        rs.close();
        stmt.close();
        conn.close();
  • 七荠医、具體的代碼:
   //這里我把異常拋出去了,為了代碼的簡潔桑涎,不過在開發(fā)的時候不要這么干啊
    public static void main(String[] args) throws Exception {
        // 1彬向、注冊驅(qū)動
        Class.forName("com.mysql.jdbc.Driver");
        // 2、創(chuàng)建一個連接對象
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root");
        // 3攻冷、創(chuàng)建一個sql語句發(fā)送的命令對象
        Statement stmt = conn.createStatement();

        // 4娃胆、執(zhí)行SQL,拿到查詢的結(jié)果集對象
        ResultSet rs = stmt.executeQuery("select * from stu");
        // 5、輸出結(jié)果集的數(shù)據(jù)
        while (rs.next()) {
            System.out.println("id :" + rs.getInt("id") + " name :" + rs.getString("name"));
        }
        // 6等曼、關(guān)閉鏈接里烦、命令對象、結(jié)果集
        rs.close();
        stmt.close();
        conn.close();

    }

三禁谦、注冊驅(qū)動的三種方式

    //這里我把異常拋出去了胁黑,為了代碼的簡潔,不過在開發(fā)的時候不要這么干啊
    public static void main(String[] args) throws Exception {
        // 連接地址
        String url = "jdbc:mysql://localhost:3306/mydb";
        // 用戶名
        String name = "root";
        // 密碼
        String pwd = "root";
        // 1州泊、注冊驅(qū)動
        // Class.forName("com.mysql.jdbc.Driver");
        /**
         * 第一種注冊方式
         */
        // Driver driver = new Driver();
        // DriverManager.registerDriver(driver);

        /**
         * 第二種方式 反射機(jī)制
         */
        // Driver driver = (Driver)
        // Class.forName("com.mysql.jdbc.Driver").newInstance();
        // DriverManager.registerDriver(driver);

        /**
         * 第三種注冊方式   **建議使用的**
         */
        Class.forName("com.mysql.jdbc.Driver");

        // 2丧蘸、創(chuàng)建一個連接對象
        Connection conn = DriverManager.getConnection(url, name, pwd);
        // 3、創(chuàng)建一個sql語句發(fā)送的命令對象
        Statement stmt = conn.createStatement();

        // 4遥皂、執(zhí)行SQL,拿到查詢的結(jié)果集對象
        ResultSet rs = stmt.executeQuery("select * from stu");
        // 5力喷、輸出結(jié)果集的數(shù)據(jù)
        while (rs.next()) {
            System.out.println("id :" + rs.getInt("id") + " name :" + rs.getString("name"));
        }
        // 6、關(guān)閉鏈接演训、命令對象弟孟、結(jié)果集
        rs.close();
        stmt.close();
        conn.close();

    }

四、獲取連接對象的三種方式

  public static void main(String[] args) throws Exception {

        // 連接地址
        String url = "";
        // 用戶名
        String name = "";
        // 密碼
        String pwd = "";

        //我們要在src/目錄下創(chuàng)建一個.properties文件
        Properties pro = new Properties();
        InputStream is = JdbcDemo3.class.getClassLoader().getResourceAsStream("dbcof.properties");
        pro.load(is);
        // Connection conn =
        // DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", pro);
        url = pro.getProperty("url");
        name = pro.getProperty("user");
        pwd = pro.getProperty("password");

        // 1样悟、注冊驅(qū)動
        Class.forName("com.mysql.jdbc.Driver");
        // 2拂募、創(chuàng)建一個連接對象
        // Connection conn =
        // DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb",
        // "root", "root");

        /**
         * 第一種連接方式 用戶名和密碼作為參數(shù)在網(wǎng)址后面
         */
        // Connection conn =
        // DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?user=root&password=root");
        /**
         * 第二種方式 采用properties文件
         */
        // 讀取properties文件
        /*
         * Properties pro = new Properties(); InputStream is =
         * JdbcDemo3.class.getClassLoader().getResourceAsStream(
         * "dbcof.properties"); pro.load(is); Connection conn =
         * DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb",pro);
         */

        /**
         * 第三種方式創(chuàng)建連接對象
         */
        Connection conn = DriverManager.getConnection(url, name, pwd);
        // 3、創(chuàng)建一個sql語句發(fā)送的命令對象
        Statement stmt = conn.createStatement();

        // 4、執(zhí)行SQL,拿到查詢的結(jié)果集對象
        ResultSet rs = stmt.executeQuery("select * from stu");
        // 5没讲、輸出結(jié)果集的數(shù)據(jù)
        while (rs.next()) {
            System.out.println("id :" + rs.getInt("id") + " name :" + rs.getString("name"));
        }
        // 6眯娱、關(guān)閉鏈接、命令對象爬凑、結(jié)果集
        rs.close();
        stmt.close();
        conn.close();

    }
  • 這里我們創(chuàng)建的properties(以鍵值對的方式存在)文件內(nèi)容如下:
driverClass=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/mydb
user=root
password=root

五徙缴、數(shù)據(jù)庫URL

  • URL用于標(biāo)識數(shù)據(jù)庫的位置,程序員通過URL地址告訴JDBC程序連接哪個數(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

六于样、Connection講解

  • Jdbc程序中的Connection,它用于代表數(shù)據(jù)庫的鏈接潘靖,Collection是數(shù)據(jù)庫編程中最重要的一個對象穿剖,客戶端與數(shù)據(jù)庫所有交互都是通過connection對象完成的。
  • 這個對象的常用方法:
    • createStatement():創(chuàng)建向數(shù)據(jù)庫發(fā)送sql的statement對象卦溢。
    • prepareStatement(sql) :創(chuàng)建向數(shù)據(jù)庫發(fā)送預(yù)編譯sql的PrepareSatement對象糊余。
    • prepareCall(sql):創(chuàng)建執(zhí)行存儲過程的callableStatement對象。
    • setAutoCommit(boolean autoCommit):設(shè)置事務(wù)是否自動提交单寂。
    • commit() :在鏈接上提交事務(wù)贬芥。
    • rollback() :在此鏈接上回滾事務(wù)。

七宣决、Statement講解

  • Jdbc程序中的Statement對象用于向數(shù)據(jù)庫發(fā)送SQL語句
  • Statement對象常用方法:
    • 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語句放到一個批處理中尊沸。
    • executeBatch():向數(shù)據(jù)庫發(fā)送一批sql語句執(zhí)行威沫。

八、ResultSet講解

  • Jdbc程序中的ResultSet用于代表Sql語句的執(zhí)行結(jié)果洼专。Resultset封裝執(zhí)行結(jié)果時棒掠,采用的類似于表格的方式。ResultSet 對象維護(hù)了一個指向表格數(shù)據(jù)行的游標(biāo)壶熏,初始的時候句柠,游標(biāo)在第一行之前浦译,調(diào)用ResultSet.next() 方法棒假,可以使游標(biāo)指向具體的數(shù)據(jù)行,進(jìn)行調(diào)用方法獲取該行的數(shù)據(jù)精盅。

  • ResultSet既然用于封裝執(zhí)行結(jié)果的帽哑,所以該對象提供的都是用于獲取數(shù)據(jù)的get方法:

    • 獲取任意類型的數(shù)據(jù)
        getObject(int index)
        getObject(string columnName)
    
    • 獲取指定類型的數(shù)據(jù),(封裝數(shù)據(jù)時方便)例如:
    getString(int index)
    getString(String columnName)
    
  • ResultSet還提供了對結(jié)果集進(jìn)行滾動的方法:

next():移動到下一行
Previous():移動到前一行
absolute(int row):移動到指定行
beforeFirst():移動resultSet的最前面叹俏。
afterLast() :移動到resultSet的最后面妻枕。

例如以下的幾個查詢:

//String sql = "select id 編碼,name 姓名  from stu";   第一種
        String sql = "select * from stu";

        ResultSet rs = stmt.executeQuery(sql);
        // 5、輸出結(jié)果集的數(shù)據(jù)

        while (rs.next()) {
            // System.out.println("id :" + rs.getInt("id") + " name :" +
            // rs.getString("name"));
            // 第一種根據(jù)字段名查找   對應(yīng)//String sql = "select id 編碼,name 姓名  from stu";   第一種
            // int id = rs.getInt("編碼"); //
            // String name = rs.getString("姓名");
            // int age = rs.getInt("age");
            // String addr = rs.getString("address");
            // System.out.println("id :" + id + " name :" + name);
            // System.out.println("id :" + id + " name :" + name + " age :" +
            // age + " addr " + addr);

            // 第二種是根據(jù)字段的索引 是結(jié)果集的序號(下標(biāo)從 1 開始)
            // int id = rs.getInt(1);
            // String name = rs.getString(2);
            // System.out.println("id :" + id + " name :" + name);
            
            
            /**
             * String sql = "select * from stu";
             * 當(dāng)sql語句是上面的時候,就可以下面的這種方式查找了
             */
            int id = rs.getInt("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");
            String addr = rs.getString("address");
            System.out.println("id :" + id + " name :" + name + " age :" + age + " addr " + addr);
        }

九屡谐、釋放資源

  • Jdbc程序運(yùn)行完后述么,切記要釋放程序在運(yùn)行過程中,創(chuàng)建的那些與數(shù)據(jù)庫進(jìn)行交互的對象愕掏,這些對象通常是ResultSet, Statement和Connection對象度秘。

  • 特別是Connection對象,它是非常稀有的資源饵撑,用完后必須馬上釋放剑梳,如果Connection不能及時、正確的關(guān)閉滑潘,極易導(dǎo)致系統(tǒng)宕機(jī)垢乙。Connection的使用原則是盡量晚創(chuàng)建,盡量早的釋放语卤。

  • 為確保資源釋放代碼能運(yùn)行追逮,資源釋放代碼也一定要放在finally語句中。

十粹舵、代碼地址

https://github.com/wuyinlei/Jdbc

好了羊壹,今天就總結(jié)這么多,有些只是簡單的提示齐婴,如想要了解更多油猫,可以自行g(shù)oogle。也可以交流

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柠偶,一起剝皮案震驚了整個濱河市情妖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诱担,老刑警劉巖毡证,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔫仙,居然都是意外死亡料睛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門摇邦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恤煞,“玉大人,你說我怎么就攤上這事施籍【影牵” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵丑慎,是天一觀的道長喜喂。 經(jīng)常有香客問我瓤摧,道長,這世上最難降的妖魔是什么玉吁? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任照弥,我火速辦了婚禮,結(jié)果婚禮上进副,老公的妹妹穿的比我還像新娘产喉。我一直安慰自己,他們只是感情好敢会,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布曾沈。 她就那樣靜靜地躺著,像睡著了一般鸥昏。 火紅的嫁衣襯著肌膚如雪塞俱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天吏垮,我揣著相機(jī)與錄音障涯,去河邊找鬼。 笑死膳汪,一個胖子當(dāng)著我的面吹牛唯蝶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播遗嗽,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼粘我,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痹换?” 一聲冷哼從身側(cè)響起征字,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娇豫,沒想到半個月后匙姜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡冯痢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年氮昧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浦楣。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡袖肥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椒振,到底是詐尸還是另有隱情昭伸,我是刑警寧澤梧乘,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布澎迎,位于F島的核電站庐杨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夹供。R本人自食惡果不足惜灵份,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哮洽。 院中可真熱鬧填渠,春花似錦、人聲如沸鸟辅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匪凉。三九已至枪眉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間再层,已是汗流浹背贸铜。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留聂受,地道東北人蒿秦。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像蛋济,于是被迫代替她去往敵國和親棍鳖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

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

  • 本人的環(huán)境為Myeclipse10碗旅、MySQL5.7.15 本文包括:簡介JDBC編程步驟打通數(shù)據(jù)庫程序詳解—Dr...
    廖少少閱讀 3,933評論 7 39
  • JDBC概述 在Java中鹊杖,數(shù)據(jù)庫存取技術(shù)可分為如下幾類:JDBC直接訪問數(shù)據(jù)庫、JDO技術(shù)扛芽、第三方O/R工具骂蓖,如...
    usopp閱讀 3,533評論 3 75
  • JDBC簡介 SUN公司為了簡化、統(tǒng)一對數(shù)據(jù)庫的操作川尖,定義了一套Java操作數(shù)據(jù)庫的規(guī)范登下,稱之為JDBC。JDBC...
    奮斗的老王閱讀 1,509評論 0 51
  • 彩光嫩膚光譜經(jīng)多重過濾后畔濒,光線比IPL更為柔和,不適感完全消失锣咒;可綜合解決多種皮膚問題侵状,嫩膚美白每次治療只需30分...
    MBE小達(dá)人閱讀 224評論 0 0
  • 我不是一個很乖的人赞弥,但我卻很喜歡一人在家做自己喜歡的事。國慶八天我看了電視上一部重播的電視劇——《麻雀》 ...
    王晉豫閱讀 1,352評論 0 1