posts - 27,  comments - 14,  trackbacks - 0
          在使用JDBC連接數據庫的時,我們會采用executeQuery(String sql)獲得一個結果集。當數據庫結構變化或者獲得其他數據庫表結果集的時候我們需要將ResultSet結果集根據不同的數據結構重新遍歷。
          如何才能建立一個與數據庫結構無關的JDBC連接呢?我們可以通過使用ResultSetMetaData()方法獲得表結構。然后使用Object[]數組遍歷結果集。當我們要取得相應的結果時,我們可以使用Iterator迭代器。只要遍歷迭代器就可以取出結果。
          下面是我寫的一個方法:
           1import java.math.BigDecimal;
            2
          import java.sql.Connection;
            3
          import java.sql.DriverManager;
            4
          import java.sql.ResultSet;
            5
          import java.sql.ResultSetMetaData;
            6
          import java.sql.SQLException;
            7
          import java.sql.Statement;
            8
          import java.util.ArrayList;
            9
          import java.util.Iterator;
           10
          import java.util.List;
           
          11
           12
          public class newJdbc {
           
          13    private String url = "jdbc:oracle:thin:@localhost:1521:nitpro";
           
          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            //獲取數據庫表結構
           74            ResultSetMetaData rsm = rs.getMetaData();
           
          75            //取得數據庫的列數
           76            int col = rsm.getColumnCount();
           
          77            //生成col長度的Object數組
           78            Object[] obj = new Object[col];
           
          79            //遍歷結果集,將結果存入Object數組
           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        //遍歷迭代器,取出結果
          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}

          119
          posted on 2007-07-12 16:30 Scott.Pan 閱讀(378) 評論(0)  編輯  收藏 所屬分類: 代碼收藏夾
          <2007年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 石楼县| 当雄县| 嘉义市| 双柏县| 呼和浩特市| 西昌市| 芒康县| 纳雍县| 德庆县| 福州市| 鄂托克前旗| 商水县| 安化县| 东光县| 定边县| 永丰县| 聂拉木县| 宝丰县| 顺义区| 峡江县| 丁青县| 无为县| 冷水江市| 南投市| 江阴市| 疏勒县| 集安市| 湖南省| 和硕县| 清水河县| 如东县| 祁门县| 贵溪市| 绍兴县| 拜泉县| 监利县| 德化县| 金坛市| 五台县| 永寿县| 英山县|