BloveSaga

          在希臘帕爾納斯山南坡上,有一個馳名世界的戴爾波伊神托所,在它的入口處的巨石上赫然銹刻著這樣幾個大字: 認識你自己!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            34 隨筆 :: 12 文章 :: 122 評論 :: 0 Trackbacks
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(6)

          隨筆分類(30)

          隨筆檔案(34)

          文章分類(12)

          文章檔案(12)

          收藏夾(1)

          DataBase

          Developing Tools

          Frame&&Mode

          OpenSource

          Software Engineering&&Management

          Study Forum

          優選Blog

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          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-06-04 15:28 藍色Saga 閱讀(183) 評論(0)  編輯  收藏 所屬分類: Web組件

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


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 芜湖县| 枣强县| 西宁市| 波密县| 台中县| 广宗县| 松溪县| 美姑县| 舞钢市| 广河县| 曲阜市| 卢龙县| 信阳市| 吉隆县| 通渭县| 大同县| 二连浩特市| 九江县| 衡南县| 吉隆县| 镇康县| 阳西县| 鹤壁市| 扎鲁特旗| 婺源县| 乌拉特后旗| 开鲁县| 广德县| 霞浦县| 清徐县| 宾川县| 尚志市| 平利县| 兰考县| 车致| 略阳县| 德州市| 平果县| 康马县| 宜兰县| 公主岭市|