JDBC與MySql:手把手教你JDBC入門

       之前寫了一堆MySql數據庫的操作方法,都是在cmd命令下操作的。那麼我們在cmd窗口下增刪改查對於我們實際開發也沒什麼卵用~因爲我們寫出來的程序總不可能需要保存數據的時候就打開cmd窗口插入幾條數據,需要讀取數據的時候就在cmd窗口查詢一下,然後把結果複製到我們所寫的程序中吧~顯然數據庫不是這麼用的。
    正確的使用方法是直接用程序跟數據庫溝通,而筆者本身是android開發的,所以這裏就用java演示,如何用java跟mysql數據庫連接!
    而java跟數據庫連接我們會用到java的一種技術---JDBC:
    JDBC(Java Data Base Connectivity,java數據庫連接)是一種用於執行SQL語句的Java API,可以爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員能夠編寫數據庫應用程序。
    
  MySql的開發人員根據這種基準開發出connectors,也叫作數據庫驅動。
如下圖,我們是寫應用程序的,而我們需要使用數據庫就要直接接觸這種數據庫的驅動,要熟悉學習這種數據庫的驅動。
而數據庫那麼多種,常用的也不少~對於我們開發者來說學習成本太大!


那麼有了jdbc這種基準,或者說規範。如何數據庫如何與java程序溝通不再是我們思考的問題,如何與java程序溝通這個問題就轉移到數據庫開發商,他們針對java寫好驅動供我們下載放到程序裏就好。而我們要做的就是掌握jdbc。就這樣,掌握jdbc+數據庫對應的驅動=掌握任何支持jdbc數據庫的連接。
如下圖:



JDBC驅動:
上文所提到的驅動就是一個jar包,下載地址一般會在該數據庫的官網,比如我們這裏所說的MySql,那麼mysql的驅動就在mysql的官網可以下載到。

爲了方便大家,在本文末尾也會提供一個mysql的驅動。大家可以下載使用。


JDBC的使用:
筆者還是使用上篇博文演示過的數據庫mydb中的emp表演示,其中的數據以及表的結構如下所示:

+----+------+---------+--------+
| id | name | dept_id | salary |
+----+------+---------+--------+
|  1 | 曹操 |       1 |   2000 |
|  2 | 荀彧 |       2 |   2000 |
|  4 | 郭嘉 |       4 |   2000 |
|  5 | 荀攸 |    NULL |   2000 |
+----+------+---------+--------+

建議:如果讀者的mysql還沒有數據,請先創建一個數據庫,然後創建一個表,然後往裏面插入若干條數據作爲演示
如有需要可查看本博客的前幾篇文章,創建數據庫,創建表,插入數據,查詢數據等都有記錄的;


接下來開始jdbc的使用介紹:
首先創建一個java項目,然後創建一個帶有main方法的類。
下載mysql的jdbc驅動jar包(mysql官網可以下載,本文末尾也有提供);
放到項目的lib文件夾裏面,用myeclipse創建的項目一般都有lib文件夾,而使用eclipse創建的java項目可能沒有lib文件夾,沒有的話我們自己創建一個文件夾命名爲lib就可以了。然後把下載到的驅動jar包放到lib文件夾裏就可以了。

當然,就這麼放進去還沒可以,還有右擊該jar包----Build Path----Add to Build Path;

接下來就要在main方法裏面操作了:
public static void main(String[] args) {
        Connection conn = null;
        Statement state = null;
        ResultSet set = null;
        try {
            //註冊數據庫驅動
            DriverManager.registerDriver(new Driver());
            //獲取數據庫連接   
             conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "");
            //獲取傳輸器對象
             state= conn.createStatement();
            //利用傳輸器對象執行sql語句
             set=state.executeQuery("select * from emp");
            while(set.next()){
                System.out.println(set.getString("name"));
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                set.close();
                state.close();
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }



其中 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "");
接受三個參數,第一個參數爲數據庫鏈接地址,開頭的"jdbc:mysql://"是固定的而後面的localhost:3306是數據庫所在的地址以及端口,由於筆者的mysql數據庫就在本機所以寫上localhost,而mysql的端口默認就是3306.後面的mydb是數據庫的名稱。
第二個參數就是用戶名,默認也是root
第三個參數就是密碼,筆者的數據庫沒有密碼,所以直接寫個雙引號上去。

 set=state.executeQuery("select * from emp");
可以看到executeQuery接受的參數是一句sql語句,筆者把查詢emp全表的數據寫上去,所查詢的結果會保存到ResultSet 裏面。
而在後面可以看到使用一個while循環把說查詢的結果遍歷出來了。
要說一下ResultSet 的遍歷:
可以這麼理解,ResultSet 有一根指針,一開始是指着表頭,每調用一次ResultSet .next就會把這個指針往下移動一行,並且判斷有沒有數據,如果這一行有數據的話則返回true,否則返回false。
然後讀者可以發現ResultSet 有很多方法,這裏先介紹ResultSet .getString(”“);裏面接受一個字段名,就是獲取當前ResultSet 所指的行所對應的字段的數據。


最後需要關閉ResultSet ,Statement ,Connection 。及時釋放資源。


我們試一下運行,可以看到運行結果是這樣的:

而我們再看一下數據庫裏面的數據是怎樣的:
+----+------+---------+--------+
| id | name | dept_id | salary |
+----+------+---------+--------+
|  1 | 曹操 |       1 |   2000 |
|  2 | 荀彧 |       2 |   2000 |
|  4 | 郭嘉 |       4 |   2000 |
|  5 | 荀攸 |    NULL |   2000 |
+----+------+---------+--------+


正是正確地遍歷出數據庫mydb裏emp表的name字段的數據。

本文到此結束,下篇將爲大家介紹更多與jdbc相關的知識。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章