獲取的欄位值是空值或者為null,而你自己的需求就是想要獲取的欄位為一個 * 預設的值
一、業務闡述
在開發中查詢的資料庫結果集,既要連線資料庫、執行資料庫操作、關閉資料庫,還要把結果集的記錄人為的設定到自己封裝的DAO中等一系列的重複程式碼。
本文主要是想解決:使用者只需要得到資料庫連線,寫sql語句,自己封裝dao,其餘的操作由封轉的小框架解決這些重複的工作,使用者得到的只是一個集合List。
List裡面的元素有集合Map其中key是資料庫中的欄位型別,value是欄位型別對應的值這個函式
DBUtil.executeQuery(con, sql)
List還提供集合元素存放的是dao物件,一條資料庫記錄對應一個dao物件,此函式是
DBUtil.executeQuery(con, sql,Vehicle.class)
以下提供原始碼的敘述
二、原始碼解說
測試類
Main.java程式碼- package com.hewen.dao.manage;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.List;
- public class Main
- {
- public static void main(String[] args)
- {
- Connection con;
- try {
- con = DBTest.getCon();
- } catch (SQLException e) {
- e.printStackTrace();
- return;
- }
- PreparedStatement pst = null;
- ResultSet rs = null;
-
String sql = "select * from t_vehicle t where t.vehicle_id<4";
- /**
- * 該方法用到的技術是通過結果集的列屬性的性質得到,沒有用到反射機制
- * 這個測試用例也是把查詢的結果集放到List集合
- * 裡面的元素是集合Map,key是資料庫中的欄位型別,value是
- * 欄位型別對應的值,
- * 查詢的結果如:[{KIND_ID=1, DEF_FLAG=null, CHANNELNO=1, SN=陸震,(822)22911,13771000789,
- * BUYDATE=2010-02-26, DELETETIME=null, STAMP=2010-02-26, REGDATE=null, ISDELETED=0,
- * VEHICLE_ID=2, NUMBER_PLATE=蘇B10001, VEHICLESTATE=待命狀態(對應現場返回), USEDATE=2010-02-26,
- * INTERPHONENO=null, NUMBER_PLATE_TYPE_ID=4, TEL2=null, STYLE=null, COLOR=null,
- * INTERPHONEID=null, LASTMAINTAINTIME=null, INITDISTANCE=0, LAST_UPDATE_TIME=2010-02-26,
- * REMARK=null, TEL=null, SUPERVISER=null},
- * {KIND_ID=3, DEF_FLAG=null, CHANNELNO=1, SN=陸震,
- * (822)22911,13771000789, BUYDATE=2010-02-26, DELETETIME=null, STAMP=2010-02-26,
- * REGDATE=null, ISDELETED=0, VEHICLE_ID=3, NUMBER_PLATE=蘇B90003,
- * VEHICLESTATE=待命狀態(對應現場返回), USEDATE=2010-02-26, INTERPHONENO=null,
- * NUMBER_PLATE_TYPE_ID=4, TEL2=13151000793, STYLE=麵包車, COLOR=白, INTERPHONEID=null,
- * LASTMAINTAINTIME=null, INITDISTANCE=0, LAST_UPDATE_TIME=2010-02-26, REMARK=null,
- * TEL=22916, SUPERVISER=楊興華}]
- */
- try {
- List list=DBUtil.executeQuery(con, sql);
- System.out.println(list);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- /**
- * 這個測試用例只是把查詢的結果集中的某一條記錄對映到了dao物件中,
- * 查詢的結果如:
- * vehicle:vehicle_id: 2 numberPlate: 蘇B10001 deleteDate: null
- vehicle:vehicle_id: 3 numberPlate: 蘇B90003 deleteDate: null
- */
- /* try {
- pst = con.prepareStatement(sql);
- rs = pst.executeQuery();
- while(rs.next()){
- Vehicle r = (Vehicle) DBUtil.getFirstObjectFromRs(rs, Vehicle.class);
- System.out.println("vehicle:" + r);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- DBUtil.closeRs(rs);
- DBUtil.closePst(pst);
- DBUtil.closeCon(con);
- }*/
- /**
- * 方法是用的反射機制
- * 這個測試用例是測試executeQuery函式,把查詢的結果集放到List集合
- * 並且集合元素存放的是dao物件,一條資料庫記錄對應一個dao物件,
- * 打印出來的結果如:
- * [vehicle_id: 2 numberPlate: 蘇B10001 deleteDate: null,
- * vehicle_id: 3 numberPlate: 蘇B90003 deleteDate: null]
- *
- */
- /* try {
- List list=DBUtil.executeQuery(con, sql,Vehicle.class);
- System.out.println(list);
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }*/
- }
- }
封裝dao DBUtil類
Java程式碼- package com.hewen.dao.manage;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.lang.reflect.Type;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.sql.Types;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- /***
- * 注意利用查詢出資料庫的一條記錄對映到相應的dao中,寫相應的dao一定要注意欄位,一定
- * 要與資料庫的記錄欄位相對應,大小寫可以忽略,但是欄位不一致就返回錯誤的資料
- *
- * private static Object getValueFromRs(ResultSet rs, String fieldName, Type t) throws SQLException
- * 此介面有個小的問題就是如果,獲取的欄位值是空值或者為null,而你自己的需求就是想要獲取的欄位為一個
- * 預設的值,那就只需要客戶該寫這個方法,進行判斷就可以
- * @author Administrator
- *
- */
- public class DBUtil {
- /**
- * 對操作的資料庫回滾
- * @param con 對資料庫操作所得到的連結
- */
- public static void rollBack(Connection con){
- try {
- con.rollback();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- /***
- *
- * @param con 資料庫jdbc連結
- * @param sql 執行的sql語句
- * @return 返回查詢的記錄數,記錄儲存在集合List裡面,
- * 裡面的元素是集合Map,key是資料庫中的欄位型別,value是
- * 欄位型別對應的值
- * @throws SQLException
- */
- public static List<Map<String, Object>> executeQuery(Connection con, String sql) throws SQLException{
- PreparedStatement pst = null;
- ResultSet rs = null;
- try {
- pst = con.prepareStatement(sql);
- rs = pst.executeQuery();
- return getListFromRsLowerCase(rs);
-
}
相關推薦
獲取的欄位值是空值或者為null,而你自己的需求就是想要獲取的欄位為一個 * 預設的值
一、業務闡述 在開發中查詢的資料庫結果集,既要連線資料庫、執行資料庫操作、關閉資料庫,還要把結果集的記錄人為的設定到自己封裝的DAO中等一系列的重複程式碼。 本文主要是想解決:使用者只需要得到資料庫連線,寫sql語句,自己封裝dao,其餘的操作由封轉的
hashtable,concurrenthashmap為什麼鍵和值不能為null,而hashmap可以?
因為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,
設A和B是兩個按元素值遞增有序的單鏈表,寫一算法將A和B歸並為按按元素值遞減有序的單鏈表C,試分析算法的時間復雜度。(利用上篇帶有頭結點的線性鏈表操作)
遞增 else 長度 初始化 get b- sizeof int insert #include <stdio.h>#include <malloc.h>typedef int DataType;#include "LinList.h" void
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 類,