เมื่อทำงานในโครงการการเลือกทางเทคนิคมีความสำคัญมาก วิธีการพื้นฐานส่งผลโดยตรงต่อความเร็วในการเข้าถึงและการปรับเปลี่ยนข้อมูลขนาดใหญ่ของเรา มีกรอบ ORM ที่ยอดเยี่ยมมากมายใน Java เช่น JPA, Hibernate ฯลฯ อย่างที่เรากล่าวว่ากรอบมีประโยชน์ของกรอบและแน่นอนว่ามีบางพื้นที่ที่สามารถปรับปรุงได้ ในเวลานี้เราจำเป็นต้องห่อหุ้มสถาปัตยกรรมพื้นฐานสำหรับความต้องการทางธุรกิจที่แตกต่างกันและการเข้าชมที่แตกต่างกันเพื่อรองรับการเพิ่มข้อมูลขนาดใหญ่การลบและการปรับเปลี่ยน
รหัส:
นำเข้า Java.io.*; นำเข้า Java.sql.*; นำเข้า java.util.logging.level; นำเข้า java.util.logging.logger; นำเข้า javax.servlet.jsp.jstl.sql.*; / ** * dbhelper * @author qmx * */ คลาสสาธารณะ dbhelper {สตริงส่วนตัว sql; // คำสั่ง SQL ที่จะส่งผ่านโมฆะสาธารณะ setSQL (String SQL) {this.SQL = SQL; } รายการส่วนตัว sqlvalues; // พารามิเตอร์ระบบของคำสั่ง SQL โมฆะสาธารณะ setSqlValues (รายการ sqlvalues) {this.sqlvalues = sqlvalues; } รายการส่วนตัว <list> sqlvalue; // พารามิเตอร์ระบบของคำสั่ง SQL โมฆะสาธารณะ setSqlValue (รายการ <list> sqlvalues) {this.sqlvalue = sqlvalues; } การเชื่อมต่อส่วนตัว Con; // การเชื่อมต่อวัตถุโมฆะสาธารณะ setCon (Connection Con) {this.con = con; } dbHelper สาธารณะ () {this.con = getConnection (); // กำหนดค่าเริ่มต้นให้กับวัตถุการเชื่อมต่อ}/*** รับการเชื่อมต่อฐานข้อมูล* @return*/การเชื่อมต่อส่วนตัว getConnection () {String driver_class = null; String driver_url = null; String database_user = null; String Database_Password = null; ลอง {inputStream fis = this.getClass (). getResourceasstream ("/db.properties"); // โหลดไฟล์การกำหนดค่าฐานข้อมูลลงในคุณสมบัติหน่วยความจำ p = คุณสมบัติใหม่ (); P.load (FIS); driver_class = p.getProperty ("driver_class"); // รับไฟล์การกำหนดค่าฐานข้อมูล driver_url = p.getProperty ("driver_url"); database_user = p.getProperty ("database_user"); database_password = P.GetProperty ("database_password"); class.forName (driver_class); con = drivermanager.getConnection (driver_url, database_user, database_password); } catch (classnotfoundexception e) {// todo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } catch (filenotfoundexception e) {// todo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } return con; } / ** * ปิดฐานข้อมูล * @param con * @param pst * @param rst * / โมฆะส่วนตัวปิด (Connection Con, PreparedStatement PST, Resultset rst) {ถ้า (rst! = null) {ลอง {rst.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} if (pst! = null) {ลอง {pst.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} if (con! = null) {ลอง {con.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} if (con! = null) {ลอง {con.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} if (con! = null) {ลอง {con.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }}}} / ** * ปิดฐานข้อมูล * @param con * @param pst * @param rst * / โมฆะส่วนตัว closeall (Connection con, คำสั่ง PST, Resultset rst) {ถ้า (rst! = null) {ลอง {rst.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} if (pst! = null) {ลอง {pst.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} if (pst! = null) {ลอง {pst.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} if (con! = null) {ลอง {con.close (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }}} / ** * ค้นหา * @param sql * @param sqlvalues * @return * / ผลลัพธ์สาธารณะ executeQuery () {ผลลัพธ์ผลลัพธ์ = null; resultset rst = null; PreparedStatement PST = NULL; ลอง {pst = con.prepareStatement (SQL); if (sqlvalues! = null && sqlvalues.size ()> 0) {// เมื่อตัวยึดตำแหน่งอยู่ในคำสั่ง SQL, setSqlValues (PST, SQLVALUES); } rst = pst.executeQuery (); result = resultupport.toresult (rst); // ตรวจสอบให้แน่ใจว่าได้ทำการแปลงก่อนที่จะปิดฐานข้อมูล} catch (sqlexception e) {// todo catch block catch auto-generated e.printstacktrace (); } ในที่สุด {this.closeall (con, pst, rst); } ผลตอบแทนผลลัพธ์; } / ** * เพิ่ม, ลบ, แก้ไข, * @return * / public int executeUpdate () {int result = -1; PreparedStatement PST = NULL; ลอง {pst = con.prepareStatement (SQL); if (sqlvalues! = null && sqlvalues.size ()> 0) {// เมื่อตัวยึดตำแหน่งอยู่ในคำสั่ง sql setsqlvalues (PST, sqlvalues); } result = pst.executeUpdate (); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } ในที่สุด {this.closeall (con, pst, null); } ผลตอบแทนผลลัพธ์; } / *** วิธีการใช้ PreparedStatement เพื่อเพิ่มแบทช์* @return* / public int [] executeUpDateMore () {int [] result = null; ลอง {PreparedStatement perst = con.prepareStatement (SQL, resultSet.type_scroll_sensitive, resultset.curcur_read_only); สำหรับ (รายการ sqlvaluestring: sqlvalue) {สำหรับ (int i = 0; i <sqlvaluestring.size (); i ++) {ลอง {prest.setObject (i+1, sqlvaluestring.get (i)); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); }} prest.addbatch (); } prest.executeBatch (); /* con.commit ();*/ this.closeall (con, perst, null); } catch (sqlexception ex) {logger.getLogger (dbhelper.class.getName ()). log (level.severe, null, ex); } ผลตอบแทนผลลัพธ์; } / ** * ใช้ PreparedStatement เพื่อเพิ่มวิธีการแบบแบตช์, strvalue: * "แทรก intoadlogs (ip, เว็บไซต์, yyyymmdd, ชั่วโมง, object_id) ค่า ('192.168.1.3', 'localhost', '20081009', 8, '23123') ExecuteUpDateMorenotauto () พ่น sqlexception {int [] result = null; Con.setAutocommit (เท็จ); คำสั่ง stmt = con.createstatement (resultset.type_scroll_sensitive, resultet.curcur_read_only); สตริง [] sqlstring = null; สำหรับ (string strvalue: sqlstring) {stmt.execute (strvalue); } con.commit (); ผลการกลับมา; } / ** * ใช้ PreparedStatement เพื่อเพิ่มวิธีการแบบแบตช์, strvalue: * "แทรก intoadlogs (ip, เว็บไซต์, yyyymmdd, ชั่วโมง, object_id) ค่า ('192.168.1.3', 'localhost', '20081009', 8, '23123') Executemorenotauto () พ่น sqlexception {// บันทึกโหมดการส่งอัตโนมัติปัจจุบันบูลีนบูลีนัวโทคอมม์ = false; สตริง [] sqlstring = null; int [] result = null; ลอง {booleanautocommit = con.getautocommit (); // ปิดการส่งอัตโนมัติ con.setautocommit (เท็จ); คำสั่ง stmt = con.createstatement (resultset.type_scroll_sensitive, resultet.curcur_read_only); // ใช้คำสั่งเพื่อรวบรวมคำสั่ง SQL หลายรายการในเวลาเดียวกัน/*stmt.addbatch (insert_sql1); stmt.addbatch (insert_sql2); stmt.addbatch (update_sql3); */ สำหรับ (สตริง strvalue: sqlstring) {stmt.addbatch (strvalue); } // ส่งคำสั่ง SQL ทั้งหมดในเวลาเดียวกัน stmt.executeBatch (); // ส่งการดัดแปลง con.Commit (); con.setautocommit (booleanautocommit); this.closeall (con, stmt, null); } catch (exception e) {e.printstacktrace (); Con.rollback (); // set setautocommit (false) ไม่ได้ดำเนินการย้อนกลับของการเชื่อมต่อในการจับและตารางการดำเนินการจะถูกล็อคทำให้ฐานข้อมูลถูกปิดกั้น} ผลการส่งคืน; } / ** * กำหนดค่าให้กับตัวยึดตำแหน่งในคำสั่ง SQL * @Param PST * @Param SQLVALUES * / โมฆะส่วนตัว setSqlValues (PreparedStatement PST, รายการ sqlvalues) {สำหรับ (int i = 0; i <sqlvalues.size (); pst.setObject (i+1, sqlvalues.get (i)); } catch (sqlexception e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); - ข้อมูลการเขียนของเราเพื่อเข้าถึงฐานข้อมูลใน db.properties:
driver_class = com.mysql.jdbc.driver driver_url = jdbc: mysql: //192.168.22.246: 3306/importExceltest database_user = ฐานข้อมูลพื้นฐาน = พื้นฐาน = พื้นฐาน
ทดสอบ:
นำเข้า Java.util.*; ชั้นเรียนสาธารณะ importExceltest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) { /*dbhelper db = new dbhelper (); String sql = "แทรกลงใน tb_coursetype (id, coursetypename) ค่า ('2012003', 'qmx3')"; db.setsql (SQL); db.executeUpdate ();* / /*dbhelper db1 = new dbhelper (); String sql1 = "แทรกลงใน tb_coursetype (id, coursetypename) ค่า (?,?)"; รายการ sqlvalues = new ArrayList (); sqlvalues.add ("2012004"); sqlvalues.add ("qmx4"); db1.setsqlvalues (sqlvalues); db1.setsql (SQL1); db1.executeUpdate ();*/ dbhelper db = new dbhelper (); String sql = "แทรกลงใน tb_coursetype (id, coursetypename) ค่า (?,?)"; รายการ <list> sqlvalues = new ArrayList (); รายการ sqlvaluestring = new ArrayList (); sqlvaluestring.add ("2012010"); sqlvaluestring.add ("qmx10"); sqlvalues.add (sqlvaluestring); รายการ sqlvaluestring1 = new ArrayList (); sqlvaluestring1.add ("2012011"); sqlvaluestring1.add ("qmx11"); sqlvalues.add (sqlvaluestring1); รายการ sqlvaluestring2 = new ArrayList (); sqlvaluestring2.add ("2012012"); sqlvaluestring2.add ("qmx12"); sqlvalues.add (sqlvaluestring2); รายการ sqlvaluestring3 = new ArrayList (); SQLVALUESTRING3.ADD ("2012013"); SQLVALUESTRING3.ADD ("QMX13"); sqlvalues.add (sqlvaluestring3); db.setsqlvalue (sqlvalues); db.setsql (SQL); db.executeUpDateMore (); -