เมื่อใช้ JDBC เพื่อเชื่อมต่อกับฐานข้อมูล เราจะใช้ExecuteQuery(String sql) เพื่อรับชุดผลลัพธ์ เมื่อโครงสร้างฐานข้อมูลเปลี่ยนแปลงหรือเมื่อได้รับชุดผลลัพธ์ตารางฐานข้อมูลอื่น เราจำเป็นต้องสำรวจชุดผลลัพธ์ ResultSet อีกครั้งตามโครงสร้างข้อมูลที่แตกต่างกัน
ฉันจะสร้างการเชื่อมต่อ JDBC ที่ไม่ขึ้นอยู่กับโครงสร้างฐานข้อมูลได้อย่างไร เราสามารถรับโครงสร้างตารางได้โดยใช้เมธอด ResultSetMetaData() จากนั้นใช้อาร์เรย์ Object[] เพื่อวนซ้ำชุดผลลัพธ์ เมื่อเราต้องการได้ผลลัพธ์ที่สอดคล้องกัน เราสามารถใช้ Iterator ได้ เพียงข้ามตัววนซ้ำเพื่อให้ได้ผลลัพธ์
นี่คือวิธีที่ฉันเขียน:
1นำเข้า java.math.BigDecimal;
2นำเข้า java.sql.การเชื่อมต่อ;
3นำเข้า java.sql.DriverManager;
4 นำเข้า java.sql.ResultSet;
5นำเข้า java.sql.ResultSetMetaData;
6นำเข้า java.sql.SQLException;
7นำเข้า java.sql.คำสั่ง;
8 นำเข้า java.util.ArrayList;
9 นำเข้า java.util.Iterator;
10นำเข้า java.util.List;
11
12คลาสสาธารณะ newJdbc {
13 URL สตริงส่วนตัว = "jdbc:oracle:thin:@localhost:1521:nitpro";
14
15 สตริงส่วนตัว dbUserName = "สกอตต์";
16
17 สตริงส่วนตัว dbUserPassword = "เสือ";
18
19 การเชื่อมต่อส่วนตัว conn = null;
20
21 คำสั่งส่วนตัว stmt = null;
ยี่สิบสอง
23 ResultSet ส่วนตัว rs = null;
ยี่สิบสี่
25 สาธารณะ newJdbc() {
26 ลอง {
27 Class.forName("oracle.jdbc.driver.OracleDriver");
28 } จับ (ClassNotFoundException จ) {
29 e.printStackTrace();
30}
31}
32
33 การเชื่อมต่อสาธารณะ getConnection() {
34 ลอง {
35 conn = DriverManager.getConnection (url, dbUserName, dbUserPassword);
36 } จับ (SQLException e) {
37 e.printStackTrace();
38 }
39 กลับคอน;
40}
41
42 การปิดโมฆะสาธารณะ (ResultSet rs, Statement stmt, Connection conn) {
43 ถ้า (อาร์เอส != null) {
44 ลอง {
45 ฿.ปิด();
46 } จับ (SQLException e) {
47 e.printStackTrace();
48 }
49 }
50 ถ้า (stmt != null) {
51 ลอง {
52 stmt.ปิด();
53 } จับ (SQLException e) {
54 อี.printStackTrace();
55 }
56 }
57 ถ้า (conn != null) {
58 ลอง {
59 เชื่อมต่อ.ปิด();
60 } จับ (SQLException e) {
61 e.printStackTrace();
62 }
63}
64}
65
66 แบบสอบถามรายการสาธารณะ (สตริง sql) {
67 รายการ รายการ = ใหม่ ArrayList();
68
69 conn = this.getConnection();
70 ลอง {
71 stmt = conn.createStatement();
72 อาร์เอส = stmt.executeQuery(sql);
73 // รับโครงสร้างตารางฐานข้อมูล
74 ResultSetMetaData rsm = rs.getMetaData();
75 //รับจำนวนคอลัมน์ในฐานข้อมูล
76 int Col = rsm.getColumnCount();
77 //สร้างอาร์เรย์วัตถุที่มีความยาวคอลัมน์
78 วัตถุ[] obj = วัตถุใหม่[คอลัมน์];
79 //สำรวจชุดผลลัพธ์และเก็บผลลัพธ์ไว้ในอาร์เรย์ Object
80 ในขณะที่ (rs.next()) {
81 สำหรับ (int i = 0; i <col; i++) {
82 obj[i] = rs.getObject(i + 1);
83}
84 รายการ.เพิ่ม(obj);
85}
86 } จับ (SQLException e) {
87 e.printStackTrace();
88 } ในที่สุด {
89 this.close(rs, stmt, conn);
90}
91 รายการส่งคืน;
92 }
93
การอัปเดตโมฆะสาธารณะ 94 (สตริง sql) {
95 ลอง {
96 conn = this.getConnection();
97 stmt = conn.createStatement();
98 stmt.executeUpdate(sql);
99 } จับ (SQLException e) {
100 e.printStackTrace();
101 }
102 }
103
104 โมฆะสาธารณะคงหลัก (String args []) {
105 newJdbc nj = newJdbc();
106 String sql = "เลือก * จากผู้ใช้";
107 รายการ = nj.query(sql);
108 //ส่งคืนตัววนซ้ำของรายการ
109 ตัววนซ้ำ it = list.iterator();
110 //สำรวจตัววนซ้ำและรับผลลัพธ์
111 ในขณะที่ (it.hasNext()) {
112 วัตถุ[] o = (วัตถุ[]) it.next();
113 int id = ((BigDecimal) o[0]).intValue();
114 System.out.println (รหัส);
115 }
116
117 }
118}
http://blog.csdn.net/xcl6996/archive/2007/06/22/1662633.aspx