乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      JDBC編程結(jié)果集的分頁顯示

       dingdang 2009-05-04
      摘要:目前數(shù)據(jù)庫的應(yīng)用非常普遍,在應(yīng)用程序的開發(fā)過程中,經(jīng)常會涉及到訪問數(shù)據(jù)庫。Java使用JDBC技術(shù)進(jìn)行數(shù)據(jù)庫的訪問。查詢是數(shù)據(jù)庫的操作中較為頻繁的一種操作,返回的結(jié)果有時可能是很多條記錄的結(jié)果集,用戶在瀏覽和處理時不方便,常常會用到分頁處理功能。
        關(guān)鍵詞:JDBC數(shù)據(jù)庫;驅(qū)動程序;結(jié)果集
        中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2007)06-11511-01
        
        1 JDBC技術(shù)
        JDBC(Java Database Connectivity)是Sun提供的一套數(shù)據(jù)庫編程接口API函數(shù),由Java語言編寫的類和接口組成。JDBC為數(shù)據(jù)庫開發(fā)人員提供了一個標(biāo)準(zhǔn)的API,使用Java編程語言和JDBC結(jié)合編寫的應(yīng)用程序,無須考慮要為不同的平臺編寫不同的應(yīng)用程序。真正實現(xiàn)“Write Once,Run Everywhere!”。
        
        2 JDBC編程實現(xiàn)
        使用JDBC技術(shù)進(jìn)行數(shù)據(jù)庫訪問時,Java應(yīng)用程序通過JDBC API和JDBC驅(qū)動程序管理器之間進(jìn)行通信,JDBC驅(qū)動程序管理器以兩種方式和最終的數(shù)據(jù)庫進(jìn)行通信:一是使用JDBC-ODBC橋驅(qū)動程序的間接方式,另一種是使用JDBC驅(qū)動程序的直接方式。
        下面以JDBC驅(qū)動程序的直接方式為例,說明Java語言與SQL Server2000連接的JDBC編程的全過程:
        (1)加載驅(qū)動程序
        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
        (2)通過DriverManager到得一個與數(shù)據(jù)庫連接的句柄
        private static String url="jdbc:microsoft:sqlserver://localhost:1433;databasename=xxxx ";
        Connection con = DriverManager.getConnection(url, user,password);
        (3)通過連接句柄綁定要執(zhí)行的語句
        Statement stmt = con.createStatement();
        (4)接收執(zhí)行結(jié)果
        ResultSet rs=stmt.executeQuery(sql);
        或ResultSet rs=stmt.executeUpdate(sql);
        (5)對結(jié)果進(jìn)行處理
        調(diào)用get XXX()方法對獲取結(jié)果中的值。
        (6)關(guān)閉與數(shù)據(jù)庫的連接
        rs.close();
        stmt.close();
        con.close();
        
        3 JDBC編程結(jié)果集分頁顯示
        在ResultSet類中提供了一套數(shù)據(jù)的分頁處理功能。
        3.1 技術(shù)要點
        (1)createStatement()方法:
        public Statement createStatement()
        獲取默認(rèn)連接聲明,沒有指針操作
        public Statement createStatement(int resultSetType,int resultSetConcurrency)
        resultSetType決定結(jié)果集類型的滾動方式,它的取值為:ResultSet.TYPE_FORWARD_ONLY、Result.TYPE_SCROLL_INSENSITIVE和ResultSet.TYPE_SCROLL_SENSITIVE
        resultSetConcurrency決定是否可以用結(jié)果集更新數(shù)據(jù)庫。它的取值為:Result.CONCUR_READ_ONLY 、Result.CONCUR_UPDATETABLE
        (2)ResultSetMetaData結(jié)果集元對象類
        結(jié)果集元數(shù)據(jù)通過使用getMetaData()來獲得結(jié)果集元對象。ResultSetMetaData結(jié)果集元對象類的方法:
        getColumnCount()
        getColumnName(int index)
        getColumnTypeName(int index)
        3.2 建立數(shù)據(jù)庫
        在SQL Server 2000下建立一個名為book的數(shù)據(jù)庫,在book數(shù)據(jù)庫下建立一個圖書信息表bookInfo,表的結(jié)構(gòu)為:bookInfo(no,bookname,author,price,public)
        3.3 Java源程序
        為了使得程序具有一定的通用性和靈活性,將要顯示的號碼和每頁的大?。宽摰挠涗洈?shù))由命令行輸入。即命令行參數(shù)arg[0]代表pageno,參數(shù)arg[1] 代表pagesize。源程序JDBCScrollDisplay.java如下:
        import java.sql.*;
        public class JDBCScrollDisplay{
               private static String url="jdbc:microsoft:sqlserver://localhost:1433;databasename=book";
                 private static String username="sa";
               private static String password="sa";
               public Connection conn(){
                      try {
                           Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                           Connection con = DriverManager.getConnection(url, username, password);
                           return con;
                          }
                        catch(SQLException e1){
                                   System.out.println("can't connection db:"+e1);
                                 return null;
                          }
                        catch (Exception e2) {
                                 System.out.println("Failed to load JDBC driver.");
                                 return null;
                            }
                        }
                      public void query(Connection con, String sql,int pageNo,int pageSize){
                      try{
                            if(con==null){
                                           throw new Exception("database connection can't use!");
                                         }
                          if(sql==null){
                                           throw new Exception("check your parameter: 'sql'! don't input null!");
                                         }
        int rowCount; //記錄總數(shù)
        int pageCount; //總頁數(shù)
        Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
        ResultSet rs = stmt.executeQuery(sql); //執(zhí)行查詢
        ResultSetMetaData rmeta = rs.getMetaData();//獲得數(shù)據(jù)字段個數(shù)
        int numColumns = rmeta.getColumnCount();
        rs.last();
        rowCount = rs.getRow();
        pageCount = (rowCount +pageSize-1)/pageSize; //計算總頁數(shù)
        if(pageNo> pageCount) pageNo=pageCount; //調(diào)整待顯示的頁碼
        if(pageCount >0){
                          rs.absolute((pageNo-1)*pageSize+1); //將記錄指針定位到待顯示頁的第一條記錄上
                          int i = 0;
                          while(i){
                                      for(int j = 0;j< numColumns;j++)
                                    {
                                        String sTemp = rs.getString(j+1);
                                      System.out.print(sTemp+" ");
                                      }
                           i++;
                             rs.next();
                             System.out.println("");
                             }
                           }
                      }
                        catch(Exception e){
                                System.out.println("query error:"+e);
                                }
                             }
        public void demo(int pageNo,int pageSize){
        try{
        JDBCScrollDisplay jd = new JDBCScrollDisplay();
        Connection con = jd.conn();
        String sql = "select * from bookInfo order by no";
        jd.query(con,sql,pageNo,pageSize);
        con.close();}
        catch(SQLException se){ System.out.println(se);}
        catch(Exception e){System.out.println(e);}}
        public static void main(String[] arg){
        JDBCScrollDisplay jsd = new JDBCScrollDisplay();
        int pageno = Integer.parseInt(arg[0]);
        int pagesize = Integer.parseInt(arg[1]);
        jsd.demo(pageno,pagesize);}}
        
        4 結(jié)束語
        JDBC是Java的一個標(biāo)準(zhǔn)SQL數(shù)據(jù)庫訪問接口,它為數(shù)據(jù)庫應(yīng)用開發(fā)人員、數(shù)據(jù)庫前臺工具開發(fā)人員提供一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計接口。開發(fā)人員只需使用JDBC提供的類,調(diào)用這些類的方法,即可對數(shù)據(jù)庫進(jìn)行訪問,而無需關(guān)心所使用的具體是什么數(shù)據(jù)庫系統(tǒng)。在實際的使用中經(jīng)常會遇到要提供可滾動的結(jié)果集,只需要在使用分頁數(shù)據(jù)時先聲明是一個可移動的SQL語句。上例可以任何應(yīng)用在對數(shù)據(jù)庫做任意操作的基礎(chǔ)上,再分頁顯示。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多