<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 20  文章 - 57  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    51CTO

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

       

    什么是JDBC

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

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


    JDBC編程步驟


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

    步驟分析


    (圖一)


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

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


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



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

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

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


    3.創(chuàng)建語(yǔ)句


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


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

             如果工廠運(yùn)輸?shù)紹村的貨物,只要B村的村長(zhǎng)給工廠開(kāi)一張條就行了;但也會(huì)有一些貨物需要運(yùn)回工廠!!

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


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


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

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

            這樣的話,工廠和B村的交易就完成,在現(xiàn)實(shí)世界中工廠和B村之間的橋梁不會(huì)被拆除,因?yàn)榻ㄒ蛔鶚虻拇鷥r(jià)很大,但在程序和數(shù)據(jù)庫(kù)之間架設(shè)一座橋梁簡(jiǎn)直太簡(jiǎn)單了,所以在這里我們要把這座橋梁拆除。

            Connection.close();




    簡(jiǎn)單的舉了一個(gè)例子來(lái)說(shuō)明數(shù)據(jù)庫(kù)和程序之間是怎么連接的,望對(duì)大家有所幫助。








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

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

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


    網(wǎng)站導(dǎo)航:
     
    主頁(yè) 主站蜘蛛池模板: 亚洲国产精品免费在线观看| 亚洲国产精品无码AAA片| 亚洲妇女熟BBW| 野花高清在线观看免费3中文| 久久久无码精品亚洲日韩京东传媒 | 91在线免费视频| 亚洲精品卡2卡3卡4卡5卡区| 国产精品午夜免费观看网站| 亚洲一区二区三区AV无码| 中文字幕不卡免费视频| 亚洲V无码一区二区三区四区观看| 日本高清不卡aⅴ免费网站| 国产l精品国产亚洲区在线观看| 久久久高清日本道免费观看| 亚洲91av视频| 一区二区无码免费视频网站 | 91热成人精品国产免费| 亚洲人成网站日本片| 成人片黄网站色大片免费| 国产在亚洲线视频观看| 红杏亚洲影院一区二区三区| a级午夜毛片免费一区二区| 久久精品国产精品亚洲毛片| 大学生一级毛片免费看| 精品成人一区二区三区免费视频| 亚洲一级特黄大片在线观看| a毛片免费播放全部完整| 亚洲性无码av在线| 国产三级免费电影| 久久精品私人影院免费看| 亚洲综合色7777情网站777| 免费大片黄手机在线观看| a级毛片黄免费a级毛片| 亚洲国产情侣一区二区三区| 免费a级毛片永久免费| a视频在线观看免费| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 亚洲精品成a人在线观看☆| 国内精品99亚洲免费高清| 2021免费日韩视频网| 日韩一区二区三区免费播放|