一、业务阐述

在开发中查询的数据库结果集,既要连接数据库、执行数据库操作、关闭数据库,还要把结果集的记录人为的设置到自己封装的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. }finally{
  55. closeRs(rs);
  56. closePst(pst);
  57. }
  58. }
  59. /***
  60. *  执行sql语句,把结果集存放到List集合里,集合的元素是dao对象
  61. * @param con 数据库得到的链接
  62. * @param sql 执行查询的sql语句
  63. * @param c   把一条条记录要映射的dao类中的对象中去
  64. * @return
  65. * @throws SQLException
  66. */
  67. public static List<Object> executeQuery(Connection con, String sql, Class<?> c) throws SQLException{
  68. PreparedStatement pst = null;
  69. ResultSet rs = null;
  70. try {
  71. pst = con.prepareStatement(sql);
  72. rs = pst.executeQuery();
  73. return getListFromRs(rs, c);
  74. }finally{
  75. closeRs(rs);
  76. closePst(pst);
  77. }
  78. }
  79. /**
  80. * 得到结果集存储到list中
  81. * @param rs 查询的结果集
  82. * @return
  83. * @throws SQLException
  84. */
  85. public static List<Map<String, Object>> getListFromRs(ResultSet rs) throws SQLException{
  86. ResultSetMetaData md = rs.getMetaData();//得到结果集列的属性
  87. int columns = md.getColumnCount();//得到记录有多少列
  88. int i;
  89. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  90. while(rs.next()){
  91. Map<String, Object> map = new HashMap<String, Object>();
  92. for(i = 0; i < columns; i++){
  93. map.put(md.getColumnName(i + 1), getValueByType(rs, md.getColumnType(i + 1), md.getColumnName(i + 1)));
  94. }
  95. list.add(map);
  96. }
  97. return list;
  98. }
  99. /**
  100. * 这个与getListFromRs(ResultSet rs)差不多,只是把数据库的字段变成小写
  101. *
  102. * @param rs
  103. * @return
  104. * @throws SQLException
  105. */
  106. public static List<Map<String, Object>> getListFromRsLowerCase(ResultSet rs) throws SQLException{
  107. ResultSetMetaData md = rs.getMetaData();
  108. int columns = md.getColumnCount();
  109. int i;
  110. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  111. while(rs.next()){
  112. Map<String, Object> map = new HashMap<String, Object>();
  113. for(i = 0; i < columns; i++){
  114. map.put(md.getColumnName(i + 1).toLowerCase(), getValueByType(rs, md.getColumnType(i + 1), md.getColumnName(i + 1)));
  115. }
  116. list.add(map);
  117. }
  118. return list;
  119. }
  120. /**
  121. * 这个与getListFromRs(ResultSet rs)功能一样,只是把数据库的字段变成大写
  122. * @param rs
  123. * @return
  124. * @throws SQLException
  125. */
  126. public static List<Map<String, Object>> getListFromRsUpperCase(ResultSet rs) throws SQLException{
  127. ResultSetMetaData md = rs.getMetaData();
  128. int columns = md.getColumnCount();
  129. int i;
  130. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  131. while(rs.next()){
  132. Map<String, Object> map = new HashMap<String, Object>();
  133. for(i = 0; i < columns; i++){
  134. map.put(md.getColumnName(i + 1).toUpperCase(), getValueByType(rs, md.getColumnType(i + 1), md.getColumnName(i + 1)));
  135. }
  136. list.add(map);
  137. }
  138. return list;
  139. }
  140. /***
  141. *
  142. * @param rs 查询的结果集
  143. * @param c  集合元素存放的dao对象
  144. * @return
  145. * @throws SQLException
  146. */
  147. public static List<Object> getListFromRs(ResultSet rs, Class<?> c) throws SQLException{
  148. List<Object> list = new ArrayList<Object>();
  149. try {
  150. while(rs.next()){
  151. Object o = initObjectFromRsIfExist(rs, c);
  152. list.add(o);
  153. }
  154. } catch (IllegalAccessException e) {
  155. e.printStackTrace();
  156. } catch (InstantiationException e) {
  157. e.printStackTrace();
  158. }
  159. return list;
  160. }
  161. /**
  162. *
  163. * @param rs 查询的结果集
  164. * @param c 结果集一条记录,而一条记录所对应的dao类
  165. * @return
  166. * @throws SQLException
  167. */
  168. public static Object getFirstObjectFromRs(ResultSet rs, Class<?> c) throws SQLException{
  169. Object o = null;
  170. try {
  171. o = initObjectFromRsIfExist(rs, c);
  172. } catch (InstantiationException e) {
  173. e.printStackTrace();
  174. } catch (IllegalAccessException e) {
  175. e.printStackTrace();
  176. }
  177. return o;
  178. }
  179. /***
  180. *
  181. * @param rs 查询出来的结果集
  182. * @param type SQL type from java.sql.Types
  183. * @param name 数据库记录所对应的字段名称
  184. * @return 返回一条记录的一个列值
  185. * @throws SQLException
  186. */
  187. private static Object getValueByType(ResultSet rs, int type, String name) throws SQLException{
  188. switch(type){
  189. case Types.NUMERIC:
  190. return rs.getLong(name);
  191. case Types.VARCHAR:
  192. //if(rs.getString(name)==null){
  193. //return "";
  194. //}
  195. return rs.getString(name);
  196. case Types.DATE:
  197. //if(rs.getDate(name)==null){
  198. //return System.currentTimeMillis();
  199. //  }
  200. return rs.getDate(name);
  201. case Types.TIMESTAMP:
  202. return rs.getTimestamp(name).toString().substring(0,rs.getTimestamp(name).toString().length()-2);
  203. case Types.INTEGER:
  204. return rs.getInt(name);
  205. case Types.DOUBLE:
  206. return rs.getDouble(name);
  207. case Types.FLOAT:
  208. return rs.getFloat(name);
  209. case Types.BIGINT:
  210. return rs.getLong(name);
  211. default:
  212. return rs.getObject(name);
  213. }
  214. }
  215. /***
  216. * 查询dao映射的字段是否在记录在数据库包含的字段
  217. * @param rs 查询的记录集
  218. * @param fieldName dao映射的字段
  219. * @return 如果包含在数据库记录集里面,返回true,否则false
  220. * @throws SQLException
  221. */
  222. private static boolean rsContainsFields(ResultSet rs, String fieldName) throws SQLException{
  223. ResultSetMetaData md = rs.getMetaData();
  224. for(int i = 0; i < md.getColumnCount(); i++){
  225. if(md.getColumnName(i + 1).equalsIgnoreCase(fieldName)){
  226. return true;
  227. }
  228. }
  229. return false;
  230. }
  231. /***
  232. * 这个函数与initObjectFromRsIfExist函数实现的功能是一样,只是
  233. * 没有判断dao中的字段是否与数据库记录所定义的字段是一样的,
  234. * 没有判断时如果自己设置的dao字段与数据库的字段不一致就会报异常
  235. * @param rs
  236. * @param c
  237. * @return
  238. * @throws InstantiationException
  239. * @throws SQLException
  240. * @throws IllegalAccessException
  241. */
  242. private static Object initObjectFromRs(ResultSet rs, Class<?> c) throws InstantiationException, SQLException, IllegalAccessException{
  243. Object o = c.newInstance();
  244. Method[] methods = o.getClass().getMethods();
  245. for(Method m: methods){
  246. if(m.getName().startsWith("set")){
  247. try {
  248. m.invoke(o, getParamValueFromRs(rs, m));
  249. } catch (IllegalArgumentException e) {
  250. throw new RuntimeException("IllegalArgumentException:" + e + "\nMethods:" + m.getName());
  251. } catch (InvocationTargetException e) {
  252. throw new RuntimeException("InvocationTargetException:" + e + "\nMethods:" + m.getName());
  253. }
  254. }
  255. }
  256. return o;
  257. }
  258. /***
  259. *
  260. * 把数据库的一条记录映射到相应的dao对象中,
  261. * 如果dao中的字段与数据库字段不一致,返回的就是dao数据类型定义的默认值
  262. * 如:dao的字段long vehicleID;而数据库的字段是vehicle_id,那么返回的
  263. * 就定义的默认值0.
  264. * @param rs 查询的结果集
  265. * @param c 结果集一条记录,而一条记录所对应的dao类
  266. * @return
  267. * @throws SQLException
  268. * @throws IllegalAccessException
  269. * @throws InstantiationException
  270. */
  271. private static Object initObjectFromRsIfExist(ResultSet rs, Class<?> c) throws SQLException, IllegalAccessException, InstantiationException{
  272. Object o = c.newInstance();//一条记录的dao,新建对象
  273. Method[] methods = o.getClass().getMethods();//dao对象所有的方法
  274. String field;
  275. for(Method m: methods){
  276. //得到dao字段,如getRegdate,转换成Regdate
  277. field = m.getName().substring(3);
  278. //查询dao映射的字段是否在记录在数据库包含的字段,dao方法对set开头的方法进行处理
  279. //因为要将结果集映射到dao里面
  280. if(m.getName().startsWith("set") && rsContainsFields(rs, field)){
  281. try {
  282. m.invoke(o, getParamValueFromRs(rs, m));
  283. } catch (IllegalArgumentException e) {
  284. throw new RuntimeException("IllegalArgumentException:" + e + "\nMethods:" + m.getName());
  285. } catch (InvocationTargetException e) {
  286. throw new RuntimeException("InvocationTargetException:" + e + "\nMethods:" + m.getName());
  287. }
  288. }
  289. }
  290. return o;
  291. }
  292. /***
  293. *
  294. * @param rs 查询的结果集
  295. * @param m  dao映射字段对应的一个set方法
  296. * @return
  297. * @throws SQLException
  298. */
  299. private static Object getParamValueFromRs(ResultSet rs, Method m) throws SQLException
  300. {
  301. String fieldName = m.getName().substring(3);
  302. Type type = m.getGenericParameterTypes()[0];//获取set方法参数的类型
  303. return getValueFromRs(rs, fieldName, type);
  304. }
  305. /**
  306. * 获取数据库一条记录的一个列值
  307. * @param rs 查询的结果集
  308. * @param fieldName dao数据字段,也就是数据库记录的数据字段类型
  309. * @param t 参数的数据类型
  310. * @return
  311. * @throws SQLException
  312. */
  313. private static Object getValueFromRs(ResultSet rs, String fieldName, Type t) throws SQLException{
  314. String type = t.toString();
  315. try{
  316. if(type.equals("int") || type.equals("class java.lang.Integer")){
  317. return rs.getInt(fieldName);
  318. }else if(type.equals("float") || type.equals("class java.lang.Float")){
  319. return rs.getFloat(fieldName);
  320. }else if(type.equals("double") || type.equals("class java.lang.Double")){
  321. return rs.getDouble(fieldName);
  322. }else if(type.equals("long") || type.equals("class java.lang.Long")){
  323. return rs.getLong(fieldName);
  324. }else if(type.equals("class java.lang.String")){
  325. return rs.getString(fieldName);
  326. }else if(type.equals("class java.sql.Timestamp")){
  327. return rs.getTimestamp(fieldName);
  328. }else if(type.equals("class java.sql.Date")){
  329. return rs.getDate(fieldName);
  330. }else if(type.equals("class java.sql.Time")){
  331. return rs.getTime(fieldName);
  332. }
  333. }catch(SQLException e){
  334. throw new SQLException("SQLException when get field:" + fieldName + "\n" + e);
  335. }
  336. throw new RuntimeException("getValueFromRsByField fail, field type is:" + type + ",field name is:" + fieldName);
  337. }
  338. /***
  339. * 关闭数据库多个结果集
  340. * @param rss
  341. */
  342. public static void closeRs(ResultSet... rss){
  343. for(ResultSet rs: rss){
  344. if(rs != null){
  345. try {
  346. rs.close();
  347. } catch (SQLException e) {
  348. }
  349. }
  350. }
  351. }
  352. /**
  353. * 关闭数据库多个psts
  354. * @param psts
  355. */
  356. public static void closePst(Statement... psts){
  357. for(Statement pst: psts){
  358. if(pst != null){
  359. try {
  360. pst.close();
  361. } catch (SQLException e) {
  362. }
  363. }
  364. }
  365. }
  366. /**
  367. * 关闭数据库所得到的多个链接
  368. * @param cons
  369. */
  370. public static void closeCon(Connection... cons){
  371. for(Connection con: cons){
  372. if(con != null)
  373. {
  374. try {
  375. con.close();
  376. } catch (SQLException e) {
  377. }
  378. }
  379. }
  380. }
  381. }

连接Oracle数据库类

Dbtest.java代码  
  1. package com.hewen.dao.manage;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.SQLException;
  5. /***
  6. * 这个是连接Oracle数据库
  7. * @author Administrator
  8. *
  9. */
  10. public class DBTest {
  11. public static Connection getCon() throws SQLException{
  12. try {
  13. Class.forName("oracle.jdbc.driver.OracleDriver");
  14. } catch (ClassNotFoundException e) {
  15. e.printStackTrace();
  16. return null;
  17. }
  18. String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
  19. String user = "avls";
  20. String password = "1";
  21. return DriverManager.getConnection(url, user, password);
  22. }
  23. }

封装的dao类

Vehicle.java代码  
  1. package com.hewen.dao.manage;
  2. import java.sql.Date;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. public class Vehicle{
  6. private long vehicle_Id;//车牌ID
  7. private String number_plate;//车牌号码
  8. private String def_flag;//车牌自定义别名
  9. private int number_plate_type_id;//拍照类型id
  10. private int kind_id;//车辆类型ID,如物流、出租等
  11. private String style;//车辆品牌如:夏利、奔驰、本田等
  12. private String color;//车辆颜色
  13. private String sn;//序列号
  14. private String interphoneid;//对讲机身份码
  15. private String interphoneno;//对讲机号
  16. private int channelno;//频道号
  17. private float initdistance;//初始里程
  18. private Date lastmaintaintime;//最后保养时间
  19. private String vehiclestate;//车辆状态,如正常使用,作废等
  20. private Date buydate;//购买时间
  21. private Date usedate;//使用时间
  22. private Date regdate;//登记时间
  23. private int isdeleted;//是否删除
  24. private Date deletedate;//删除时间
  25. private Date last_update_time;//最后更新时间
  26. private String remark;//备注
  27. private Date stamp;//入库时间
  28. private String superviser;//责任人姓名
  29. private String tel;//责任人电话一
  30. private String tel2;//责任人电话2
  31. public String getRemark() {
  32. return remark;
  33. }
  34. public void setRemark(String remark) {
  35. this.remark = remark;
  36. }
  37. public String toString(){
  38. return "vehicle_id: "+this.vehicle_Id+" numberPlate: "+this.number_plate+" deleteDate: "+this.deletedate;
  39. }
  40. //@Override
  41. public String tagetTableName() {
  42. return "t_used_vehicle";
  43. }
  44. //@Override
  45. public List<String> unEditFields() {
  46. List<String> list = new ArrayList<String>();
  47. list.add("remark");
  48. return list;
  49. }
  50. public String getNumber_plate() {
  51. return number_plate;
  52. }
  53. public void setNumber_plate(String number_plate) {
  54. this.number_plate = number_plate;
  55. }
  56. public String getDef_flag() {
  57. return def_flag;
  58. }
  59. public void setDef_flag(String def_flag) {
  60. this.def_flag = def_flag;
  61. }
  62. public int getNumber_plate_type_id() {
  63. return number_plate_type_id;
  64. }
  65. public void setNumber_plate_type_id(int number_plate_type_id) {
  66. this.number_plate_type_id = number_plate_type_id;
  67. }
  68. public int getKind_id() {
  69. return kind_id;
  70. }
  71. public void setKind_id(int kind_id) {
  72. this.kind_id = kind_id;
  73. }
  74. public String getStyle() {
  75. return style;
  76. }
  77. public void setStyle(String style) {
  78. this.style = style;
  79. }
  80. public String getColor() {
  81. return color;
  82. }
  83. public void setColor(String color) {
  84. this.color = color;
  85. }
  86. public String getSn() {
  87. return sn;
  88. }
  89. public void setSn(String sn) {
  90. this.sn = sn;
  91. }
  92. public String getInterphoneid() {
  93. return interphoneid;
  94. }
  95. public void setInterphoneid(String interphoneid) {
  96. this.interphoneid = interphoneid;
  97. }
  98. public String getInterphoneno() {
  99. return interphoneno;
  100. }
  101. public void setInterphoneno(String interphoneno) {
  102. this.interphoneno = interphoneno;
  103. }
  104. public int getChannelno() {
  105. return channelno;
  106. }
  107. public void setChannelno(int channelno) {
  108. this.channelno = channelno;
  109. }
  110. public float getInitdistance() {
  111. return initdistance;
  112. }
  113. public void setInitdistance(float initdistance) {
  114. this.initdistance = initdistance;
  115. }
  116. public Date getLastmaintaintime() {
  117. return lastmaintaintime;
  118. }
  119. public void setLastmaintaintime(Date lastmaintaintime) {
  120. this.lastmaintaintime = lastmaintaintime;
  121. }
  122. public String getVehiclestate() {
  123. return vehiclestate;
  124. }
  125. public void setVehiclestate(String vehiclestate) {
  126. this.vehiclestate = vehiclestate;
  127. }
  128. public Date getBuydate() {
  129. return buydate;
  130. }
  131. public void setBuydate(Date buydate) {
  132. this.buydate = buydate;
  133. }
  134. public Date getUsedate() {
  135. return usedate;
  136. }
  137. public void setUsedate(Date usedate) {
  138. this.usedate = usedate;
  139. }
  140. public Date getRegdate() {
  141. return regdate;
  142. }
  143. public void setRegdate(Date regdate) {
  144. this.regdate = regdate;
  145. }
  146. public int getIsdeleted() {
  147. return isdeleted;
  148. }
  149. public void setIsdeleted(int isdeleted) {
  150. this.isdeleted = isdeleted;
  151. }
  152. public Date getDeletedate() {
  153. return deletedate;
  154. }
  155. public void setDeletedate(Date deletedate) {
  156. this.deletedate = deletedate;
  157. }
  158. public Date getLast_update_time() {
  159. return last_update_time;
  160. }
  161. public void setLast_update_time(Date last_update_time) {
  162. this.last_update_time = last_update_time;
  163. }
  164. public Date getStamp() {
  165. return stamp;
  166. }
  167. public void setStamp(Date stamp) {
  168. this.stamp = stamp;
  169. }
  170. public String getSuperviser() {
  171. return superviser;
  172. }
  173. public void setSuperviser(String superviser) {
  174. this.superviser = superviser;
  175. }
  176. public String getTel() {
  177. return tel;
  178. }
  179. public void setTel(String tel) {
  180. this.tel = tel;
  181. }
  182. public String getTel2() {
  183. return tel2;
  184. }
  185. public void setTel2(String tel2) {
  186. this.tel2 = tel2;
  187. }
  188. public long getVehicle_Id() {
  189. return vehicle_Id;
  190. }
  191. public void setVehicle_Id(long vehicle_Id) {
  192. this.vehicle_Id = vehicle_Id;
  193. }
  194. }

运行的结果

运行的结果代码  
  1. [{vehiclestate=待命状态(对应现场返回), vehicle_id=2, interphoneid=null, deletetime=null, number_plate=苏B10001, regdate=null, initdistance=0, superviser=null, style=null, number_plate_type_id=4, tel=null, buydate=2010-02-26, isdeleted=0, kind_id=1, channelno=1, usedate=2010-02-26, remark=null, sn=陆震,(822)22911,13771000789, last_update_time=2010-02-26, interphoneno=null, color=null, tel2=null, stamp=2010-02-26, lastmaintaintime=null, def_flag=null}, {vehiclestate=待命状态(对应现场返回), vehicle_id=3, interphoneid=null, deletetime=null, number_plate=苏B90003, regdate=null, initdistance=0, superviser=杨兴华, style=面包车, number_plate_type_id=4, tel=22916, buydate=2010-02-26, isdeleted=0, kind_id=3, channelno=1, usedate=2010-02-26, remark=null, sn=陆震,(822)22911,13771000789, last_update_time=2010-02-26, interphoneno=null, color=白, tel2=13151000793, stamp=2010-02-26, lastmaintaintime=null, def_flag=null}]
  2. vehicle:vehicle_id: 2 numberPlate: 苏B10001 deleteDate: null
  3. vehicle:vehicle_id: 3 numberPlate: 苏B90003 deleteDate: null
  4. [vehicle_id: 2 numberPlate: 苏B10001 deleteDate: null,
  5. vehicle_id: 3 numberPlate: 苏B90003 deleteDate: null]

获取的字段值是空值或者为null,而你自己的需求就是想要获取的字段为一个 * 默认的值相关推荐

  1. SQL-null值和空值

    NULL 值是遗漏的未知数据,默认地,表的列可以存放 NULL 值.空值的数据类型为string,表示数据长度为0的字符. 关于NULL值和空值: 1.查找null值是用 is null ,查找空值是 ...

  2. php sql 字段不能为空值,关于php:Sudden SQL问题-一般错误:1364字段没有默认值

    因此,我有一个服务器列表作为网站-无处不在-当您尝试添加新服务器时会出现错误- Array ( [success] => [error-codes] => Array ( [0] => ...

  3. MySQL修改字段的默认值和空值

    MySQL修改字段的默认值和空值 一.修改字段默认值 修改: ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 默认值 删除: ALTER TABLE 表名 AL ...

  4. sql判断字段不为null_什么是NULL值

    在SQL中,我们可以使用NULL来代表缺失值.一般默认表中的列可以存放NULL值,当某个列中的数据为NULL值时显示为空白字段. 需要注意的是NULL与"包含空格"或"小 ...

  5. MySql中的NULL值和空值

    定义: 空值:表示一个空字符或零长度的字符串,可以使用空引号""来表示: NULL值:MySql中,NULL表示缺少一个已知或适当的值. 除了整数类型的列外,所有其他类型的列(包括 ...

  6. null值和空值的区别

    在编程语言中,null值和空值都代表着一个"无值"的状态,但它们有一些不同的语义和应用场景. 1. null值 在Java.C#等编程语言中,null值表示一个引用类型变量指向了空 ...

  7. java获取object属性值_java反射获取一个object属性值代码解析

    有些时候你明明知道这个object里面是什么,但是因为种种原因,你不能将它转化成一个对象,只是想单纯地提取出这个object里的一些东西,这个时候就需要用反射了. 假如你这个类是这样的: privat ...

  8. 字段中存在空值的问题测试

    当字段中存在空值时,创建在字段上的索引并不包含空值.当查询的条件为is null时,数据库会采用全表扫的方式. SQL> create table dayu071702 as select * ...

  9. 空值替换为0_「Excel」是零值还是空值,你可以自由掌控

    在使用Excel的一些场景下,你会想要隐藏零值,把他们表达成空白单元格.比如说,你有这么一张数据表,如果你想将其中的0值显示为空(或者将其显示成其他符号,类似破折号.'Not Available'字样 ...

最新文章

  1. android stub.asinterface是什么意思
  2. java软件测试技能要求_软件测试需要掌握什么技能
  3. python gui打包exe pyinstaller打包运行失败 Failed to execute script pyi_rth_multiprocessing
  4. 多级cache之间的替换(缓存)策略
  5. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录
  6. 前端学习(2678):懂代码之表格BaseTable编辑操作
  7. 无法初始化链接服务器 (null) 的 OLE DB 访问接口 Microsoft.Jet.OLEDB.4.0 的数据源对象。
  8. 某银行软件中心产品开发流程
  9. 数据库-Linux系统下的命令
  10. angular2组件通讯
  11. Netty4.0学习笔记系列之五:自定义通讯协议
  12. 2020研究生数学建模题目
  13. 使用win10远程控制ubuntu16.04
  14. 淘宝客淘宝联盟解析二合一链接获取优惠链接还原二合一,提取优惠信息
  15. 如何生成一个APP_ID
  16. python深浅拷贝应用_简述Python的深浅拷贝以及应用场景?
  17. 开上新能源车之后,如何摆脱“充电焦虑”?
  18. 鲁大师2021半年报电动车智能排行:九号霸榜,造车新势力崛起!
  19. 坐标反算c语言程序,测量坐标计算程序
  20. 为什么网页无法正常显示

热门文章

  1. java代码耗尽内存_为什么运行Java应用程序的计算机几乎耗尽了物理内存,但仍然可以运行数周...
  2. python正则匹配练习
  3. ATTO 700 荧光染料 齐岳
  4. Android自定义相机镂空遮罩
  5. 国外整理的一套在线渗透测试资源合集[转载]
  6. 使用PowerBuilder 9编绎DLL类型,有点问题.处理过程记录如下.”Error opening file ‘c:\windows\system32\cgen\en32t.h’”
  7. 如何把两张图片拼在一起?
  8. 04.Quartz 触发器
  9. Support for the experimental syntax 'decorators-legacy' isn't currently enabled 异常解决
  10. CISP——密码学的应用