มีกรอบการทำงานมากมายสำหรับการจัดการข้อมูลใน Java เช่น Hibernate, MyBatis ฯลฯ แต่สิ่งที่ฉันเรียนรู้ในตอนแรกคือ JDBC ฉันคิดว่า JDBC ยังดีมาก ช่วยให้ฉันเข้าใจการดำเนินการข้อมูลอย่างลึกซึ้งยิ่งขึ้น วันนี้ฉันจะเขียนคลาส JDBC พื้นฐานที่ฉันเขียนอีกครั้ง! ทำให้ความทรงจำลึกซึ้งยิ่งขึ้น! - -
โพสต์ครั้งแรกคลาสการใช้งานที่เพิ่มขึ้นทั่วไป
แพ็คเกจ com.shude.dao; นำเข้า java.lang.reflect.field; นำเข้า java.lang.reflect.method; นำเข้า java.lang.reflect.parameterizedType; นำเข้า java.lang.reflect.type; นำเข้า Java.sql.Connection; java.sql.preparedStatement; นำเข้า java.sql.resultset; นำเข้า java.sql.sqlexception; นำเข้า java.util.arraylist; นำเข้า java.util.linkedhashmap; นำเข้า java.util.list; com.shude.dao.im.ibasedao; นำเข้า com.shude.util.configutil; นำเข้า com.shude.util.jdbcutil; นำเข้า com.shude.util.pageUtil;/** * การเพิ่มทั่วไปการปรับเปลี่ยนและการค้นหา configutil configutil; คลาสที่ได้รับการป้องกัน <?> cls;/*** รับชื่อแพ็คเกจและชื่อคลาส*/public -basedao () {class <?> clstemp = this.getClass (); type type = clstemp.getGenericsuperClass () (คลาส <?>) ประเภท [0];}}/*** รับชื่อตารางในฐานข้อมูลของคลาสที่สอดคล้องกัน*/คงที่ {configutil = configutil.newinstance ("/taborm.properties");}/*** บันทึกวิธี*/public booliean ชื่อสตริง tablename = configutil.getVal (cls.getName ()); // รับคีย์หลักสตริง prykey = getPrimkey (tablename); // บันทึกรายการคอลัมน์ข้อมูล <string> filedList = new ArrayList <String> (); ExclusivesQl (SQL, E, FileedList);} catch (Exception E1) {flag = false; e1.printstackTrace ();} return flag;}/*** วิธีการแก้ไข*/โมฆะสาธารณะ modifyInfo (e e) {คลาส <?> cls = e.getClass () configutil.getVal (cls.getName ()); // รับคีย์หลักสตริง prykey = getPrimkey (tablename); // บันทึกรายการคอลัมน์ข้อมูล <String> filedList = new ArrayList <String> (); FiledList.add (prykey); // ดำเนินการ sqlexcutesql (sql, e, filedlist);}/*** ลบวิธี*/โมฆะสาธารณะ deleteinfo (id object id) {// รับสตริงชื่อตาราง tablename = configutil.getValy (cls.getname () SQL คำสั่งสตริง sql = "update"+tablename+"set status = '1' โดยที่"+prykey+"=?"; การเชื่อมต่อ conn = null; preparedStatement pstm = null; ลอง {conn = jdbcutil.getConn (); pstm = conn.preparestatement {e.printstacktrace ();} ในที่สุด {jdbcutil.closeconn (conn);}}/*** การสืบค้นวิธีการทั้งหมด*/โมฆะสาธารณะ queryInfo (pageUtil <e> pageUtil) {e = pageUtil.getEntity (); // แผนที่ <สตริงวัตถุ> parammap = getParammap (e); // รับ sqlstring sql = getQuerySql (parammap, tablename); SQL += "Limit?,?"; parammap.put ("PageSize", (pageUtil.getPagesize () - 1)* pageUtil.getPagenum ()); parammap.put ("pagenum", pageTil.getPagenum (); // execute sqlexcutquery วิธีการ */สาธารณะ e queryById (ID วัตถุ) {// รับชื่อตารางสตริง tablename = configutil.getVal (cls.getName ()); // รับคีย์หลักสตริง prykey = getPrimkey (tablename); // รับ sqlstring sql = "select * จาก" null; preparedStatement pstm = null; resultet rs = null; e e = null; ลอง {conn = jdbcutil.getConn (); pstm = conn.preparestatement (sql); pstm.setObject (1, id); rs = pstm.executequery () (Exception Ex) {ex.printstacktrace ();} ในที่สุด {jdbcutil.closeconn (conn);} return e;}/ ** * รับจำนวนตัวเลขทั้งหมด * @param parammap * @param tablename * @return parammap.remove ("pagesize"); parammap.remove ("pagenum"); String sql = getQuerySql (parammap, tablename); sql = "เลือกจำนวน (*) จาก ("+sql+") temptab"; การเชื่อมต่อ conn = null; jdbcutil.getConn (); pstm = conn.preparestatement (sql); int i = 1; สำหรับ (รายการ <สตริง, วัตถุ> รายการ: parammap.entryset ()) {object val = entry.getValue (); if if (val instanceof java.lang.integer) {pstm.setint (i, integer.parseint (val.toString ())));} i ++;} rs = pstm.executeQuery (); ในขณะที่ (rs.next ()) {pagenumsss = rs.getInt (1);}} catch (ข้อยกเว้น e) {e.printstacktrace ();} ในที่สุด {jdbcutil.closeconn (conn);} return pagenumsss;}/** * getQuerySql (แผนที่ <สตริงวัตถุ> parammap, สตริง tablename) {stringbuffer sql = ใหม่ stringbuffer (); sql.append ("เลือก * จาก") .append (tablename) .append ("โดยที่ 1 = 1 และสถานะ = '0'"); parammap.entryset ()) {สตริง columnName = entry.getKey (); สำหรับ (สตริง colnname: คอลัมน์) {ถ้า (colnname.equalsignorecase (คอลัมน์)) {ถ้า (entry.getValue () java.lang.string) ? ");} else {sql.append (" และ ") .append (columname) .append (" =? ");} break;}}} return sql.toString ();} /** * รับเงื่อนไขการสืบค้น * @param e * @return linkedHashMap <string, object> (); ฟิลด์ [] ฟิลด์ = e.getClass (). getDeclaredFields (); สำหรับ (ฟิลด์ฟิลด์: ฟิลด์) {ลอง {field.setAccessible (จริง); object val = field.get (e); if (val! = null &&! ". val);}} catch (exception e1) {e1.printstacktrace ();}} return parammap;}/** * รับคีย์หลัก * @param tablename * @return */สตริงส่วนตัว getPrimkey jdbcutil.getConn (); metadata = conn.getMetadata (); rs = metadata.getPrimarykeys (conn.getCatalog (), null, tablename.touppercase ()); ในขณะที่ (rs.next ()) {primkeyname = rs.getString ("column_name");}} catch (sqlexception e) {e.printstacktrace ();} ในที่สุด {jdbcutil.closeconn (conn); @return */Private Boolean ixidsql (String SQL, E เอนทิตี, รายการ <String> FELEDLIST) {Boolean Flag = true; การเชื่อมต่อ conn = null; precedStatement pstm = null; ลอง {conn = jdbcutil.getConn () = getFieldValue (เอนทิตี, คอลัมน์); pstm.setObject (i, val); i ++;} pstm.execute ();} catch (sqlexception e1) {e1.printstacktrace () flag = false;} ในที่สุด {jdbcutil.closeconn tablename * @param prykey * @param filedlist * @return */สตริงส่วนตัว getModifysql (สตริง tablename, สตริง prykey, รายการ <String> FileDList) {StringBuffer SQL = new StringBuffer (); sql.Append ("อัปเดต"). getTableColumns (tablename); สำหรับ (สตริงคอลัมน์ชื่อ: คอลัมน์) {if (! columnName.equalsignorecase (prykey)) {filedlist.add (columnName); sql.append (columnName) .Append ("=?"); StringBuffer (sql.substring (0, sql.length ()-1));} sql.append ("ที่ไหน") .append (prykey) .append ("=?"); กลับ sql.toString ();} /** excutQuery (pageUtil <e> pageUtil, String SQL, แผนที่ <สตริง, วัตถุ> parammap, string tablename) {การเชื่อมต่อ conn = null; preparedStatement pstm = null; resultet rs = null; ลอง {conn = jdbcutil.getConn () parammap.entryset ()) {object val = entry.getValue (); if (val instanceof java.lang.string) {pstm.setstring (i, "%"+val.toString ()+"%"); Integer.ParseInt (val.toString ()));} i ++;} rs = pstm.executeQuery (); รายการ <e> list = getentityList (rs); // encapsulate query ผลลัพธ์ page.setList (รายการ); (ข้อยกเว้น e) {e.printstacktrace ();} ในที่สุด {jdbcutil.closeconn (conn);}}/** * รับแอตทริบิวต์ในตาราง * @param Entity * @param columnname * @return */วัตถุส่วนตัว getfieldValue แอตทริบิวต์ในฟิลด์คลาส [] ฟิลด์ = cls.getDeclaredFields (); สำหรับ (ฟิลด์ฟิลด์: ฟิลด์) {// รับชื่อแอตทริบิวต์สตริงฟิลด์ชื่อ fieldName = field.getName (); // คำว่าชื่อแอตทริบิวต์เป็นชื่อคอลัมน์ถ้า (fieldName.equalSignorecase (คอลัมน์)) "รับ"+fieldName.substring (0,1) .touppercase ()+fieldName.substring (1); ลอง {// รับวัตถุวิธีการตามวิธีวิธีวิธีวิธีการ = cls.getMethod (methodName); // ดำเนินการวิธีการ value;}/** * บันทึกวิธีการรับ sql * @param tablename * @param prykey * @param filedlist * @return */สตริงส่วนตัว getSavesql (สตริง tablename, สตริง prykey, รายการ <string> filedList) ("); รายการ <string> columnList = getTableColumns (tablename); สำหรับ (สตริงสตริง: คอลัมน์) {ถ้า (! string.equalsignorecase (prykey)) {sql.append (สตริง) .append (", "); StringBuffer (sql.substring (0, sql.length ()-1));} sql.append () ค่า ("); สำหรับ (int i = 0; i <filedlist.size (); i ++) {sql.append ("? StringBuffer (sql.substring (0, sql.length ()-1));} sql.append () "); return sql.toString ();} /** * รับคอลัมน์ตาราง * @param tablename * @Return * /รายการส่วนตัว conn = null; databaseMetadata metadata = null; resultet rs = null; conn = jdbcutil.getConn (); ลอง {metadata = conn.getMetadata (); rs = metadata.getColumns ในขณะที่ (rs.next ()) {String clumnname = rs.getString ("column_name"); columnlist.add (clumnname);}} catch (sqlexception e) {e.printstacktrace ();} ในที่สุด {jdbcutil.closeconn } /** * Encapsulate Query Results * @param rs * @return * @throws Exception * / @suppresswarnings ("unchecked") รายการส่วนตัว <e> getentityList (e) cls.newinstance (); สำหรับ (ฟิลด์ฟิลด์: ฟิลด์) {ลอง {field.setAccessible (จริง); สตริงคอลัมน์ name = field.getName (); String fieldType = field.getType (). getSimplename (); if ("String" if ("Integer" .Equals (FieldType)) {field.set (e, rs.getInt (คอลัมน์));}} catch (ข้อยกเว้น e1) {e1.printstacktrace ();}}} list.add (e);mysql config. properties เนื้อหาเนื้อหา
driver = com.mysql.jdbc.driver url = jdbc: mysql: // localhost: 3306/dbsda10? ตัวละคร = utf-8 ชื่อผู้ใช้ = รหัสผ่านรูท = rootroot temfile = c: // image = c: // ภาพ
การกำหนดค่าไฟล์การอ่านคลาส configutil
แพ็คเกจ com.shude.util; นำเข้า java.io.ioException; นำเข้า java.util.properties;/** * อ่านไฟล์การกำหนดค่า * @author Administrator * */คลาสสาธารณะ configutil {private static configutil configutil; สตริงสุดท้ายคงที่ส่วนตัว defalt_file_path = "/config.properties"; ชื่อสตริงคงที่ส่วนตัว; คุณสมบัติส่วนตัวป๊อป; private configutil () {init (); } private void init () {pop = คุณสมบัติใหม่ (); ลอง {ถ้า (ชื่อ! = null) pop.load (configutil.class.getResourceasstream (ชื่อ)); pop.load (configutil.class.getResourceasstream (defalt_file_path)); } catch (ioexception e) {e.printstacktrace (); }} public static configutil newInstance (ชื่อสตริง) {configutil.name = name; if (configutil == null) configUtil = new configUtil (); ส่งคืน configutil; } / ** * รับค่าทางด้านขวาในไฟล์กำหนดค่า * @param คีย์ * @return * / สตริงสาธารณะ getVal (คีย์สตริง) {return pop.getProperty (คีย์); -เงื่อนไขก่อนหน้านี้คือชื่อฟิลด์ของฐานข้อมูลจะต้องสอดคล้องกับและเหมือนกับชื่อในคลาสเอนทิตีและมีชื่อตารางข้อมูลที่เกี่ยวข้องและไฟล์การกำหนดค่าที่เกี่ยวข้องกับชื่อคลาสเอนทิตี ไฟล์การกำหนดค่ามีดังนี้:
taborm.properties
com.shude.entity.userinfo = user_info com.shude.entity.roleinfo = role_info com.shude.entity.fabricinfo = fabric_info com.shude.entity.productinfo = product_info com.shude.entity.mateinfo = mate_info
บทความข้างต้น JDBC ใช้วิธีการพื้นฐานทั่วไปสำหรับการเพิ่มการลบการแก้ไขและการตรวจสอบเป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น