عند استخدام JDBC للاتصال بقاعدة البيانات، سوف نستخدم ExecuteQuery(String sql) للحصول على مجموعة النتائج. عندما تتغير بنية قاعدة البيانات أو عند الحصول على مجموعات نتائج أخرى لجدول قاعدة البيانات، نحتاج إلى إعادة اجتياز مجموعة نتائج ResultSet وفقًا لهياكل بيانات مختلفة.
كيف يمكنني إنشاء اتصال JDBC مستقل عن بنية قاعدة البيانات؟ يمكننا الحصول على بنية الجدول باستخدام طريقة ResultSetMetaData(). ثم استخدم مصفوفة Object[] للتكرار على مجموعة النتائج. عندما نريد الحصول على النتائج المقابلة، يمكننا استخدام Iterator. فقط قم باجتياز المكرر للحصول على النتيجة.
إليكم الطريقة التي كتبتها:
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
12 فئة عامة newJdbc {
13 عنوان url الخاص بالسلسلة = "jdbc:Oracle:thin:@localhost:1521:nitpro";
14
15 سلسلة خاصة dbUserName = "scott";
16
17 سلسلة خاصة dbUserPassword = "tiger";
18
19 اتصال خاص = null;
20
21 بيان خاص stmt = null;
إثنان وعشرون
23 مجموعة النتائج الخاصة rs = null;
أربعة وعشرون
25 عام جديدJdbc() {
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 ه) {
37 e.printStackTrace();
38 }
39 عودة كون؛
40}
41
42 إغلاق الفراغ العام (ResultSet rs،Statement stmt، Connection conn) {
43 إذا (RS ! = فارغة) {
44 حاول {
45 رس.إغلاق();
46 } catch (SQLException e) {
47 e.printStackTrace();
48 }
49 }
50 إذا (stmt! = فارغة) {
51 حاول {
52 ستمت.إغلاق();
53 } قبض (SQLException ه) {
54 e.printStackTrace();
55 }
56 }
57 إذا (كون ! = فارغة) {
58 حاول {
59 كون.كلوز();
60 } التقاط (SQLException ه) {
61 e.printStackTrace();
62 }
63}
64}
65
66 استعلام القائمة العامة (سلسلة SQL) {
67 List list = new ArrayList();
68
69 كون = this.getConnection();
70 محاولة {
71 stmt = conn.createStatement();
72 rs = stmt.executeQuery(sql);
73 //احصل على بنية جدول قاعدة البيانات
74 ResultSetMetaData rsm = rs.getMetaData();
75 //احصل على عدد الأعمدة في قاعدة البيانات
76 int col = rsm.getColumnCount();
77 //إنشاء مجموعة كائنات بطول العمود
78 Object[] obj = new Object[col];
79 //اجتياز مجموعة النتائج وتخزين النتائج في مصفوفة الكائنات
80 بينما (rs.next()) {
81 لـ (int i = 0; i < col; i++) {
82 obj[i] = rs.getObject(i + 1);
83}
84 قائمة.add(obj);
85}
86 } التقاط (SQLException ه) {
87 e.printStackTrace();
88 } أخيرا {
89 هذا.إغلاق(rs, stmt, conn);
90}
91 قائمة العودة؛
92 }
93
94 تحديث الفراغ العام (سلسلة SQL) {
95 حاول {
96 كون = this.getConnection();
97 stmt = conn.createStatement();
98 stmt.executeUpdate(sql);
99 } التقاط (SQLException ه) {
100 e.printStackTrace();
101 }
102 }
103
104 - الفراغ الثابت العام الرئيسي(String args[]) {
105 newJdbc nj = newnewJdbc();
106 String sql = "اختر * من المستخدمين";
107 قائمة القائمة = nj.query(sql);
108 //إرجاع مكرر القائمة
109 مكرر it = list.iterator();
110 //اجتياز المكرر والحصول على النتيجة
111 بينما (it.hasNext()) {
112 Object[] o = (Object[]) it.next();
113 int id = ((BigDecimal) o[0]).intValue();
114 System.out.println(id);
115 }
116
117 }
118}
http://blog.csdn.net/xcl6996/archive/2007/06/22/1662633.aspx