انسخ رمز الكود كما يلي:
الحزمة com.groundhog.codingmouse;
استيراد java.sql.Connection؛
استيراد java.sql.DriverManager؛
import java.sql.PreparedStatement;
import java.sql.ResultSet;
استيراد java.sql.SQLException؛
/**
* فئة إدارة قواعد البيانات
* @author CodingMouse
*2009.2.20
*/
الفئة النهائية العامة DBManager {
/**
* كائن اتصال قاعدة البيانات
*/
اتصال خاص dbConnection = null;
/**
* كائن تنفيذ أمر قاعدة البيانات
*/
إعداد خاص preStatement = null;
/**
* النتيجة مجموعة الكائن
*/
Private ResultSet rsSet = null;
/**
* رقم إصدار برنامج تشغيل قاعدة البيانات
*/
سلسلة ثابتة خاصة driverVersion = null;
/**
* ثوابت سلسلة اسم المستخدم وكلمة المرور لتسجيل الدخول إلى خادم قاعدة البيانات (القيم الافتراضية هي "sa")
*/
قاعدة بيانات سلسلة ثابتة خاصة = "sa"؛
قاعدة بيانات سلسلة ثابتة خاصة = "sa"؛
/**
* ثابت سلسلة اسم فئة برنامج تشغيل قاعدة البيانات
*/
السلسلة النهائية الثابتة الخاصة
DRIVER_CLASS_SQLSERVER2000 =
"com.microsoft.jdbc.sqlserver.SQLServerDriver";
خادم 2000 اتصال مباشر
السلسلة النهائية الثابتة الخاصة
DRIVER_CLASS_SQLSERVER2005 =
"com.microsoft.sqlserver.jdbc.SQLServerDriver";
خادم 2005 الاتصال المباشر
السلسلة النهائية الثابتة الخاصة
DRIVER_CLASS_BRIDGECONNECT = "sun.jdbc.odbc.JdbcOdbcDriver";
// اتصال جسر ODBC
/**
* ثوابت سلسلة اتصال قاعدة البيانات
*/
السلسلة النهائية الثابتة الخاصة
DATABASE_URL_SQLSERVER2000 =
"jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=stuD
B"؛ // اتصال SQL Server 2000 المباشر
السلسلة النهائية الثابتة الخاصة
DATABASE_URL_SQLSERVER2005 =
"jdbc:sqlserver://127.0.0.1:1433;DatabaseName=stuDB";
// اتصال SQL Server 2005 المباشر
السلسلة النهائية الثابتة الخاصة
DATABASE_URL_BRIDGECONNECT = "jdbc:odbc:stuDBSource";
// اتصال جسر ODBC
/**
* تحديد متغيرات المثيل الثابتة للفئة نفسها (ينطبق على تطبيقات الوضع الفردي [الأدوات])
*/
اتصال DBManager الخاص الثابت = null;
/**
* البناء الافتراضي المخصخص (ينطبق على تطبيقات الوضع الفردي [الأدوات] لمنع إنشاء مثيل للفئات مباشرة باستخدام الكلمة الأساسية الجديدة)
*/
مدير DB الخاص () {
ممتاز()؛
}
/**
* طريقة للحصول على مثيل فئة إدارة اتصال قاعدة البيانات (تطبيق وضع [البرنامج] الفردي)
*param version رقم إصدار برنامج تشغيل قاعدة البيانات، القيمة: (الإصدار =
2000 | الإصدار = 2005 | الإصدار = odbc)
* @param اسم المستخدم لتسجيل الدخول إلى خادم قاعدة بيانات المستخدم
* @param كلمة مرور تسجيل الدخول إلى خادم قاعدة بيانات كلمة المرور
*return كائن إدارة اتصال قاعدة البيانات
* @throws استثناء خطأ معلمة الاستثناء
*/
getInstance DBManager العام الثابت (
نسخة السلسلة،
مستخدم السلسلة،
كلمة مرور السلسلة)
يلقي استثناء {
إذا (!(الإصدار == "2000" || الإصدار == "2005"
||.الإصدار == "odbc")) {
throw new Exception("رقم إصدار برنامج تشغيل قاعدة البيانات غير صحيح، يمكن أن تكون القيمة فقط "2000/2005/odbc"!");
}
// احفظ رقم إصدار برنامج تشغيل قاعدة البيانات
driverVersion = version;
إذا (user == null || user.equals("")) {
طرح استثناء جديد("لا يمكن أن يكون اسم مستخدم تسجيل الدخول إلى خادم قاعدة البيانات فارغًا!");
}
// احفظ اسم المستخدم وكلمة المرور لتسجيل الدخول إلى خادم قاعدة البيانات
dataUser = user;
قاعدة بيانات كلمة المرور = كلمة المرور؛
// قم بتطبيق نمط [البرنامج] الفردي للتأكد من أن الفصل نفسه يحتوي على مثيل واحد فقط
إذا (مدير الاتصال == فارغ) {
ConnectionManager = new DBManager();
}
// قم بإرجاع مثيل للفئة نفسها
إرجاع مدير الاتصال؛
}
/**
* طريقة الحصول على اتصال بقاعدة البيانات
*return كائن اتصال قاعدة البيانات
*/
اتصال خاص getConnection() {
يحاول {
Class.forName(
إصدار السائق ==
"2000"
؟
DRIVER_CLASS_SQLSERVER2000
: (إصدار السائق ==
"2005"
؟
DRIVER_CLASS_SQLSERVER2005
:
DRIVER_CLASS_BRIDGECONNECT));
this.dbConnection =
DriverManager.getConnection(
إصدار السائق ==
"2000"
؟
DATABASE_URL_SQLSERVER2000
: (إصدار السائق ==
"2005"
؟
DATABASE_URL_SQLSERVER2005
:
DATABASE_URL_BRIDGECONNECT)،
مستخدم قاعدة البيانات,
قاعدة بيانات كلمة المرور)؛
} التقاط (ClassNotFoundException على سبيل المثال) {
System.err.println("لم يتم العثور على خادم SQL
" + driverVersion + "فئة برنامج تشغيل قاعدة البيانات: " + ex.getMessage());
// إخراج معلومات مكدس الاستثناء على وحدة التحكم
// ex.printStackTrace();
} قبض (استثناء على سبيل المثال) {
System.err.println("الحصول على خطأ في اتصال قاعدة البيانات:" + ex.getMessage());
// إخراج معلومات مكدس الاستثناء على وحدة التحكم
// ex.printStackTrace();
}
// إرجاع كائن اتصال قاعدة البيانات
إرجاع this.dbConnection;
}
/**
* طريقة الحصول على كائن تنفيذ أمر قاعدة البيانات
* سلسلة بيان تجميع أوامر SQLparam SQL التي سيتم تنفيذها
*return كائن تنفيذ أمر قاعدة البيانات
*/
getPreparedStatement الخاص getPreparedStatement
(سلسلة SQL) {
يحاول {
// قم بإنشاء كائن تنفيذ أمر قاعدة البيانات بناءً على كائن اتصال قاعدة البيانات الذي تم الحصول عليه
this.preStatement = getConnection
().prepareStatement(sql);
} قبض (استثناء على سبيل المثال) {
System.err.println("خطأ في الحصول على كائن تنفيذ أمر قاعدة البيانات:" + ex.getMessage());
// إخراج معلومات مكدس الاستثناء على وحدة التحكم
// ex.printStackTrace();
}
// إرجاع كائن تنفيذ أمر قاعدة البيانات
إرجاع this.preStatement;
}
/**
* تنفيذ بيان التحديث (إدراج|تحديث|حذف)
* سلسلة بيان مجموعة أوامر SQLparam SQL التي سيتم تنفيذها
* @return عدد الصفوف المتأثرة
*/
كثافة العمليات العامة تنفيذ التحديث (سلسلة SQL) {
يحاول {
// أفرغ المحتوى الأصلي لكائن مجموعة النتائج
this.rsSet = null;
// نفذ البيان وأرجع عدد الصفوف المتأثرة
قم بإرجاع this.getPreparedStatement
(sql).executeUpdate();
} قبض على (SQLException ه) {
System.err.println("حدث خطأ أثناء تحديث البيانات:" +
e.getMessage());
العودة 0؛
}أخيراً{
// إغلاق موارد اتصال قاعدة البيانات
CloseDBResource();
}
}
/**
* تنفيذ بيان الاستعلام (اختر)
* سلسلة بيان مجموعة أوامر SQLparam SQL التي سيتم تنفيذها
*return كائن مجموعة النتائج بعد الاستعلام
*/
مجموعة النتائج العامة ExecutyQuery(String sql){
يحاول {
// أفرغ المحتوى الأصلي لكائن مجموعة النتائج
this.rsSet = null;
// تنفيذ عبارة SQL للحصول على مجموعة النتائج
this.rsSet =
this.getPreparedStatement(sql).executeQuery();
} قبض على (SQLException ه) {
System.err.println("خطأ في بيانات الاستعلام:" +
e.getMessage());
}
// إرجاع كائن مجموعة النتائج
إرجاع this.rsSet;
}
/**
* الحصول على عدد السجلات في مجموعة النتائج التي تم إرجاعها بعد تنفيذ عبارة SQL المحددة
* سلسلة بيان مجموعة أوامر SQLparam SQL التي سيتم تنفيذها
* @return عدد السجلات التي تم الحصول عليها من نتائج الاستعلام
*/
كثافة العمليات العامة getResultSetCount(سلسلة sql) {
// احفظ متغير العداد الذي يُرجع عدد الصفوف المسجلة بعد تنفيذ عبارة SQL المحددة.
عدد صحيح = 0؛
يحاول {
// أفرغ المحتوى الأصلي لكائن مجموعة النتائج
this.rsSet = null;
// تنفيذ عبارة SQL للحصول على مجموعة النتائج
this.rsSet = this.getPreparedStatement
(sql).executeQuery();
// كرر مجموعة النتائج وقم بتجميع العداد
بينما (this.rsSet.next()) {
العد++;
}
} قبض على (SQLException ه) {
printStackTrace();
}
عدد الإرجاع؛
}
/**
* إغلاق موارد اتصال قاعدة البيانات (بما في ذلك كائنات مجموعة النتائج وكائنات تنفيذ الأوامر وكائنات الاتصال)
*/
الفراغ العام CloseDBResource () {
يحاول {
CloseResultSet();
ClosePreparedStatement();
CloseConnection();
} التقاط (SQLException sqlEx) {
System.err.println(sqlEx.getMessage
());
// إخراج معلومات مكدس الاستثناء على وحدة التحكم
// sqlEx.printStackTrace();
}
}
/**
* طريقة لإغلاق كائن مجموعة النتائج
* @ يلقي SQLException
*/
إغلاق الفراغ الخاص () يلقي SQLException {
يحاول {
إذا (this.rsSet != فارغة) {
this.rsSet. Close();
this.rsSet = null;
}
} التقاط (SQLException sqlEx) {
طرح SQLException جديد ("حدث خطأ أثناء إغلاق كائن مجموعة النتائج:" + sqlEx.getMessage());
// إخراج معلومات مكدس الاستثناء على وحدة التحكم
// sqlEx.printStackTrace();
}
}
/**
* طريقة لإغلاق كائن تنفيذ أمر قاعدة البيانات
* @ يلقي SQLException
*/
رميات الفراغ الخاص ClosePreparedStatement()
SQLException {
يحاول {
إذا (this.preStatement != null) {
this.preStatement. Close();
this.preStatement = null;
}
} التقاط (SQLException sqlEx) {
طرح SQLException جديد ("خطأ في كائن تنفيذ أمر قاعدة البيانات:" + sqlEx.getMessage());
// إخراج معلومات مكدس الاستثناء على وحدة التحكم
// sqlEx.printStackTrace();
}
}
/**
* طريقة لإغلاق اتصال قاعدة البيانات
* @ يلقي SQLException
*/
إغلاق الفراغ الخاص () يلقي SQLException {
يحاول {
إذا (this.dbConnection != null && (!
this.dbConnection.isClosed())) {
this.dbConnection. Close();
}
} التقاط (SQLException sqlEx) {
طرح SQLException جديد ("خطأ في إغلاق اتصال قاعدة البيانات:" + sqlEx.getMessage());
// إخراج معلومات مكدس الاستثناء على وحدة التحكم
// sqlEx.printStackTrace();
}
}
}