成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 詳解JDBC數(shù)據(jù)庫鏈接及相關(guān)方法的封裝

詳解JDBC數(shù)據(jù)庫鏈接及相關(guān)方法的封裝

熱門標簽:電話機器人免費嗎 龍圖酒吧地圖標注 地圖標注圖標素材入駐 好搜地圖標注 怎么申請400電話申請 百度地圖標注地方備注 400電話申請什么好 怎么辦理400電話呢 電銷機器人價格多少錢一臺

詳解JDBC數(shù)據(jù)庫鏈接及相關(guān)方法的封裝

 使用的是MySQL數(shù)據(jù)庫,首先導入驅(qū)動類,然后根據(jù)數(shù)據(jù)庫URL和用戶名密碼獲得數(shù)據(jù)的鏈接。由于使用的是MySQL數(shù)據(jù)庫,它的URL一般為,jdbc:mysql://主機地址:端口號/庫名。

  下面是封裝的具體類,用到了泛型和反射,不過還存在些問題,就是對使用的泛型對象有些限制,只能用于泛型類對象屬性名與數(shù)據(jù)庫表中列名相同的對象,而且初始化對象的方法必須為set+屬性名的方法。本來想通過返回值類型,參數(shù)列表來確定該屬性初始化方法的,然而可能是目前學到的還是太少,只學了三周,所以并沒有實現(xiàn),感覺這個方法還是很low,以后還要繼續(xù)完善。本來看到網(wǎng)上有用beanUtils包,利用map將查詢的一列存起來,直接轉(zhuǎn)化成該對象的,但是就是想試試新學到的反射。而且最后的垃圾回收器并不能如同C++的析構(gòu)函數(shù)一樣,所以關(guān)閉數(shù)據(jù)庫鏈接的地方也需要改善。

實現(xiàn)代碼:

public class Consql {
 private static Consql consql=null;//單例設(shè)計模式
 private Connection conn=null;//數(shù)據(jù)庫鏈接
 private final String url;//數(shù)據(jù)庫url
 private final String username;//數(shù)據(jù)庫用戶名
 private final String password;//數(shù)據(jù)庫密碼
 //驅(qū)動類的加載
 static{//以靜態(tài)代碼塊的形式加載驅(qū)動類,靜態(tài)代碼塊只在類加載的時候執(zhí)行一次
  try {
   Class.forName("com.mysql.jdbc.Driver");
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
 }
 //構(gòu)造函數(shù)
 private Consql(String url,String username,String password) throws SQLException{
  this.url = url;
  this.username = username;
  this.password = password;
  open();//創(chuàng)建連接
 }
 private Connection open() throws SQLException
 {
  try {//驅(qū)動器獲取數(shù)據(jù)庫鏈接
   conn=DriverManager.getConnection(url, username, password);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   //e.printStackTrace();
   throw e;
  }  
  return conn;  
 }
 /**
  * 帶限制條件查找
  * @param sql 帶占位符?的sql語句
  * @param t 返回相關(guān)類型對象的類(T.class)
  * @param params 替換占位符的數(shù)據(jù),為動態(tài)數(shù)組
  * @return ArrayListT>
  * @throws SQLException 
  */
 public T> ArrayListT> select(String sql,ClassT> t,Object...params) throws SQLException
 {//獲取T類所有public方法
  Method[] declaredMethods = t.getDeclaredMethods();
  //創(chuàng)建一個盛放該類型對象集合
  ArrayListT> arrayList=new ArrayList>();
  try (PreparedStatement pStatement=conn.prepareStatement(sql);)
  {   
   for(int i=0;iparams.length;i++)
   {
    pStatement.setObject(i+1, params[i]);
   }   
   try(ResultSet rSet=pStatement.executeQuery();) 
   {
    ResultSetMetaData rData=rSet.getMetaData();
    //獲取查詢到結(jié)果表的列數(shù)
    int columnCount = rData.getColumnCount();    
    while (rSet.next()) {
     T a=t.newInstance();//創(chuàng)建泛型類實例
     for(int i=0;icolumnCount;i++)
     {//獲得方數(shù)組里的set方法,這里造成了局限性,只能數(shù)據(jù)庫表列名與對象名一致,且只能是set方法
      String aString="set"+rData.getColumnName(i+1);
      for (Method method : declaredMethods) {
       if(method.getParameterCount()==1method.getReturnType().toString().equals("void")method.getName().equalsIgnoreCase(aString))
       {//這里存在問題,前兩個判斷條件基本沒用,主要是最初不想用上面拼串的方式來判斷是不是調(diào)用該參數(shù)的方法
        method.setAccessible(true);
        //利用反射調(diào)用該方法
        method.invoke(a, rSet.getObject(i+1));
        break;
       }
      }
     }
     arrayList.add(a);
    }
   } catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } 
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   throw e;
  }
  return arrayList;  
 }
 /**
  * 數(shù)據(jù)插入
  * @param sql 帶占位符?的sql語句
  * @param params 替換占位符的數(shù)據(jù),動態(tài)數(shù)組
  * @throws SQLException
  */
 public void insert(String sql,Object...params) throws SQLException
 {
  try(PreparedStatement pStatement=conn.prepareStatement(sql);) {
   
   for(int i=0;iparams.length;i++)
   {
    pStatement.setObject(i+1, params[i]);
   }
   pStatement.executeUpdate();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   throw e;
  }
 }
 /**
  * 數(shù)據(jù)更新
  * @param sql 帶占位符?的sql語句
  * @param params 替換占位符的數(shù)據(jù),動態(tài)數(shù)組
  * @throws SQLException
  */
 public void update(String sql,Object...params) throws SQLException
 {
  try(PreparedStatement pStatement=conn.prepareStatement(sql);) {
   
   for(int i=0;iparams.length;i++)
   {
    pStatement.setObject(i+1, params[i]);
   }
   pStatement.executeUpdate();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   throw e;
  }
 }
 /**
  * 帶限制條件刪除
  * @param sql 帶占位符?的sql語句
  * @param params 替換占位符的數(shù)據(jù),動態(tài)數(shù)組
  * @throws SQLException
  */
 public void delete(String sql,Object...params) throws SQLException
 {
  try(PreparedStatement pStatement=conn.prepareStatement(sql);) {
   
   for(int i=0;iparams.length;i++)
   {
    pStatement.setObject(i+1, params[i]);
   }
   pStatement.executeUpdate();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   throw e;
  }
 }
 /**
  * 刪除全部,不帶有限制
  * @param sql
  * @throws SQLException
  */
 public void deleteall(String sql) throws SQLException
 {
  try(PreparedStatement pStatement=conn.prepareStatement(sql);) {      
   pStatement.executeUpdate();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   throw e;
  }
 }
 /**
  * 無限制條件查找
  * @param sql 
  * @param t 泛型類T.class
  * @return ArrayListT>
  * @throws SQLException 
  */
 public T> ArrayListT> select(String sql,ClassT> t) throws SQLException
 {
  Method[] declaredMethods = t.getDeclaredMethods();
  ArrayListT> arrayList=new ArrayList>();
  try (PreparedStatement pStatement=conn.prepareStatement(sql);)
  {      
   try(ResultSet rSet=pStatement.executeQuery();) 
   {
    ResultSetMetaData rData=rSet.getMetaData();
    int columnCount = rData.getColumnCount();    
    while (rSet.next()) {
     T a=t.newInstance();
     for(int i=0;icolumnCount;i++)
     {
      String aString="set"+rData.getColumnName(i+1);
      for (Method method : declaredMethods) {
       if(method.getName().equalsIgnoreCase(aString))
       {
        method.setAccessible(true);
        method.invoke(a, rSet.getObject(i+1));
        break;
       }
      }
     }
     arrayList.add(a);
    }
   } catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } 
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   throw e;
  }
  return arrayList; 
 }
 /**
  * 返回表中數(shù)據(jù)行數(shù)
  * @param tableName 數(shù)據(jù)庫表名
  * @return 行數(shù)
  * @throws SQLException
  */
 public int count(String tableName) throws SQLException
 {
  String sql="select count(*) from "+tableName;
  try(PreparedStatement pStatement=conn.prepareStatement(sql);
    ResultSet rsSet=pStatement.executeQuery(); )
  {  
   if(rsSet.next())
   {
    return rsSet.getInt(1);
   }   
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   throw e;
  }
  return 0;
 }
 /**
  * 判斷數(shù)據(jù)是否存在
  * @param sql 帶占位符?的sql語句
  * @param params 替換占位符的數(shù)據(jù),動態(tài)數(shù)組
  * @return boolean
  * @throws SQLException
  */
 public boolean isExist(String sql,Object...params) throws SQLException
 {  
  try(PreparedStatement pStatement=conn.prepareStatement(sql);)
  {
   for(int i=0;iparams.length;i++)
   {
    pStatement.setObject(i+1, params[i]);
   }
   try(ResultSet rsSet=pStatement.executeQuery();) {
    if(rsSet.next())
    {
     return true;
    }
   } finally {
    
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   throw e;
  }
  return false;  
 }
 /**
  * 創(chuàng)建實例
  * @param url 數(shù)據(jù)庫url
  * @param username 用戶名
  * @param password 密碼
  * @return consql對象
  * @throws SQLException
  */
 public static Consql getnewInstance(String url,String username,String password) throws SQLException
 {
  if(consql==null)
   consql=new Consql(url, username, password);
  return consql;  
 }
 //垃圾回收,貌似并不能達到析構(gòu)函數(shù)的效果
 protected void finalize() throws Throwable
 {
  if(conn!=null)
  {
   conn.close();  
  }
  super.finalize();
 }
}

以上就是詳解JDBC數(shù)據(jù)庫鏈接及相關(guān)方法的封裝的實例詳解,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

您可能感興趣的文章:
  • 關(guān)于JDBC的簡單封裝(實例講解)
  • 簡單通用JDBC輔助類封裝(實例)
  • 基于JDBC封裝的BaseDao(實例代碼)
  • java的jdbc簡單封裝方法

標簽:防疫工作 汕尾 廣西 溫州 撫順 固原 浙江 內(nèi)江

巨人網(wǎng)絡(luò)通訊聲明:本文標題《詳解JDBC數(shù)據(jù)庫鏈接及相關(guān)方法的封裝》,本文關(guān)鍵詞  詳解,JDBC,數(shù)據(jù)庫,鏈接,及,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解JDBC數(shù)據(jù)庫鏈接及相關(guān)方法的封裝》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解JDBC數(shù)據(jù)庫鏈接及相關(guān)方法的封裝的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    久久久久亚洲av片无码v| 久久品道一品道久久精品| 亚洲精品乱码日韩| 青青草伊人久久| 一本久久a久久精品vr综合| 亚洲综合中文网| 亚洲一区二区影院| 欧美精品乱码久久久久久按摩| 韩剧1988在线观看免费完整版| 中文字幕五月欧美| 99久久人妻精品免费二区| 欧美日韩国产精品自在自线| 欧美久久一区二区三区| 免费在线观看羞羞视频| 99精品国产高清一区二区| 亚洲欧美在线播放| 91日本视频在线| 99久久99久久免费精品小说| 国产三级精品在线观看| 久久国产一区二区| 在线国产情侣| 国产成人羞羞电影网站在线观看| 国产一区 二区 三区一级| 亚洲精品一区二区三区网址| 国产精品熟女视频| 亚洲国产精品成人一区二区| 亚洲欧美日韩直播| 国产精品久久久久久久久久辛辛| 91精品国产三级| 好男人官网在线观看| 精品欧美一区二区三区免费观看| 黄色高清视频在线观看| 996这里只有精品| 精品区在线观看| 特黄aaaaaaaaa毛片免费视频| 一本久道久久综合多人| 美女写真久久影院| 99在线首页视频| 成人国产精品av| 免费福利在线| 91精品网站在线观看| 成人免费视频国产| 亚洲风情第一页| 日韩成人免费电影| ijzzijzzij亚洲大全| 日韩精品一区二区亚洲av| 视频福利在线| 日韩电影二区| 国产精品视频线看| 国产欧美一区二区三区精品酒店| 91精品国产综合久久香蕉最新版| jizz亚洲女人高潮大叫| 视频一区二区在线观看| 91麻豆免费视频| 国产成一区二区| 久久九九国产| 成人免费无遮挡无码黄漫视频| 亚洲欧美强伦一区二区| 大胆国模一区二区三区| 乱色精品无码一区二区国产盗| 国内精品伊人久久久久av影院| 8x8ⅹ国产精品一区二区二区| 男女18免费网站视频| 国产艳妇疯狂做爰视频| 伊人影院蕉久影院在线观看| 国产伦精品一区二区三区视频黑人| 裸体xxxx视频在线| 夜夜操免费视频| 欧美美女网站色| 国产在线精品二区| 国产欧美日韩在线视频| 久久精品美女视频| 成人av网站在线播放| 欧美偷拍第一页| 成年人福利网站| 青青草精品在线| 国模吧视频一区| 中文字幕久久综合| 91精品久久久久久蜜桃| 毛片久久久久久| 国产精品视频1区| 91久久国产综合久久91精品网站| 在线一级视频| 亚洲综合激情| 污网站在线观看视频| 国产精品久久毛片a| 国产1区2区3区4区| 欧美色老女人| 一区在线播放| 日韩精品三区四区| 亚洲精品视频在线观看视频| 欧美极品videos大乳护士| 成人欧美一区二区三区视频| 国产一区二区精品久| 国产一区二区三区四区五区传媒| 日本午夜精品一区二区| 韩国av一区二区三区四区| 国产日韩精品推荐| 国产91精品看黄网站在线观看| 69堂成人精品视频免费| 国产精品第一页第二页第三页| 日韩精品在线免费观看| 西西人体一区二区| 欧美写真视频一区| 国产精品美女高潮无套| 欧美福利视频| av色影在线看免费| 成人免费视频国产在线观看| 国产成人一区在线| 欧美日韩aaaa| 国产激情视频一区二区在线观看| 精品一区二区成人精品| 午夜天堂影视香蕉久久| 日韩video| 精品久久久久久亚洲综合网站| a在线观看免费| 在线观看一区二区三区三州| 国产区精品视频在线观看豆花| 欧美日韩一区中文字幕| 国产精品电影网站| 欧美r级在线| 成人在线观看一区| 日韩电影毛片| 一区二区三区四区五区视频在线观看| 久久久久久97三级| 亚洲精华液一区二区三区| 欧美老年两性高潮| 女人又爽又黄免费女仆| 性网站在线看| a级片在线观看免费| 午夜免费一区| 奇米色一区二区| 亚洲va国产va欧美va观看| 看片一区二区| 不卡一区综合视频| 不卡伊人av在线播放| 国产一区二区三区在线看麻豆| 免费在线播放av| 亚洲国产精品一区二区久| 蜜桃一区二区三区在线观看| 精品中文字幕在线播放| 日本不卡在线视频| 男女男精品视频网| 国产精品狼人久久影院观看方式| 番号集在线观看| 99久久精品免费看国产免费软件| 久久国产成人| 中文字幕在线永久| 五月天综合网| 好吊妞视频这里有精品| 奇米影视第四狠狠777| 精品一区二区三区免费站| 亚洲免费在线看| 亚洲午夜久久久久久久| 人成免费电影一二三区在线观看| 天堂在线www天堂中文在线| 最新福利小视频在线播放| 影音先锋一区二区资源站| 欧美激情资源网| 国产成人77亚洲精品www| 亚洲人成免费| 在线中文字日产幕| 久久99最新地址| 91精品国产综合久久久久久豆腐| 国产丝袜精品丝袜| 欧美日韩国产在线一区| 国产一区二区三区福利| а√中文在线8| 国产一区再线| 中文字幕制服丝袜成人av| 九九热线有精品视频99| 国产一区二区在线影院| 国产一级免费黄色片| 91成人精品一区二区| 99热这里都是精品| 亚洲午夜精品一区二区| 麻豆av在线播放| 亚洲综合激情视频| 另类图片第一页| xxxx国产精品| 欧美激情性xxxxx| 日韩成人在线视频网站| 91综合久久| 在线能看的黄色| 中文av资源| 黑人玩欧美人三根一起进| 国产a久久麻豆| 理论电影国产精品| 国内精品区一区二区三| 日韩av不卡在线播放| 看片网站欧美日韩| 国产精品99久久久久久久久| 日本a级黄色| 精品日产免费二区日产免费二区| 国产午夜精品一区| 一本色道久久88综合日韩精品| 日韩精品无码一区二区三区| 91视频免费在线看| 日韩麻豆第一页| xfplay5566色资源网站| 一区在线不卡| 久草精品电影| 伊人久久青青草| 亚洲av激情无码专区在线播放| 亚洲欧美国产中文| 久久爱www| 久久久久久久色| 欧美丰满老妇厨房牲生活| 蜜桃视频久久一区免费观看入口| 91成人福利在线| 热久久这里只有| 外国精品视频在线观看| 精品一区二区三区在线播放| 国产精品无码自拍| 极品裸体白嫩激情啪啪国产精品| 国产高清一区二区三区| 69亚洲乱人伦| 九色综合日本| 黄色a级片在线观看| 97成人在线观看视频| 日日干天天草| 亚洲九九九在线观看| 日本三级视频网站| 九色精品蝌蚪| 有色视频在线观看| 精品1区2区| 亚洲欧美偷拍视频| 国产在线观看成人| 2019中文字幕在线视频| 亚洲高清资源综合久久精品| 人妻巨大乳一二三区| 色悠久久久久综合先锋影音下载| 午夜一级毛片| 日本免费网站在线观看| 国产精品嫩草影院在线看| 在线观看福利电影| 亚洲精品一区二区三区区别| 成人av在线播放网址| 一本久道久久综合多人| 97精品伊人久久久大香线蕉| 午夜免费在线观看精品视频| 粉嫩久久久久久久极品| 成都免费高清电影| 久久久久久久久久97| 特一级黄色大片| 日本中文字幕中出在线| 一区二区三区美女xx视频| 黄色片子免费看| 国产精品麻豆网站| 美日韩黄色片| 五月婷婷在线视频| 欧美日韩视频第一区| 国产精品后入内射日本在线观看| 欧美喷水视频| 在线观看91久久久久久| 日韩有吗在线观看| 亚洲精品tv久久久久久久久久| 超碰精品在线观看| 国产精品熟妇一区二区三区四区| 国产精品1区2区在线观看| 黄色av免费| 久久久久久久久久国产精品| 深夜福利久久| 亚洲欧美国内爽妇网| 日本成人在线网站| 老牛影视免费一区二区| 精品中文字幕一区二区小辣椒| 一卡二卡三卡四卡五卡| 在线理论视频| 美女视频黄久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 美女黄色成人网| 日韩在线视频第一页| 亚洲精品男人的天堂| 99久久精品费精品国产一区二区| 免费黄色影片在线| 日韩av电影免费观看| 国产原创欧美精品| 乱插在线www| 中文字幕制服丝袜成人av| 欧美激情综合在线| 久久精品亚洲乱码伦伦中文| 9自拍视频在线观看| h视频免费高清在线观看| 欧美孕妇与黑人孕交| 色噜噜狠狠色综合中国| 黄色一级一级片| 亚洲欧美色图小说| 久久综合成人精品亚洲另类欧美| 黄页在线播放| 性欧美一区二区| 欧美精品一区二区精品网| 日韩精品一区二区三区在线观看| 无码人妻一区二区三区在线| 日韩精品一区二区三区中文在线| 国产在线拍揄自揄拍无码视频| 69堂精品视频在线播放| 国产一区二区精品福利地址| 成人免费毛片在线观看| 国产成人在线精品| 波多野结衣二区三区| 精品国产一区二区三区无码| 欧美特黄一区二区三区| 18啪啪污污免费网站| 伊人网在线播放| 福利一区二区| 亚洲成熟少妇视频在线观看| 中文字幕二三区不卡| 国产91精品视频在线观看| 中日韩男男gay无套| 99综合电影在线视频| 99久久精品国产亚洲精品| av毛片午夜不卡高**水| 日韩一区二区精品在线观看| 天堂а√在线中文在线| 蜜乳av一区二区三区| 日本一二三区在线| 日韩成人伦理电影在线观看| 久久精品国产一区二区三区肥胖| 一本大道久久a久久精二百| 免费黄色成人| 日韩欧美久久| 综合久久中文字幕| 欧美成人高潮一二区在线看| 亚洲色图综合久久| 人与动性xxxxx免费视频| 国产午夜麻豆影院在线观看| 爱情岛论坛亚洲品质自拍视频网站|