การเชื่อมต่อฐานข้อมูล Java Simple และคลาสเครื่องมือปิด
ผู้ที่เขียนแอปพลิเคชัน JDBC มักจะปวดหัวเกี่ยวกับการปิดทรัพยากร รหัสเหล่านี้น่าเบื่อ คุณจะปิดด้วยรหัสง่าย ๆ ได้อย่างไร? ด้านล่างนี้ฉันได้เขียนวิธีการบรรเทาอาการปวดของคุณ:
/ *** ปิดทรัพยากรที่ปิดทั้งหมด** @param objs วัตถุทรัพยากรที่ปิดคือการเชื่อมต่อคำสั่งและผลลัพธ์และทรัพยากรประเภทอื่น ๆ จะถูกละเว้นโดยอัตโนมัติ*/ โมฆะสาธารณะคงที่ closeall (วัตถุ ... objs) {สำหรับ (Object OBJ: OBJS) ถ้า (คำสั่ง OBJ Instanceof) ปิด ((คำสั่ง) OBJ); ถ้า (OBJ instanceof resultset) ปิด ((ผลลัพธ์) OBJ); - วิธีนี้มีพารามิเตอร์ "... " ซึ่งจริง ๆ แล้วเป็นวิธีพารามิเตอร์ตัวแปรใน Java 5 คุณสามารถปิดวัตถุทรัพยากรที่คุณต้องการปิดได้โดยตรงเมื่อโทรโดยไม่คำนึงถึงลำดับหรือหมายเลข ตัวอย่างเช่น:
catch (sqlexception e) {e.printstacktrace (); } ในที่สุด {dbtools.closeall (stmt, pstmt1, pstmt2, conn); -
วิธีการเขียนที่สมบูรณ์ของคลาสนี้ได้รับด้านล่าง:
แพ็คเกจ com.lavasoft.ibatistools.Common; นำเข้า com.lavasoft.ibatistools.bean.table; นำเข้า com.lavasoft.ibatistools.metadata.datasourceMetadata; นำเข้า com.lavasoft.ibatistools.metadata.mysqldatasourceMetadata; นำเข้า java.io.ioException; นำเข้า Java.io.InputStream; นำเข้า Java.sql.*; นำเข้า java.util.list; นำเข้า java.util.properties; / ** * การเชื่อมต่อฐานข้อมูล Java อย่างง่ายและคลาสเครื่องมือปิด * * @author Leizhimin 11-12-20 4:32 PM */ คลาสสาธารณะ DBTools {สตริงคงที่ส่วนตัว DriverClassName, URL, ผู้ใช้, รหัสผ่าน; คงที่ {init (); } โมฆะคงที่ส่วนตัวเริ่มต้น () {inputStream ใน = dbtools.class.getResourceasstream ("/com/lavasoft/ibatistools/jdbc.properties"); คุณสมบัติ preps = คุณสมบัติใหม่ (); ลอง {preps.load (ใน); driverclassName = preps.getProperty ("jdbc.driver"); url = preps.getProperty ("jdbc.url"); user = preps.getProperty ("jdbc.username"); รหัสผ่าน = preps.getProperty ("jdbc.password"); } catch (ioexception e) {e.printstacktrace (); }} / *** สร้างการเชื่อมต่อ JDBC** @return การเชื่อมต่อ JDBC* / การเชื่อมต่อแบบคงที่ makeConnection () {Connection Conn = null; ลอง {class.forName (DriverClassName); conn = driverManager.getConnection (URL, ผู้ใช้, รหัสผ่าน); } catch (classnotFoundException e) {e.printStackTrace (); } catch (sqlexception e) {e.printstacktrace (); } return conn; } โมฆะคงที่สาธารณะปิด (Connection Conn) {if (conn! = null) ลอง {conn.close (); } catch (sqlexception e) {e.printstacktrace (); }} โมฆะคงที่สาธารณะปิด (ผลลัพธ์ RS) {ถ้า (rs! = null) ลอง {rs.close (); } catch (sqlexception e) {e.printstacktrace (); }} โมฆะคงที่สาธารณะปิด (คำสั่ง stmt) {ถ้า (stmt! = null) ลอง {stmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} / *** ปิดทรัพยากรที่ปิดทั้งหมด** @param objs วัตถุทรัพยากรที่ปิดคือการเชื่อมต่อคำสั่งและผลลัพธ์และทรัพยากรประเภทอื่น ๆ จะถูกละเว้นโดยอัตโนมัติ* / โมฆะสาธารณะ clostell (วัตถุ ... objs) {สำหรับ (object obj: objs) {ถ้า ถ้า (คำสั่ง OBJ Instanceof) ปิด ((คำสั่ง) OBJ); ถ้า (OBJ instanceof resultset) ปิด ((ผลลัพธ์) OBJ); }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {dataSourceMetadata dbmd = mysqldatasourceMetadata.instatnce (); รายการ <Table> tablelist = dbmd.getallTableMetadata (dbtools.makeconnection ()); สำหรับ (ตารางตาราง: tableList) {system.out.println (ตาราง); -
เนื่องจากเป็นเครื่องมือในการเขียนการเชื่อมต่อจึงใช้เวลาไม่กี่ครั้งดังนั้นโหมด JDBC จึงใช้ที่นี่และไม่ใช้พูลการเชื่อมต่อ วิธีการปิดนั้นดีมากที่จะใช้ลดจำนวนรหัสและปรับปรุงความน่าเชื่อถือและคุณภาพของโปรแกรม
เครื่องมือสากล JDBC ที่เรียบง่าย
รองรับฐานข้อมูลที่หลากหลายสร้างการเชื่อมต่อในแบบครบวงจรและเผยแพร่ทรัพยากรในวิธีที่ดีที่สุดและง่ายที่สุด
ยินดีต้อนรับสู่การถ่ายภาพ!
นำเข้า org.apache.commons.logging.log; นำเข้า org.apache.commons.logging.logfactory; นำเข้า Java.sql.*; นำเข้า java.util.list; นำเข้า java.util.properties; /*** เครื่องมือการดำเนินงานฐานข้อมูลทั่วไปการให้การรับการเชื่อมต่อฐานข้อมูลการดำเนินการ SQL การปิดทรัพยากรและฟังก์ชั่นอื่น ๆ ฐานข้อมูลที่รองรับคือ Oracle10G และ MySQL5.x </p> * * @author Leizhimin 2012-03-05 11:22 */ คลาสสาธารณะ dbtoolkit {บันทึกการบันทึกแบบคงที่ส่วนตัว = logfactory.getLog (dbtoolkit.class); คงที่ {ลอง {class.forName ("oracle.jdbc.driver.oracledriver"); class.forName ("com.mysql.jdbc.driver"); } catch (classnotFoundException e) {log.error ("เกิดข้อผิดพลาดเกิดขึ้นการโหลดไดรเวอร์ฐานข้อมูล!"); E.PrintStackTrace (); }} /** * สร้างการเชื่อมต่อฐานข้อมูล * * @param URL การเชื่อมต่อฐานข้อมูล URL สตริง * @Param รายการคุณสมบัติของคู่แท็ก /ค่าใด ๆ สำหรับพารามิเตอร์การเชื่อมต่อ; โดยปกติแล้วควรรวมคุณสมบัติ "ผู้ใช้" และ "รหัสผ่าน" อย่างน้อย * @@return การเชื่อมต่อฐานข้อมูล JDBC * @throws sqlexception พ่นเมื่อการเชื่อมต่อล้มเหลว */ การเชื่อมต่อแบบคงที่สาธารณะ ลอง {conn = driverManager.getConnection (URL, คุณสมบัติ); } catch (sqlexception e) {log.error ("ข้อยกเว้นเกิดขึ้นเมื่อได้รับการเชื่อมต่อฐานข้อมูล", e); โยน e; } return conn; } / *** ดำเนินการสืบค้นคำสั่ง SQL แบบคงที่ในการเชื่อมต่อฐานข้อมูล** @Param Conn การเชื่อมต่อฐานข้อมูล* @param Staticsql String SQL แบบคงที่ SQL String* @return return return ผลลัพธ์ชุดผลลัพธ์ชุดผลลัพธ์* @throws sqlexception throws ลอง {// สร้างวัตถุที่เรียกใช้คำสั่ง SQL stmt = conn.createstatement (); // ดำเนินการ SQL และรับผลตอบแทนผลลัพธ์ rs = stmt.executeQuery (StaticsQl); } catch (sqlexception e) {log.error ("เกิดข้อผิดพลาดเมื่อดำเนินการคำสั่ง SQL โปรดตรวจสอบ! /n" + staticsql); โยน e; } return rs; } / *** เรียกใช้คำสั่ง SQL แบบคงที่ในการเชื่อมต่อฐานข้อมูล** @Param Conn การเชื่อมต่อฐานข้อมูล* @Param Staticsql String SQL แบบคงที่* @throws SQLException พ่นเมื่อดำเนินการข้อยกเว้น* / โมฆะคงที่สาธารณะ ลอง {// สร้างวัตถุที่ดำเนินการ SQL STMT = Conn.Createstatement (); // ดำเนินการ SQL และรับผลลัพธ์ที่ส่งคืน stmt.execute (StaticsQl); } catch (sqlexception e) {log.error ("เกิดข้อผิดพลาดเมื่อดำเนินการคำสั่ง SQL โปรดตรวจสอบ! /n" + staticsql); โยน e; } ในที่สุด {Close (STMT); }} /*** เรียกใช้ชุดคำสั่ง SQL แบบคงที่ในการเชื่อมต่อฐานข้อมูล** @Param Conn การเชื่อมต่อฐานข้อมูล* @param SQLLIST SQL คำสั่งสตริงคำสั่ง String* @throws SQLException โยนเมื่อใช้งานข้อยกเว้น คำสั่ง SQL stmt = conn.createstatement (); สำหรับ (String sql: sqllist) {stmt.addbatch (SQL); } // ดำเนินการ SQL และรับผลตอบแทนผลลัพธ์ stmt.executeBatch (); } catch (sqlexception e) {log.error ("เกิดข้อผิดพลาดเมื่อดำเนินการคำสั่ง Batch SQL โปรดตรวจสอบ!"); โยน e; }} / *** รับ oracle data ลำดับที่ระบุค่าถัดไป** @param conn การเชื่อมต่อฐานข้อมูลฐานข้อมูล* @param seq_name ชื่อลำดับ* @return sequence ค่าถัดไป* / public sequencenextval (Connection Conn, String seq_name) {long val = -1l; คำสั่ง stmt = null; ผลลัพธ์ RS = NULL; ลอง {// สร้างวัตถุที่ดำเนินการ SQL STMT = Conn.Createstatement (); // ดำเนินการ SQL และรับผลการส่งคืน rs = stmt.executeQuery ("เลือก" + seq_name + ".nextval จากคู่"); ถ้า (rs.next ()) val = rs.getlong (1); } catch (sqlexception e) {log.error ("#ข้อผิดพลาด#: มีข้อผิดพลาดในการรับค่าลำดับโปรดตรวจสอบ! /n" + seq_name); E.PrintStackTrace (); โยน RuntimeException ใหม่ (E); } ในที่สุด {Close (RS); ปิด (STMT); } return val; } / *** ปิดทรัพยากร JDBC ที่ปิดทั้งหมดโดยไม่คำนึงถึงคำสั่งสามารถดำเนินการในลำดับที่ถูกต้อง** @param objs วัตถุทรัพยากรที่ปิดคือการเชื่อมต่อคำสั่งและชุดผลลัพธ์และทรัพยากรประเภทอื่น ๆ จะถูกละเว้นโดยอัตโนมัติ สำหรับ (Object OBJ: OBJS) ถ้า (คำสั่ง OBJ Instanceof) ปิด ((คำสั่ง) OBJ); สำหรับ (Object OBJ: OBJS) ถ้า (OBJ Instance Of Connection) ปิด ((การเชื่อมต่อ) OBJ); } โมฆะคงที่ส่วนตัวปิด (Connection Conn) {if (conn! = null) ลอง {conn.close (); } catch (sqlexception e) {log.error ("ข้อยกเว้นเกิดขึ้นเมื่อปิดการเชื่อมต่อฐานข้อมูล!"); }} ปิดโมฆะแบบคงที่ส่วนตัว (ResultSet Rs) {ถ้า (rs! = null) ลอง {rs.close (); } catch (sqlexception e) {log.error ("ข้อยกเว้นเกิดขึ้นเมื่อปิดชุดผลลัพธ์!"); }} โมฆะคงที่ส่วนตัวปิด (คำสั่ง stmt) {ถ้า (stmt! = null) ลอง {stmt.close (); } catch (sqlexception e) {log.error ("ข้อยกเว้นเกิดขึ้นเมื่อปิดคำสั่ง SQL!"); }}/** * รหัสทดสอบ, ไร้ประโยชน์ * * @param args * @throws sqlexception */โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น sqlexception {string tns = "jdbc: oracle: thin: @/n" + "(คำอธิบาย = n" + "/t (ที่อยู่ "/t/t(address=(protocol=tcp )(Host=10.87.30.44-4444)(port=1521))/n" + "/t/t(address=(protocol=tcp)(Host=10.87.30.45 "/t/t( address=(protocol=tcp)(Host=10.87.30.46)(port=1521))/n" + "/t/t (load_balance = ใช่)/n" + "/t)/n" + "/t (connect_data =/n" =/n " +"/t/t/t (type = เซสชัน)/n " +"/t/t/t (method = basic)/n " +"/t/t/t (retries = 5)/n " +"/t/t/t (ล่าช้า = 15)/n " +"/t/t)/n " +"/t)/n " คุณสมบัติ p_ora = คุณสมบัติใหม่ (); p_ora.put ("ผู้ใช้", "ฐาน"); p_ora.put ("รหัสผ่าน", "1qaz! qaz"); p_ora.put ("internal_logon", "ปกติ"); การเชื่อมต่อ ora_conn = makeconnection (tns, p_ora); Resultset rs1 = ora_conn.createstatement (). executeQuery ("เลือกนับ (1) จาก base.cfg_static_data"); rs1.next (); System.out.println (rs1.getint (1)); rs1.close (); ora_conn.close (); คุณสมบัติ P_MYSQL = คุณสมบัติใหม่ (); p_mysql.put ("ผู้ใช้", "root"); p_mysql.put ("รหัสผ่าน", "leizm"); string url = "jdbc: mysql: // localhost: 3306/tdmc"; การเชื่อมต่อ mysql_conn = makeconnection (url, p_mysql); Resultset rs2 = mysql_conn.createStatement (). ExecuteQuery ("เลือกนับ (1) จาก CFG_CODE"); rs2.next (); System.out.println (rs2.getint (1)); rs2.close (); mysql_conn.close (); -