隨筆 - 20  文章 - 57  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          51CTO

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

             

          什么是JDBC

          JDBC是由一組Java語言編寫的類和接口組成,用來處理關(guān)系數(shù)據(jù)庫!利用JDBC的API,可用Java語法去訪問各種各樣的SQL數(shù)據(jù)庫。
          個人認(rèn)為:
          把JDBC當(dāng)做是一門連接Java程序連接數(shù)據(jù)庫的技術(shù)不如把JDBC當(dāng)做連接程序和數(shù)據(jù)庫的橋梁。

          以下我要寫的例子是用純Java的Driver來連接數(shù)據(jù)庫的方式。連接的數(shù)據(jù)庫是mysql。


          JDBC編程步驟


                 1.加載數(shù)據(jù)庫驅(qū)動(jar文件)
                      //需要下載一個數(shù)據(jù)庫的jar包,并導(dǎo)入相應(yīng)的JDBC項目中,創(chuàng)建路徑!
                      Class.forName("com.mysql.jdbc.Driver");
                
                 2.獲得數(shù)據(jù)庫連接
                      DriverManager.getConnection("jdbc:mysql://Database_IP:3306/DATABASE","DATAROOT","PASSWORD");//返回Connection————獲得數(shù)據(jù)庫連接
                 
                 3.創(chuàng)建語句
                      String sql = "SQL_TORUNNING";
                      向DATABASE發(fā)送一個執(zhí)行語句
                      Statement stmt = conn.createStatement();//創(chuàng)建一個 Statement 對象來將 SQL 語句發(fā)送到數(shù)據(jù)庫.
                           Statement—————SQL_RUNNING!!!
                
                 4.執(zhí)行查詢
                      ResultSet rs = Statement.executeQuery(SQL_RUNNING);//執(zhí)行SQL_RUNNING命令,返回ResultSet
                      //如果執(zhí)行的數(shù)據(jù)庫語句不是對數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeQuery()
                      //如果執(zhí)行的數(shù)據(jù)庫語句是修改數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeUpdate()
                      //當(dāng)然他們返回值的類型也不同!
                          //根據(jù)命令的不同Statement的方法也不同
                            
                              創(chuàng)建一個表      
                              Statement.execute(create a table)
                             
                              增刪改查Insert、update、delete...
                              Statement.executeUpdate()
                            
                              查詢語句Select
                              Statement.executeQuery(Select);
                            
                 5.遍歷結(jié)果集
                      while(ResultSet.next()){
                          ResultSet.getInt(int);
                          ResultSet.getString(int);
                          ......
                      }
                 
                 
                 6.關(guān)閉數(shù)據(jù)庫連接
                         Connection.close();
               
                

          步驟分析


          (圖一)


          1.加載數(shù)據(jù)庫驅(qū)動

                  
                   我們來看圖一,工廠和幾個農(nóng)村之間有一條河,不能夠直接進(jìn)行溝通,工廠就相當(dāng)于一個Java程序,而幾個農(nóng)村就相當(dāng)于不同的數(shù)據(jù)庫;
                   工廠為B村生產(chǎn)一些材料,但是生產(chǎn)出來之后并不能直接交給B村,然后工廠的廠長就想在工廠和B村之間架設(shè)一座橋梁來運送生產(chǎn)出來的材料——我們大可把數(shù)據(jù)庫驅(qū)動加載當(dāng)做這個架設(shè)橋梁的想法。


                   在程序中我們要怎么做呢?   
                   在加載數(shù)據(jù)庫驅(qū)動的時候,必須要將相應(yīng)的mysql-connector-java-5.0.4-bin.jar包,然后將jar包導(dǎo)入相應(yīng)的項目中如下圖
                  
                   在mysql-connector-java-5.0.4-bin.jar右擊建立路徑,就相當(dāng)于import的過程——我不確定這么說對不對,但我是這么理解的。
                   建立路徑后,你的項目將出現(xiàn)一個新的文件,如下圖
                  
                   這樣的話,你就可以順利加載數(shù)據(jù)庫驅(qū)動,否則當(dāng)你在運行的時候會出現(xiàn)找不到Driver.class的異常,也就是無法加載數(shù)據(jù)庫驅(qū)動。
                       Class.forName("com.mysql.jdbc.Driver");



          2.獲得數(shù)據(jù)庫連接

                  
                   既然廠長有想法和B村之間架設(shè)一座橋梁,那就要和B村商量一下??!然后,廠長就要去河的對岸,那條河呢?就是在工廠和B村之間的那條河(這條河就相當(dāng)于Database_IP),然后去找B村的村長(在這里要明白是B村的村長不是A村的,所以不能找錯了!?。?,找到B村村長,“我要在工廠和B村之間建設(shè)一座橋,來運輸我們的東西”,下一步談的當(dāng)然是條件了,工廠老板說“我要B村出資90%,剩下的由工廠出!!”村長當(dāng)然不干了,這橋當(dāng)然也就沒法建設(shè)了?。?!所以只有當(dāng)兩者都滿意的情況下才可以建設(shè)橋梁(比如,各處50%)其實談條件的過程就相當(dāng)于驗證數(shù)據(jù)庫的"DATAROOT"和"PASSWORD"?。?!只有兩者都正確的情況下才可以進(jìn)行下一步的計劃——也就是建設(shè)橋梁?。?!

                   在程序中的過程如下:
                   Connection conn = null;
                   conn = DriverManager.getConnection("jdbc:mysql://Database_IP:3306/DATABASE","DATAROOT","PASSWORD");
                   //返回Connection————獲得數(shù)據(jù)庫連接


          3.創(chuàng)建語句


                   橋已經(jīng)建好了,然后工廠要準(zhǔn)備一些卡車來運輸生產(chǎn)的貨物,然后農(nóng)村需要根據(jù)不同的貨物來處理這些貨物,有些貨物直接卸在B村就可以了,但有些貨物卸在B村之后,B村要做一些處理然后運回工廠?。。?br />        
                   這個過程在程序是怎么體現(xiàn)的呢?
                   String sql = "SQL_TORUNNING";
                   向DATABASE發(fā)送一個執(zhí)行語句
                   Statement stmt = conn.createStatement();//創(chuàng)建一個 Statement 對象來將 SQL 語句發(fā)送到數(shù)據(jù)庫.
                   Statement—————SQL_RUNNING!!!


          4.處理數(shù)據(jù)庫發(fā)送來的消息

                   如果工廠運輸?shù)紹村的貨物,只要B村的村長給工廠開一張條就行了;但也會有一些貨物需要運回工廠!!

                   在程序中:
                   ResultSet rs = Statement.executeQuery(SQL_RUNNING);//執(zhí)行SQL_RUNNING命令,返回ResultSet
                   //如果執(zhí)行的數(shù)據(jù)庫語句不是對數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeQuery()——需要返回一些貨物
                   //如果執(zhí)行的數(shù)據(jù)庫語句是修改數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeUpdate()——開張條就行了
                   //當(dāng)然他們返回值的類型也不同!
                   //根據(jù)命令的不同Statement的方法也不同
                            
                           創(chuàng)建一個表      
                           Statement.execute(create a table)
                             
                           增刪改查Insert、update、delete...
                           Statement.executeUpdate()
                            
                           查詢語句Select
                           Statement.executeQuery(Select);
                            


          5.處理數(shù)據(jù)庫傳回的內(nèi)容


                  這個過程由工廠完成,如果是返回的一些貨物的話,工廠要做一些處理。
           
                  處理的過程:
                          while(ResultSet.next()){
                          ResultSet.getInt(int);
                          ResultSet.getString(int);
                          ......
                      }

          6.關(guān)閉數(shù)據(jù)庫

                  這樣的話,工廠和B村的交易就完成,在現(xiàn)實世界中工廠和B村之間的橋梁不會被拆除,因為建一座橋的代價很大,但在程序和數(shù)據(jù)庫之間架設(shè)一座橋梁簡直太簡單了,所以在這里我們要把這座橋梁拆除。

                  Connection.close();




          簡單的舉了一個例子來說明數(shù)據(jù)庫和程序之間是怎么連接的,望對大家有所幫助。








          posted on 2010-12-09 18:37 tovep 閱讀(1675) 評論(1)  編輯  收藏

          FeedBack:
          # re: Java連接數(shù)據(jù)庫技術(shù)JDBC 2011-06-04 15:35 那一劍的風(fēng)情
          不錯 ,很詳細(xì),即使不懂也看的懂  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主頁 主站蜘蛛池模板: 萍乡市| 缙云县| 白水县| 馆陶县| 高阳县| 陆丰市| 青龙| 龙陵县| 黑山县| 原阳县| 上饶市| 新邵县| 秭归县| 庐江县| 绍兴县| 巢湖市| 旌德县| 林甸县| 辽阳市| 吉木萨尔县| 泉州市| 蒲城县| 临澧县| 高清| 平远县| 无极县| 武川县| 江陵县| 报价| 万年县| 汕尾市| 新营市| 梁山县| 且末县| 韶关市| 双桥区| 永州市| 武穴市| 界首市| 高青县| 新余市|