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

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

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

    BlogJava 聯(lián)系 聚合 管理  

    Blog Stats

    隨筆檔案

    exams


    java世界

    世界Java

    在使用JDBC連接數(shù)據(jù)庫的時,我們會采用executeQuery(String sql)獲得一個結(jié)果集。當數(shù)據(jù)庫結(jié)構(gòu)變化或者獲得其他數(shù)據(jù)庫表結(jié)果集的時候我們需要將ResultSet結(jié)果集根據(jù)不同的數(shù)據(jù)結(jié)構(gòu)重新遍歷。
    如何才能建立一個與數(shù)據(jù)庫結(jié)構(gòu)無關(guān)的JDBC連接呢?我們可以通過使用ResultSetMetaData()方法獲得表結(jié)構(gòu)。然后使用Object[]數(shù)組遍歷結(jié)果集。當我們要取得相應(yīng)的結(jié)果時,我們可以使用Iterator迭代器。只要遍歷迭代器就可以取出結(jié)果。
    下面是我寫的一個方法:
      1import java.math.BigDecimal;
      2import java.sql.Connection;
      3import java.sql.DriverManager;
      4import java.sql.ResultSet;
      5import java.sql.ResultSetMetaData;
      6import java.sql.SQLException;
      7import java.sql.Statement;
      8import java.util.ArrayList;
      9import java.util.Iterator;
     10import java.util.List;
     11
     12public class newJdbc {
     13    private String url = "jdbc:oracle:thin:@localhost:  14
     15    private String dbUserName = "scott";
     16
     17    private String dbUserPassword = "tiger";
     18
     19    private Connection conn = null;
     20
     21    private Statement stmt = null;
     22
     23    private ResultSet rs = null;
     24
     25    public newJdbc() {
     26        try {
     27            Class.forName("oracle.jdbc.driver.OracleDriver");
     28        } catch (ClassNotFoundException e) {
     29            e.printStackTrace();
     30        }
     31    }
     32
     33    public Connection getConnection() {
     34        try {
     35            conn = DriverManager.getConnection(url, dbUserName, dbUserPassword);
     36        } catch (SQLException e) {
     37            e.printStackTrace();
     38        }
     39        return conn;
     40    }
     41
     42    public void close(ResultSet rs, Statement stmt, Connection conn) {
     43        if (rs != null) {
     44            try {
     45                rs.close();
     46            } catch (SQLException e) {
     47                e.printStackTrace();
     48            }
     49        }
     50        if (stmt != null) {
     51            try {
     52                stmt.close();
     53            } catch (SQLException e) {
     54                e.printStackTrace();
     55            }
     56        }
     57        if (conn != null) {
     58            try {
     59                conn.close();
     60            } catch (SQLException e) {
     61                e.printStackTrace();
     62            }
     63        }
     64    }
     65
     66    public List query(String sql) {
     67        List list = new ArrayList();
     68
     69        conn = this.getConnection();
     70        try {
     71            stmt = conn.createStatement();
     72            rs = stmt.executeQuery(sql);
     73            //獲取數(shù)據(jù)庫表結(jié)構(gòu)
     74            ResultSetMetaData rsm = rs.getMetaData();
     75            //取得數(shù)據(jù)庫的列數(shù)
     76            int col = rsm.getColumnCount();
     77            //生成col長度的Object數(shù)組
     78            Object[] obj = new Object[col];
     79            //遍歷結(jié)果集,將結(jié)果存入Object數(shù)組
     80            while (rs.next()) {
     81                for (int i = 0; i < col; i++) {
     82                    obj[i] = rs.getObject(i + 1);
     83                }
     84                list.add(obj);
     85            }
     86        } catch (SQLException e) {
     87            e.printStackTrace();
     88        } finally {
     89            this.close(rs, stmt, conn);
     90        }
     91        return list;
     92    }
     93
     94    public void update(String sql) {
     95        try {
     96            conn = this.getConnection();
     97            stmt = conn.createStatement();
     98            stmt.executeUpdate(sql);
     99        } catch (SQLException e) {
    100            e.printStackTrace();
    101        }
    102    }
    103
    104    public static void main(String args[]) {
    105        newJdbc nj = new newJdbc();
    106        String sql = "select * from users";
    107        List list = nj.query(sql);
    108        //返回list的迭代器
    109        Iterator it = list.iterator();
    110        //遍歷迭代器,取出結(jié)果  
    1z0-147
    111        while (it.hasNext()) {
    112            Object[] o = (Object[]) it.next();
    113            int id = ((BigDecimal) o[0]).intValue();
    114            System.out.println(id);
    115        }
    116
    117    }
    118}

    posted on 2007-09-07 13:49 java2java 閱讀(1050) 評論(2)  編輯  收藏

    評論

    # re: JDBC之代碼重復(fù)使用 2007-09-09 13:57 Jay
    唉,說幾個大問題:connection很昂貴的資源,怎么能運行一次query就自作主張的關(guān)掉?query連set parameter都不支持,怎么復(fù)用?那個BigDecimal,只有oracle的number類型才能這么轉(zhuǎn)換吧,別的數(shù)據(jù)庫呢?
      回復(fù)  更多評論
      

    # re: JDBC之代碼重復(fù)使用 2007-09-11 09:24 wangsoft
    樓上的有道理,但是connection可以關(guān)閉,我們通過連接池就好。這種解決問題是個思路,但是只是開頭,接下來還是要根據(jù)metaData生成某些東西(或配置文件或持久化對象),最后走下去就是ibatis和hibernate了,哈哈,愚見而已  回復(fù)  更多評論
      


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲综合最新无码专区| 高清国语自产拍免费视频国产| 亚洲A∨午夜成人片精品网站 | 午夜成年女人毛片免费观看| 亚洲成av人片不卡无码| 久久精品国产免费观看三人同眠| 亚洲av无码不卡一区二区三区| 最近的2019免费中文字幕| 亚洲一区二区三区在线观看精品中文| 一级片在线免费看| 中文字幕亚洲综合久久男男| 香蕉免费在线视频| 亚洲中文字幕在线乱码| 大地资源中文在线观看免费版| 亚洲高清国产AV拍精品青青草原 | 国产一级理论免费版| 色费女人18女人毛片免费视频 | 国产亚洲一区二区三区在线观看| 东方aⅴ免费观看久久av | 亚洲另类激情综合偷自拍图| a级毛片免费全部播放无码| 亚洲AV永久纯肉无码精品动漫| 日本一道本不卡免费| 亚洲人成网站18禁止久久影院| 免费视频中文字幕| 色多多A级毛片免费看| 亚洲av无码一区二区乱子伦as| 免费观看激色视频网站bd| 亚洲日韩精品无码专区加勒比☆| 四虎永久免费影院| a级毛片毛片免费观看久潮喷| 久久亚洲精品成人无码网站| AV免费网址在线观看| 美女被免费网站在线视频免费| 国产亚洲福利精品一区| 国产香蕉免费精品视频| 亚洲AV无码专区在线观看成人 | 亚洲国产主播精品极品网红| 在线人成免费视频69国产| ww亚洲ww在线观看国产| 亚洲国产成人久久一区WWW|