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

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

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

    拼搏的人生

    拼搏在繁華的都市

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      7 隨筆 :: 13 文章 :: 6 評論 :: 0 Trackbacks
    JDBC 2.0比1.0有了一些不同,體現在四個比較明顯的方面:
    1>. ResutlSet對象中的Cursor能夠自由上下移動
    2>. 能直接使用Java程序語言來更新DB表里的內容,而不需要額外寫SQL語法
    3>. 可以一次傳送許多SQL語句到DB執行----Batch
    4>. 新增2個數據類型(BLOB和CLOB)
    ?? 我們知道在JDBC 1.0時,只要用 connection.createStatement()就能取得Statement()對象.不過在2.0中多的createStatement()
    多了兩個參數值,需要我們自己來定義它.
    public Statement createStatement(int resultSetType,
    ???????????????????????????????? int resultSetConcurrency)throws SQLException
    ?? 第一個參數resultSetType用來設定ResultSet對象中的光標是否可以自由上下移動,它的值有三種,TYPE_FORWARD_ONLY,TYPE_SCROLL_SENSITIVE,
    TYPE_SCROLL_INSENSITIVE.若為TYPE_FORWARD_ONLY就表示和1.0一樣只能用next()方法;然后后兩者可以讓Cursor隨便的自由移動,不過,
    它們兩者最大的區別在于:當ResutlSet中的值有改變時,TYPE_SCROLL_SENSITIVE能取得修改后的值,而TYPE_SCROLL_INSENSITIVE則不能.
    ? 第而個參數resultSetConcurrentcy,主要是設定ResultSet對象是只讀(read-only)還是可以改變的(updateable),它可能的值有兩種,
    CONCUR_READ_ONLY或者是CONCUR_UPDATE.若設置為CONCUR_READ_ONLY,ResultSet對象和1.0一樣;若為CONCUR_UPDATEABLE,那么就可以用
    ResultSet對象執行數據庫的修改,增加和移除功能.for example:
    先看功能和1.0一樣的寫法:
    Statement stmt=con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
    ?????????????????????????????????? ResultSet.CONCUR_READ_ONLY);
    RestultSet rs=stmt.executeQuery("select ename,empno from emp");
    while(rs.next())
    {
    ?? String name=rs.getString("ename");
    ?? int empno=rs.getInt("empno");
    ?? System.out.println("name="+name+","+"number="+empno);
    }
    輸出結果為:
    name=feiyang,number=1190
    name=jack,?? number=1230
    name=BillGates number=12
    ...........
    再看看下面這個:
    Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
    ?????????????????????????????????? ResultSet.CONCUR_READ_ONLY);
    RestultSet rs=stmt.executeQuery("select ename,empno from emp");
    rs.afterLast();
    while(rs.previous())
    {
    ?? String name=rs.getString("ename");
    ?? int empno=rs.getInt("empno");
    ?? System.out.println("name="+name+","+"number="+empno);
    }
    輸出結果為:
    name=BillGates number=12
    name=jack,?? number=1230
    name=feiyang,number=1190
    .............
    這和上面第一有點不同的是順序顛倒了,這是因為我們使用了rs.afterLast()這個方法.其實2.0中還有很多方法,如下:
    rs.absolute(-1); //表示cursor在最后一筆數據,即 rs.last()
    rs.absolute(1);? //表示cursor在第一筆數據,即rs.first()
    rs.absolute(n);? //表示cursor在第N筆數據
    假使我們目前有1000筆數據,取得第997筆
    rs.absolute(-4);
    還有一個方法和absolute很相像,那就是relative(),
    rs.absolute(5); //表示第五筆數據
    ......
    rs.relative(-3);? //表示cursor目前在第二筆數據
    .......
    rs.relative(1);? //cursor目前在第三筆數據
    看看怎么用ResultSet對象執行更新數據庫動作
    ?? 要讓ResultSet對象執行更新數據庫的動作,首先在聲明Statement對象時,參數必須設置為TYPE_SCROLL_SENSITIVE和
    CUNCOR_UPDATEABLE.
    Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,
    ????????????????????????????????? ResultSet.CONCUR_UPDATEABLE);
    ResultSet rs=stmt.executeQuery("select ename,empno from emp);
    rs.last();
    rs.updateInt("empno",2230);
    rs.cancelRowUpdates();
    rs.updateInt("empno",1213);
    rs.updateRow();
    新增數據到數據庫
    Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,
    ????????????????????????????????? ResultSet.CONCUR_UPDATEABLE);
    ResultSet rs=stmt.executeQuery("select * from emp);
    rs.moveToInsertRow();
    rs.updateInt("empno",2230);
    rs.updateString("ename","feiyang");
    rs.updateString("job","clerk");
    rs.updateFloat("sal",123456.5);
    rs.insertRow();
    刪除數據
    Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,
    ????????????????????????????????? ResultSet.CONCUR_UPDATEABLE);
    ResultSet rs=stmt.executeQuery("select * from emp);
    rs.absolute(4);
    rs.deleteRow();
    依次執行多條SQL語句
    Statement stmt=con.createStatment();
    int[] rows;
    stmt.addBatch("insert into emp values('feiyang','123456')");
    stmt.addBatch("insert into offcie values('employee','Shanghai')");
    rows=stmt.executeBatch();
    當執行大量數據的時候為了數據的完整性,建議使用Transaction
    eg:
    con.setAutoCommit(false);
    Statement stmt=con.createStatement();
    int[] rows;
    stmt.addBatch("1...........");
    stmt.addBatch("2...........");
    stmt.addBatch("3...........");
    stmt.addBatch("4...........");
    stmt.addBatch("5...........");
    stmt.addBatch("6...........");
    rows=stmt.executeBatch();
    con.commit();
    在JDBC2.0中新增加BLOB和CLOB兩個數據類型
    BOLB指的是二進制大型對象(Binary Large Object),CLOB指的是字符大型對象(Character Large Object).它們用來處理大型
    的數據類型,他們分別代表大量的二進制數據和文字數據.
    posted on 2006-05-10 12:25 Dalston.Young 閱讀(445) 評論(0)  編輯  收藏 所屬分類: Web組件

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


    網站導航:
     
    主站蜘蛛池模板: 9久热精品免费观看视频| 羞羞视频免费观看| 无码av免费网站| 国产V亚洲V天堂A无码| 91免费在线视频| 久久亚洲精品成人777大小说| 免费观看毛片视频| 亚洲精品tv久久久久| 黄色免费网站在线看| 亚洲精品无码日韩国产不卡?V| 青青草97国产精品免费观看| 亚洲伊人久久成综合人影院| 伊人免费在线观看高清版| 亚洲大尺度无码无码专区| 3344永久在线观看视频免费首页| 亚洲欧洲国产成人精品| 成全影视免费观看大全二| 亚洲AV无码国产精品色午友在线 | 男女作爱免费网站| 国产91精品一区二区麻豆亚洲| 一个人看的www视频免费在线观看| 亚洲一区二区三区国产精品| 怡红院免费的全部视频| 精品日韩亚洲AV无码| 男男AV纯肉无码免费播放无码| 国产亚洲视频在线播放大全| 伊伊人成亚洲综合人网7777| 亚洲va中文字幕| 青娱乐免费在线视频| 亚洲国产欧洲综合997久久| 亚洲日本中文字幕天堂网| 午夜理伦剧场免费| 亚洲国产欧美国产综合一区 | 妞干网手机免费视频| 色哟哟国产精品免费观看| 亚洲国产精品无码久久SM| 噼里啪啦免费观看高清动漫4| 美女被免费网站视频在线| 亚洲电影一区二区三区| 国产精品无码一区二区三区免费| a毛片全部播放免费视频完整18|