1. 程式人生 > >獲取的欄位值是空值或者為null,而你自己的需求就是想要獲取的欄位為一個 * 預設的值

獲取的欄位值是空值或者為null,而你自己的需求就是想要獲取的欄位為一個 * 預設的值

一、業務闡述

  在開發中查詢的資料庫結果集,既要連線資料庫、執行資料庫操作、關閉資料庫,還要把結果集的記錄人為的設定到自己封裝的DAO中等一系列的重複程式碼。

本文主要是想解決:使用者只需要得到資料庫連線,寫sql語句,自己封裝dao,其餘的操作由封轉的小框架解決這些重複的工作,使用者得到的只是一個集合List。

List裡面的元素有集合Map其中key是資料庫中的欄位型別,value是欄位型別對應的值這個函式

DBUtil.executeQuery(con, sql)

List還提供集合元素存放的是dao物件,一條資料庫記錄對應一個dao物件,此函式是

DBUtil.executeQuery(con, sql,Vehicle.class)

以下提供原始碼的敘述

 二、原始碼解說

 測試類

Main.java程式碼  收藏程式碼
  1. package com.hewen.dao.manage;  
  2. import java.sql.Connection;  
  3. import java.sql.PreparedStatement;  
  4. import java.sql.ResultSet;  
  5. import java.sql.SQLException;  
  6. import java.util.List;  
  7. public class Main   
  8. {  
  9.     public static void main(String[] args)   
  10.     {  
  11.         Connection con;  
  12.         try {  
  13.             con = DBTest.getCon();  
  14.         } catch (SQLException e) {  
  15.             e.printStackTrace();  
  16.             return;  
  17.         }  
  18.         PreparedStatement pst = null;  
  19.         ResultSet rs = null;  
  20.         String sql = "select * from t_vehicle t where t.vehicle_id<4";  
  21.         /**  
  22.          * 該方法用到的技術是通過結果集的列屬性的性質得到,沒有用到反射機制  
  23.          * 這個測試用例也是把查詢的結果集放到List集合  
  24.          * 裡面的元素是集合Map,key是資料庫中的欄位型別,value是  
  25.          * 欄位型別對應的值,  
  26.          * 查詢的結果如:[{KIND_ID=1, DEF_FLAG=null, CHANNELNO=1, SN=陸震,(822)22911,13771000789,   
  27.          * BUYDATE=2010-02-26, DELETETIME=null, STAMP=2010-02-26, REGDATE=null, ISDELETED=0,   
  28.          * VEHICLE_ID=2, NUMBER_PLATE=蘇B10001, VEHICLESTATE=待命狀態(對應現場返回), USEDATE=2010-02-26,   
  29.          * INTERPHONENO=null, NUMBER_PLATE_TYPE_ID=4, TEL2=null, STYLE=null, COLOR=null,   
  30.          * INTERPHONEID=null, LASTMAINTAINTIME=null, INITDISTANCE=0, LAST_UPDATE_TIME=2010-02-26,  
  31.          *  REMARK=null, TEL=null, SUPERVISER=null},   
  32.          *  {KIND_ID=3, DEF_FLAG=null, CHANNELNO=1, SN=陸震,  
  33.          *  (822)22911,13771000789, BUYDATE=2010-02-26, DELETETIME=null, STAMP=2010-02-26,   
  34.          *  REGDATE=null, ISDELETED=0, VEHICLE_ID=3, NUMBER_PLATE=蘇B90003,   
  35.          *  VEHICLESTATE=待命狀態(對應現場返回), USEDATE=2010-02-26, INTERPHONENO=null,   
  36.          *  NUMBER_PLATE_TYPE_ID=4, TEL2=13151000793, STYLE=麵包車, COLOR=白, INTERPHONEID=null,   
  37.          *  LASTMAINTAINTIME=null, INITDISTANCE=0, LAST_UPDATE_TIME=2010-02-26, REMARK=null,  
  38.          *   TEL=22916, SUPERVISER=楊興華}]  
  39.          */  
  40.         try {  
  41.             List list=DBUtil.executeQuery(con, sql);  
  42.             System.out.println(list);  
  43.         } catch (SQLException e) {  
  44.             e.printStackTrace();  
  45.         }  
  46.         /**  
  47.          * 這個測試用例只是把查詢的結果集中的某一條記錄對映到了dao物件中,  
  48.          * 查詢的結果如:  
  49.          * vehicle:vehicle_id: 2 numberPlate: 蘇B10001 deleteDate: null  
  50.            vehicle:vehicle_id: 3 numberPlate: 蘇B90003 deleteDate: null  
  51.          */  
  52.     /*  try {  
  53.             pst = con.prepareStatement(sql);  
  54.             rs = pst.executeQuery();  
  55.             while(rs.next()){  
  56.                 Vehicle r = (Vehicle) DBUtil.getFirstObjectFromRs(rs, Vehicle.class);  
  57.                 System.out.println("vehicle:" + r);  
  58.             }  
  59.         } catch (SQLException e) {  
  60.             e.printStackTrace();  
  61.         }finally{  
  62.             DBUtil.closeRs(rs);  
  63.             DBUtil.closePst(pst);  
  64.             DBUtil.closeCon(con);  
  65.         }*/  
  66.         /**  
  67.          * 方法是用的反射機制  
  68.          * 這個測試用例是測試executeQuery函式,把查詢的結果集放到List集合  
  69.          * 並且集合元素存放的是dao物件,一條資料庫記錄對應一個dao物件,  
  70.          * 打印出來的結果如:  
  71.          * [vehicle_id: 2 numberPlate: 蘇B10001 deleteDate: null,   
  72.          * vehicle_id: 3 numberPlate: 蘇B90003 deleteDate: null]  
  73.          *   
  74.          */  
  75.     /*  try {  
  76.             List list=DBUtil.executeQuery(con, sql,Vehicle.class);  
  77.             System.out.println(list);  
  78.         } catch (SQLException e) {  
  79.             // TODO Auto-generated catch block  
  80.             e.printStackTrace();  
  81.         }*/  
  82.     }  
  83. }  

 封裝dao DBUtil類

Java程式碼  收藏程式碼
  1. package com.hewen.dao.manage;  
  2. import java.lang.reflect.InvocationTargetException;  
  3. import java.lang.reflect.Method;  
  4. import java.lang.reflect.Type;  
  5. import java.sql.Connection;  
  6. import java.sql.PreparedStatement;  
  7. import java.sql.ResultSet;  
  8. import java.sql.ResultSetMetaData;  
  9. import java.sql.SQLException;  
  10. import java.sql.Statement;  
  11. import java.sql.Types;  
  12. import java.util.ArrayList;  
  13. import java.util.HashMap;  
  14. import java.util.List;  
  15. import java.util.Map;  
  16. /*** 
  17.  * 注意利用查詢出資料庫的一條記錄對映到相應的dao中,寫相應的dao一定要注意欄位,一定 
  18.  * 要與資料庫的記錄欄位相對應,大小寫可以忽略,但是欄位不一致就返回錯誤的資料 
  19.  *  
  20.  * private static Object getValueFromRs(ResultSet rs, String fieldName, Type t) throws SQLException 
  21.  * 此介面有個小的問題就是如果,獲取的欄位值是空值或者為null,而你自己的需求就是想要獲取的欄位為一個 
  22.  * 預設的值,那就只需要客戶該寫這個方法,進行判斷就可以 
  23.  * @author Administrator 
  24.  * 
  25.  */  
  26. public class DBUtil {  
  27.     /** 
  28.      * 對操作的資料庫回滾 
  29.      * @param con 對資料庫操作所得到的連結 
  30.      */  
  31.     public static void rollBack(Connection con){  
  32.         try {  
  33.             con.rollback();  
  34.         } catch (SQLException e) {  
  35.             e.printStackTrace();  
  36.         }  
  37.     }  
  38.     /*** 
  39.      *  
  40.      * @param con 資料庫jdbc連結 
  41.      * @param sql 執行的sql語句 
  42.      * @return 返回查詢的記錄數,記錄儲存在集合List裡面, 
  43.      * 裡面的元素是集合Map,key是資料庫中的欄位型別,value是 
  44.      * 欄位型別對應的值 
  45.      * @throws SQLException 
  46.      */  
  47.     public static List<Map<String, Object>> executeQuery(Connection con, String sql) throws SQLException{  
  48.         PreparedStatement pst = null;  
  49.         ResultSet rs = null;  
  50.         try {  
  51.             pst = con.prepareStatement(sql);  
  52.             rs = pst.executeQuery();  
  53.             return getListFromRsLowerCase(rs);  
  54.         }

    相關推薦

    獲取或者null自己需求就是獲取一個 * 預設

    一、業務闡述   在開發中查詢的資料庫結果集,既要連線資料庫、執行資料庫操作、關閉資料庫,還要把結果集的記錄人為的設定到自己封裝的DAO中等一系列的重複程式碼。 本文主要是想解決:使用者只需要得到資料庫連線,寫sql語句,自己封裝dao,其餘的操作由封轉的

    hashtable,concurrenthashmap為什麼鍵和不能nullhashmap可以?

    因為hashtable,concurrenthashmap它們是用於多執行緒的,併發的 ,如果map.get(key)得到了null,不能判斷到底是對映的value是null,還是因為沒有找到對應的key而為空,而用於單執行緒狀態的hashmap卻可以用cont

    DB中欄null字串空格怎麼過濾取出有效

    比如要求取出微信繫結的,沒有解綁的 未繫結,指定欄位為null 繫結的,指定欄位為某個字串 解綁的,有的客戶用的是更新指定欄位為1,有的客戶更新指定欄位為‘1’ 髒資料的存在,比如該欄位為空字串 髒資料的存在,比如該欄位為空格 要怎麼過濾出來? 解綁後指定欄位更新為‘1’ 取出繫結的會員,假設欄位是aa

    access Vba中對日期時間Null 不是""。

      最近一片白雲對“鶴慶縣人事工資變動調資與工資管理系統”增加了一些功能,其中就是能將Access資料表“職工檔案”中的“薪級變動時間”欄位、“崗位變動時間”欄位的日期用程式自動更新為空,在用SQL語句中遇到一點點小問題,經過在網上查詢,問題總算解決了,怪自己學藝不夠紮實。現將SQL語句提供給正在尋找答案的

    【spring mvc】後臺的API測試中總提示接口實體的某一個字段不能null但是明明給了還提示不能

    ont TP 報錯 分享 ima 技術 技術分享 圖片 request 實體是這三個字段 接口的實現類Controller 前臺測試給值 依舊報錯 解決方法: 需要添加@RequestBody註解 【spring mvc】後臺的API,

    Mysql數據表字段設置了默認插入數據後默認字段的null不是默認

    才會 默認 自動 nbsp tis 數據 過濾 工具 持久 我將mysql的數據表的某個字段設置了默認值為1,當向該表插入數據的時候該字段的值不是默認值,而是null。 我的錯誤原因: 對數據庫的操作我使用了持久化工具mybatis,插入數據的時候插入的是整個實體,直接

    c# 如果一個對象的null那麽它調用擴展方法時甚麽不報錯

    tro img 數據類型 一個 emp void person () rem 如果一個對象的值為null,那麽它調用擴展方法時會報錯嗎? Person p = null ; p.ExtendMethod(); 上述代碼出現的情況不會報錯,剛開始遇到這種情況時很納悶,就去

    java中將物件賦null對垃圾回收有用嗎?

    相信,網上很多java效能優化的帖子裡都會有這麼一條:儘量把不使用的物件顯式得置為null.這樣有助於記憶體回收      可以明確的說,這個觀點是基本錯誤的.sun jdk遠比我們想象中的機智.完全能判斷出物件是否已經no ref..但是,我上面用的詞是"

    mybatis查詢返回的物件不null但是屬性null

    返回的物件不為null,但是屬性值為null 程式碼如下: <resultMap id="BaseResultMap" type="com.trhui.ebook.dao.model.MerchantUser"> <id column="MU_ID" jd

    java中只宣告一個物件不賦與宣告一個物件並賦null有啥區別?

    轉自:http://www.oschina.net/question/557858_127408 http://zhidao.baidu.com/link?url=rp_hAuPys2vMPnir0t7IFccKVnwEm8zHI7-wEoBSJXw05SAmKHGOObT

    row.getCell()獲取單元格null指標異常

    if(row.getCell(j+3) == null){ row.createCell(j+3).setCellValue(new HSSFRichTextString(String.valueOf(resultList.get(j)))); }else {

    最近項目中遇到了一個場景其實很常見就是定時獲取接口刷新數據。那麽問題來了假設我設置的定時時間1s數據接口返回大於1s應該用同步阻塞還是異步?

    set timeout pre git plain 異步執行 項目 strip nod 初識setTimeout 與 setInterval 先來簡單認識,後面我們試試用setTimeout 實現 setInterval 的功能 setTimeout 延遲一段時間執行一

    shell 腳本中 空格的註意問題:= 賦兩邊不能有空格if比較判斷時 = 兩邊必須加空格

    花括號 判斷 建議 閱讀 i+1 字符 變量 中間 必須 shell腳本對空格有嚴格的規定,賦值語句等號兩邊不能有空格,而字符串比較,等號兩邊必須有空格 賦值時: i=1     i=$((i+1)) // =用作賦值時,兩邊絕對不

    Ant Design Pro用setFieldsValue方法給巢狀到Form表單中的DatePicker元件設定預設

     其實用setFieldsValue或者獲取setState方法都可以設定DatePicker的預設值。 setState方法: <FormItem label="日期選擇框"> {getFieldDecorator('date', {

    DropDownList 後臺新增一個預設並選中

       this.DropDownList1.DataBind();                 //需要在最後一行,在繫結資料的後面                 this.DropDownLi

    為什麼儘可能用NOT NULL不是NULL

    NULL為什麼多人用? 1、NULL是建立資料表時預設的,初級或不知情的或怕麻煩的程式設計師不會注意這點。 2、很多人員都以為not null 需要更多空間,其實這不是重點。 3、重點是很多程式設計師覺得NULL在開發不用去判斷插入資料,寫sql語句的時候更方便快捷。 網上

    JAVA通過Gson去除過濾掉自己

    ExclusionStrategy myExclusionStrategy = new ExclusionStrategy() {                     @Override                     public boolean should

    什麽別人一周搞定Linux卻做不到

    shell腳本我給大家精選準備了4段Shell實戰腳本 / 基礎Linux常用命令;也許能解決你很多實際工作問題;如果看到這些你不知道它能用來幹嘛,先收藏、先記住吧,以後用的上~實戰命令一:在實際的工作中,我們經常需要將多個文件同時移動到一個指定的目錄下,如果一個一個移動,太折騰...你應該要知道:mv 有一

    .NET/C# 異常處理:寫一個的 try 塊程式碼把重要程式碼寫到 finally 中

    不知你是否見過 try { } finally { } 程式碼中,try 塊留空,而只往 finally 中寫程式碼的情況呢?這種寫法有其特殊的目的。 本文就來說說這種不一樣的寫法。 你可以點開這個連結檢視 Exception 類,