คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ com.groundhog.codingmouse;
นำเข้า java.sql.Connection;
นำเข้า java.sql.DriverManager;
นำเข้า java.sql.PreparedStatement;
นำเข้า java.sql.ResultSet;
นำเข้า java.sql.SQLException;
-
* คลาสการจัดการฐานข้อมูล
* @ผู้เขียน CodingMouse
*2009.2.20
-
DBManager คลาสสุดท้ายสาธารณะ {
-
* วัตถุการเชื่อมต่อฐานข้อมูล
-
การเชื่อมต่อส่วนตัว dbConnection = null;
-
* วัตถุการดำเนินการคำสั่งฐานข้อมูล
-
ส่วนตัว PreStatement preStatement = null;
-
* วัตถุชุดผลลัพธ์
-
ส่วนตัว ResultSet rsSet = null;
-
* หมายเลขเวอร์ชันไดรเวอร์ฐานข้อมูล
-
driverVersion สตริงคงที่ส่วนตัว = null;
-
* ชื่อผู้ใช้เข้าสู่ระบบเซิร์ฟเวอร์ฐานข้อมูลและค่าคงที่สตริงรหัสผ่าน (ค่าเริ่มต้นคือ 'sa')
-
ฐานข้อมูลสตริงคงที่ส่วนตัว User = "sa";
ฐานข้อมูลสตริงคงที่ส่วนตัวรหัสผ่าน = "sa";
-
* ไดรเวอร์ฐานข้อมูลค่าคงที่สตริงชื่อคลาสที่สมบูรณ์
-
สตริงสุดท้ายแบบคงที่ส่วนตัว
DRIVER_CLASS_SQLSERVER2000 =
"com.microsoft.jdbc.sqlserver.SQLServerDriver"; // SQL
การเชื่อมต่อโดยตรงของเซิร์ฟเวอร์ 2000
สตริงสุดท้ายแบบคงที่ส่วนตัว
DRIVER_CLASS_SQLSERVER2005 =
"com.microsoft.sqlserver.jdbc.SQLServerDriver"; // SQL
การเชื่อมต่อโดยตรงของเซิร์ฟเวอร์ 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;
-
* โครงสร้างเริ่มต้นแบบแปรรูป (ใช้กับแอปพลิเคชันโหมดซิงเกิลตัน [แวร์] เพื่อป้องกันไม่ให้คลาสถูกสร้างอินสแตนซ์โดยตรงโดยใช้คำหลักใหม่)
-
ส่วนตัวDBManager() {
ซุปเปอร์();
-
-
* วิธีการรับอินสแตนซ์คลาสการจัดการการเชื่อมต่อฐานข้อมูล (แอปพลิเคชันของโหมดซิงเกิลตัน [แวร์])
* @param version หมายเลขเวอร์ชันไดรเวอร์ฐานข้อมูล, ค่า: (version =
2000 | . เวอร์ชัน = 2005 | .
* ชื่อผู้ใช้ล็อกอินเซิร์ฟเวอร์ฐานข้อมูลผู้ใช้ @param
* @param รหัสผ่านฐานข้อมูลรหัสผ่านเข้าสู่ระบบเซิร์ฟเวอร์
* วัตถุการจัดการการเชื่อมต่อฐานข้อมูล @return
* @throws ข้อยกเว้น ข้อยกเว้นข้อผิดพลาดพารามิเตอร์ข้อยกเว้น
-
สาธารณะ DBManager คงที่ getInstance (
รุ่นสตริง
ผู้ใช้สตริง
รหัสผ่านสตริง)
พ่นข้อยกเว้น {
ถ้า (!(รุ่น == "2000" || รุ่น == "2005"
||. เวอร์ชัน == "odbc")) {
โยนข้อยกเว้นใหม่ ("หมายเลขเวอร์ชันไดรเวอร์ฐานข้อมูลไม่ถูกต้อง ค่าสามารถเป็น "2000/2005/odbc" เท่านั้น!");
-
//บันทึกหมายเลขเวอร์ชันไดรเวอร์ฐานข้อมูล
ไดร์เวอร์เวอร์ชั่น = เวอร์ชั่น;
ถ้า (ผู้ใช้ == null || user.equals ("")) {
โยนข้อยกเว้นใหม่ ("ชื่อผู้ใช้เข้าสู่ระบบเซิร์ฟเวอร์ฐานข้อมูลไม่สามารถเว้นว่างได้!");
-
//บันทึกชื่อผู้ใช้และรหัสผ่านเข้าสู่ระบบเซิร์ฟเวอร์ฐานข้อมูล
ฐานข้อมูล User = ผู้ใช้;
ฐานข้อมูลรหัสผ่าน = รหัสผ่าน;
// ใช้รูปแบบ singleton [ware] เพื่อให้แน่ใจว่าคลาสนั้นมีเพียงอินสแตนซ์เดียวเท่านั้น
ถ้า (ตัวจัดการการเชื่อมต่อ == null) {
ConnectionManager = DBManager ใหม่ ();
-
// ส่งคืนอินสแตนซ์ของคลาสเอง
ส่งคืนตัวจัดการการเชื่อมต่อ;
-
-
* วิธีการรับการเชื่อมต่อฐานข้อมูล
* อ็อบเจ็กต์การเชื่อมต่อฐานข้อมูล @return
-
การเชื่อมต่อส่วนตัว getConnection() {
พยายาม {
Class.forName(
เวอร์ชันไดรเวอร์ ==
"2000"
-
DRIVER_CLASS_SQLSERVER2000
: (เวอร์ชันไดรเวอร์ ==
"2548"
-
DRIVER_CLASS_SQLSERVER2005
-
DRIVER_CLASS_BRIDGECONNECT));
นี้.dbConnection =
DriverManager.getConnection(
เวอร์ชันไดรเวอร์ ==
"2000"
-
DATABASE_URL_SQLSERVER2000
: (เวอร์ชันไดรเวอร์ ==
"2548"
-
DATABASE_URL_SQLSERVER2005
-
DATABASE_URL_BRIDGECONNECT)
ผู้ใช้ฐานข้อมูล,
รหัสผ่านฐานข้อมูล);
} จับ (ClassNotFoundException เช่น) {
System.err.println("ไม่พบ SQL Server"
" + driverVersion + "คลาสไดรเวอร์ฐานข้อมูล: " + ex.getMessage());
//ส่งออกข้อมูลสแต็กข้อยกเว้นบนคอนโซล
// ex.printStackTrace();
} จับ (ข้อยกเว้นเช่น) {
System.err.println("รับข้อผิดพลาดการเชื่อมต่อฐานข้อมูล: " + ex.getMessage());
//ส่งออกข้อมูลสแต็กข้อยกเว้นบนคอนโซล
// ex.printStackTrace();
-
// ส่งคืนวัตถุการเชื่อมต่อฐานข้อมูล
ส่งคืน this.dbConnection;
-
-
* วิธีการรับออบเจ็กต์การดำเนินการคำสั่งฐานข้อมูล
* @param sql สตริงคำสั่งแอสเซมบลีคำสั่ง SQL ที่จะดำเนินการ
* วัตถุการดำเนินการคำสั่งฐานข้อมูล @return
-
PreparationStatement ส่วนตัว getPreparedStatement
(สตริง sql) {
พยายาม {
//สร้างวัตถุการดำเนินการคำสั่งฐานข้อมูลตามวัตถุการเชื่อมต่อฐานข้อมูลที่ได้รับ
this.preStatement = getConnection
().เตรียมคำสั่ง(sql);
} จับ (ข้อยกเว้นเช่น) {
System.err.println("ข้อผิดพลาดในการได้รับวัตถุการดำเนินการคำสั่งฐานข้อมูล: " + ex.getMessage());
//ส่งออกข้อมูลสแต็กข้อยกเว้นบนคอนโซล
// ex.printStackTrace();
-
// ส่งคืนอ็อบเจ็กต์การดำเนินการคำสั่งฐานข้อมูล
ส่งคืน this.preStatement;
-
-
* ดำเนินการคำสั่งอัพเดต (แทรก|อัปเดต|ลบ)
* @param sql สตริงคำสั่งแอสเซมบลีคำสั่ง SQL ที่จะดำเนินการ
* @return จำนวนแถวที่ได้รับผลกระทบ
-
int สาธารณะดำเนินการอัปเดต (สตริง sql) {
พยายาม {
// ล้างเนื้อหาต้นฉบับของวัตถุชุดผลลัพธ์
นี้.rsSet = null;
//ดำเนินการคำสั่งและส่งกลับจำนวนแถวที่ได้รับผลกระทบ
ส่งคืน this.getPreparedStatement
(sql).executeUpdate();
} จับ (SQLException e) {
System.err.println("ข้อผิดพลาดในการอัปเดตข้อมูล:" +
e.getMessage());
กลับ 0;
}ในที่สุด{
//ปิดทรัพยากรการเชื่อมต่อฐานข้อมูล
closeDBResource();
-
-
-
* ดำเนินการคำสั่งแบบสอบถาม (เลือก)
* @param sql สตริงคำสั่งแอสเซมบลีคำสั่ง SQL ที่จะดำเนินการ
* @return วัตถุชุดผลลัพธ์หลังจากการสืบค้น
-
ResultSet สาธารณะดำเนินการแบบสอบถาม (สตริง sql) {
พยายาม {
// ล้างเนื้อหาต้นฉบับของวัตถุชุดผลลัพธ์
นี้.rsSet = null;
//ดำเนินการคำสั่ง sql เพื่อรับชุดผลลัพธ์
นี้.rsSet=
this.getPreparedStatement(sql).executeQuery();
} จับ (SQLException e) {
System.err.println("ข้อผิดพลาดของข้อมูลแบบสอบถาม:" +
e.getMessage());
-
// ส่งคืนวัตถุชุดผลลัพธ์
กลับ this.rsSet;
-
-
* รับจำนวนบันทึกในชุดผลลัพธ์ที่ส่งคืนหลังจากดำเนินการคำสั่ง SQL ที่ระบุ
* @param sql สตริงคำสั่งแอสเซมบลีคำสั่ง SQL ที่จะดำเนินการ
* @return จำนวนระเบียนที่ได้รับจากผลลัพธ์การสืบค้น
-
int สาธารณะ getResultSetCount (สตริง sql) {
//บันทึกตัวแปรตัวนับที่ส่งคืนจำนวนแถวที่บันทึกไว้หลังจากดำเนินการคำสั่ง SQL ที่ระบุ
นับจำนวน = 0;
พยายาม {
// ล้างเนื้อหาต้นฉบับของวัตถุชุดผลลัพธ์
นี้.rsSet = null;
//ดำเนินการคำสั่ง sql เพื่อรับชุดผลลัพธ์
this.rsSet = this.getPreparedStatement
(sql).executeQuery();
// วนซ้ำชุดผลลัพธ์และสะสมตัวนับ
ในขณะที่ (this.rsSet.next()) {
นับ++;
-
} จับ (SQLException e) {
e.printStackTrace();
-
การนับผลตอบแทน;
-
-
* ปิดทรัพยากรการเชื่อมต่อฐานข้อมูล (รวมถึงวัตถุชุดผลลัพธ์ วัตถุการดำเนินการคำสั่ง และวัตถุการเชื่อมต่อ)
-
โมฆะสาธารณะ closeDBResource() {
พยายาม {
closeResultSet();
closePreparedStatement();
ปิดการเชื่อมต่อ();
} จับ (SQLException sqlEx) {
System.err.println(sqlEx.getMessage
-
//ส่งออกข้อมูลสแต็กข้อยกเว้นบนคอนโซล
// sqlEx.printStackTrace();
-
-
-
* วิธีการปิดวัตถุชุดผลลัพธ์
* @พ่น SQLException
-
โมฆะส่วนตัว closeResultSet() พ่น SQLException {
พยายาม {
ถ้า (this.rsSet != null) {
นี้.rsSet.close();
นี้.rsSet = null;
-
} จับ (SQLException sqlEx) {
โยน SQLException ใหม่ ("ข้อผิดพลาดในการปิดวัตถุชุดผลลัพธ์:" + sqlEx.getMessage());
//ส่งออกข้อมูลสแต็กข้อยกเว้นบนคอนโซล
// sqlEx.printStackTrace();
-
-
-
* วิธีการปิดวัตถุการดำเนินการคำสั่งฐานข้อมูล
* @พ่น SQLException
-
โมฆะส่วนตัว closePreparedStatement() พ่น
SQLException {
พยายาม {
ถ้า (this.preStatement != null) {
นี้.preStatement.ปิด();
นี้.preStatement = null;
-
} จับ (SQLException sqlEx) {
โยน SQLException ใหม่ ("ข้อผิดพลาดวัตถุการดำเนินการคำสั่งปิดฐานข้อมูล:" + sqlEx.getMessage());
//ส่งออกข้อมูลสแต็กข้อยกเว้นบนคอนโซล
// sqlEx.printStackTrace();
-
-
-
* วิธีการปิดการเชื่อมต่อฐานข้อมูล
* @พ่น SQLException
-
โมฆะส่วนตัว closeConnection () พ่น SQLException {
พยายาม {
ถ้า (this.dbConnection != null && (!
this.dbConnection.isClosed())) {
this.dbConnection.close();
-
} จับ (SQLException sqlEx) {
โยน SQLException ใหม่ ("ข้อผิดพลาดในการปิดการเชื่อมต่อฐานข้อมูล: " + sqlEx.getMessage());
//ส่งออกข้อมูลสแต็กข้อยกเว้นบนคอนโซล
// sqlEx.printStackTrace();
-
-
-