هناك العديد من الأطر لإدارة البيانات في Java ، مثل السبات ، MyBatis ، وما إلى ذلك ، ولكن ما تعلمته في البداية كان JDBC. أعتقد أن JDBC لا يزال جيدًا جدًا. يسمح لي بفهم عمليات البيانات بعمق أكبر. اليوم سأكتب فئة JDBC الأساسية التي كتبتها مرة أخرى! تعميق الذاكرة! ! !
أول نشر فئة التنفيذ الإضافية المشتركة على أساس
package com.shude.dao ؛ import java.lang.reflect.field ؛ import java.lang.reflect.method ؛ import java.lang.reflect.parameterizedtype ؛ import java.lang.reflect.type ؛ import java.sql.connection ؛ import java.sql.dataData. 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 ؛/** * الإضافة العامة ، الحذف ، تعديل فئة تطبيق * @Author Distenrator * e> configutil configutil ثابت ؛ فئة محمية <؟> cls ؛/*** احصل على اسم الحزمة واسم الفئة*/public reistrao () {class <؟> clstemp = this.getClass () (الفئة <؟>) أنواع [0] ؛}}/*** احصل على اسم الجدول في قاعدة البيانات للفئة المقابلة*/static {configutil = configutil.newinstance ("/taborm.properties") ؛ name string tablename = configutil.getVal (cls.getName ()) ؛ // احصل على سلسلة المفاتيح الأساسية prykey = getPrimKey (tablename) ؛ // سجل قائمة عمود البيانات <string> fileDlist = new ArrayList <String> () ؛ // الحصول على سلسلة بيانات SQL sql = getSavesql (tablename ، prykey) ؛ ExclusivesQl (SQL ، E ، FileedList) ؛} catch (استثناء e1) {flag = false ؛ e1.printstacktrace () ؛} الإرجاع سلسلة المفاتيح الأساسية prykey = getPrimKey (tablename) ؛ // قم بتسجيل قائمة عمود البيانات <string> fileDlist = new ArrayList <String> () ؛ // الحصول على سلسلة بيانات SQL SQL = getModifySQL sqlexcutesql (sql ، e ، filedlist) ؛}/*** حذف الطريقة*/public void deleteinfo (ident id) {// الحصول على اسم الجدول tablename = configutil.getVal (cls.getName ()) ؛ الحالة = '1' حيث "+prykey+" =؟ "؛ connection conn = null ؛ preparedStatement pstm = null ؛ try {conn = jdbcutil.getConn () ؛ pstm = conn.preparestatement (sql) ؛ pstm.setObject (1 ، id) ؛ pstm.execute () ؛ {jdbcutil.closeconn (conn) ؛}}/*** Query جميع الطرق*/public void queryinfo (pageUtil <e> pageUtil) {e e = pageutil.getentity () getParammap (e) ؛ // get sqlstring sql = getquerysql (parammap ، tablename) ؛ sql += "limit؟ ،؟" ؛ parammap.put ("pagesize" ، (pageutil.getPagesize () - 1)* pageutil.getpagenum ()) ؛ parammap.put ("pagenum" ، pageutil.getpagenum ()) ؛ الطريقة */public e querybyid (معرف الكائن) {// الحصول على اسم الجدول سلسلة tablename = configutil.getVal (cls.getName ()) ؛ // احصل على سلسلة المفاتيح الأساسية prykey = getPrimKey (tablename) ؛ // get sqlstring sql = "select * from"+tablename+"where 1 = 1 و" prykey+" null ؛ preparedStatement pStm = null ؛ resultset rs = null ؛ e e = null ؛ حاول {conn = jdbcutil.getConn () ؛ pstm = conn.preparestateMent (sql) ؛ pstm.setObject (1 ، id) ؛ rs = pstm.executequery () ؛ قائمة <e> (استثناء ex) {ex.printStackTrace () ؛} أخيرًا {jdbcutil.closeconn (conn) ؛} return e ؛}/ ** * احصل على العدد الإجمالي للأرقام * param parammap * param tablename * reger */ private integer getPagenums (map <string ، object> paramm ، parammap.remove ("pagesize") ؛ parammap.remove ("pagenum") ؛ String sql = getquerysql (parammap ، tableName) ؛ sql = "count count (*) from ("+sql+") temptab" ؛ connection conn = null ؛ preparedStatement pStm = null ؛ jdbcutil.getconn () ؛ pstm = conn.preparestatement (sql) ؛ int i = 1 ؛ for (إدخال <سلسلة ، كائن> إدخال: parammap.entryset ()) {object val = ent intrad.getValue () if (val eastyof 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) ؛ getquerysql (خريطة <سلسلة ، كائن> parammap ، سلسلة tablename) {stringBuffer sql = new StringBuffer () ؛ sql.append ("SELECT * from") .Append (tablename) .Append ("where 1 = 1 and status = '0'") {string columnname = interpling.getKey () ؛ for (string colnname: columnlist) {if (colnname.equalsignoreCase (columname)) {if (intradvalue () extryof java.lang.string) {sql.append ("و") .Append (columname). ". e.getClass (). {e1.printstacktrace () ؛}} return parammap ؛}/** * احصل على المفتاح الأساسي * param tablename * @REGANTERNATERNATERNAMEKEY (string tablename) {connection conn = null ؛ databasemetadata metadata = null ؛ resultset rs = null ؛ string ؛ jdbcutil.getconn () ؛ metadata = conn.getMetAdata () ؛ rs = metadata.getPrimarykeys (conn.getCatalog () ، null ، tablename.touppercase ()) ؛ بينما (rs.next ()) {primkeyname = rs.getString ("column_name") ؛}} catch (sqlexception e) { */private boolean justiresql (سلسلة sql ، e الكيان ، القائمة <string> fileDlist) {boolean flag = true ؛ connection conn = null ؛ preparedStatement pstm = null ؛ try {conn = jdbcutil.getconn () ؛ pstm = conn.preparestatement (sql) ؛ // envision int i = 1 ؛ getFieldValue (الكيان ، العمود) ؛ pstm.setObject (i ، val) ؛ i ++ ؛} pstm.execute () ؛} catch (sqlexception e1) {e1.printstacktrace () ؛ flag = false ؛} أخيرًا {jdbcutil.closeconn (conner) ؛ param prykey * param filedlist * @return */private string getModifysQl (سلسلة tablename ، سلسلة prykey ، قائمة <string> fileDlist) {StringBuffer sql = new StringBuffer () ؛ sql.append ("update") .append (tablename) .append ("set") ColumnName: ColumnList) {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 ، سلسلة sql ، خريطة <سلسلة ، كائن> parammap ، سلسلة tablename) {connection conn = null ؛ preparedStatement pstm = null ؛ resultset rs = null ؛ try {conn = jdbcutil.getConn () ؛ pstm = conn.preparestatement (sql) ؛ parammap.entryset ()) {object val = intervevalue () ؛ if (val extorlyof java.lang.string) {pstm.SetString (i ، "٪"+val.ToString ()+"٪") ؛} else (val extileof java.lang.integer) {pstm. integer.parseint (val.toString ())) ؛} i ++ ؛} rs = pstm.executequery () ؛ قائمة <e> list = getentitylist (rs) ؛ // alsapsulate results pageutil.setist (list) ؛ (استثناء E) {E.PrintStackTrace () ؛} أخيرًا {jdbcutil.closeconn (conn) ؛}/** * احصل على سمات في الجدول * @param ectity * param columnname */reglase getFileValue (e intity ، string column. السمات في حقل الفئة [] الحقول = cls.getDeclaredFields () ؛ لـ (الحقل الحقل: الحقول) {// احصل على اسم السمة FieldName = field.getName () ؛ // المصطلح "get"+fieldname.substring (0،1) .ToupperCase ()+fieldname.substring (1) ؛ حاول {// احصل على كائن الطريقة وفقًا لطريقة اسم الطريقة = cls.getMethod (methodName) ؛ // تنفيذ الطريقة والحصول value ؛}/** * احفظ الطريقة للحصول على sql * param tablename * param prykey * param fileDlist * @regurn */private string getavesql (سلسلة tablename ، سلسلة prykey ، قائمة <string> filedlist) {stringbuffer sql = new StringBuffer () ؛ (") ؛ قائمة <Tring> ColumnList = getTableColumns (tablename) ؛ لـ (سلسلة السلسلة: ColumnList) {if (! string.equalsignoreCase (prykey)) {sql.append (string) .append (" ، "،") ؛ StringBuffer (sql.substring (0 ، sql.length ()-1)) ؛} sql.append (") value (") ؛ for (int i = 0 ؛ i <filedlist.size () ؛ i ++) {sql.append ("؟ ،") ؛ StringBuffer (sql.substring (0 ، sql.length ()-1)) ؛} sql.append (") null ؛ databasemetadata metadata = null ؛ resultset rs = null ؛ conn = jdbcutil.getconn () ؛ try {metadata = conn.getMetAdata () ؛ rs = metadata.getColumns (conn.getCatalog () ، null ، tablename.toupercase () بينما (rs.next ()) {string clumnname = rs.getString ("column_name") ؛ columnlist.add (clumnname) ؛}} catch (sqlexception e) {E.PrintStackTrace () ؛} أخيرًا {jdbcutil.closeconn (conn) ؛}. } /** * تغليف نتائج الاستعلام * param rs * regurn * @throws استثناء * / @cumpresswarnings ("uncheced") قائمة خاصة <e> getentitylist (resultset rs) rems stispion {list <e> ripan = new ArrayList <e> () (e) cls.newInstance () ؛ for (حقل الحقل: الحقول) {try {field.setAccessible (true) ؛ string columnname = field.getName () ؛ String fieldtype = field.gettype (). getSimplename () ؛ if ("string". if ("integer" .equals (fieldtype)) {field.set (e ، rs.getInt (columname)) ؛}} catch (استثناء e1) {e1.printstacktrace () ؛}} list.add (e) ؛} قائمة الإرجاع ؛}}}}MySQL ذات الصلة ملف التكوين config.properties المحتوى
driver = com.mysql.jdbc.driver url = jdbc: mySql: // localhost: 3306/dbsda10؟
ملف التكوين فئة القراءة configutil
package com.shude.util ؛ import java.io.ioException ؛ import java.util.properties ؛/** * قراءة ملف التكوين * Author Administrator * */Classe ConfiguTil {private static configutil configutil ؛ Static Final String defalt_file_path = "/config.properties" ؛ اسم السلسلة الثابتة الخاصة ؛ خصائص خاصة البوب. configutil الخاص () {init () ؛ } private void init () {pop = new properties () ؛ جرب {if (name! = null) pop.load (configutil.class.getResourCeasStream (name)) ؛ pop.load (configutil.class.getResourCeasStream (defalt_file_path)) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} static static configutil newinstance (اسم السلسلة) {configutil.name = name ؛ if (configutil == null) configuTil = new configutil () ؛ إرجاع التكوين. } / ** * احصل على القيمة على اليمين في ملف التكوين * مفتاح param * return * / public string getVal (string key) {return pop.getProperty (key) ؛ }}الشرط قبل ذلك هو أن اسم الحقل لقاعدة البيانات يجب أن يتوافق مع الاسم في فئة الكيان ، وهناك أسماء جدول بيانات ذات صلة وملفات التكوين المتعلقة باسم فئة الكيان. ملفات التكوين هي كما يلي:
taborm.properties
com.shude.entity.userInfo = user_info com.shude.entity.roleinfo = rob_info com.shude.entity.fabricinfo = fabric_info com.shude.entity.productinfo = product_info com.shude.entity.entity
إن المقالة أعلاه JDBC تنفذ الطرق الأساسية العامة لإضافة وحذف وتعديل والتحقق من كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.