亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

JDBC 實現通用的增刪改查基礎類方法

2024-07-13 10:15:55
字體:
來源:轉載
供稿:網友

java中關于數據的管理有很多的框架,如hibernate、mybatis等,但我最開始學習的就是JDBC,我覺得JDBC還是很不錯的,它讓我更深層次的了解了數據的操作,今天我將我寫過的JDBC基礎類再寫一遍!加深下記憶!??!

先將通用的增查實現類BaseDAO貼上

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.DatabaseMetaData;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import com.shude.DAO.im.IBaseDAO;import com.shude.util.ConfigUtil;import com.shude.util.JdbcUtil;import com.shude.util.PageUtil;/** * 通用的增刪改查實現類 * @author Administrator * * @param <E> */public class BaseDAO<E> implements IBaseDAO<E> {	protected static ConfigUtil configUtil;	protected Class<?> cls;	/**	 * 獲取包名、類名	 */	public BaseDAO(){		Class<?> clsTemp = this.getClass();		Type type = clsTemp.getGenericSuperclass();		if (type instanceof ParameterizedType) {			Type[] types = ((ParameterizedType) type).getActualTypeArguments();			cls = (Class<?>) types[0];		}	}	/**	 * 獲取對應類的數據庫中的表名	 */	static{		configUtil = ConfigUtil.newInstance("/tabORM.properties");	}		/**	 * 保存方法	 */	public boolean saveInfo(E e) {		boolean flag = true;		try {			Class<?> cls = e.getClass();			//獲取表名			String tableName = configUtil.getVal(cls.getName());			//獲取主鍵			String prykey = getPrimKey(tableName);			//記錄數據列			List<String> filedList = new ArrayList<String>();			//獲取sql語句			String sql = getsavesql(tableName,prykey,filedList);			//執行sql			flag = excuteSQL(sql,e,filedList);		} catch (Exception e1) {			flag = false;			e1.printStackTrace();		}		return flag;	}		/**	 * 修改方法	 */	public void modifyInfo(E e) {		Class<?> cls = e.getClass();		//獲取表名		String tableName = configUtil.getVal(cls.getName());		//獲取主鍵		String prykey = getPrimKey(tableName);		//記錄數據列		List<String> filedList = new ArrayList<String>();		//獲取sql語句		String sql = getmodifysql(tableName,prykey,filedList);		//添加主鍵到集合		filedList.add(prykey);		//執行sql		excuteSQL(sql,e,filedList);	}  	/**	 * 刪除方法	 */	public void deleteInfo(Object id) {		//獲取表名		String tableName = configUtil.getVal(cls.getName());		//獲取主鍵		String prykey = getPrimKey(tableName);		//獲取sql語句		String sql = "update "+tableName+" set status='1' where "+prykey+"=?";		Connection conn = null;		PreparedStatement pstm = null;		try {			conn = JdbcUtil.getConn();			pstm = conn.prepareStatement(sql);			pstm.setObject(1, id);			pstm.execute();		} catch (Exception e) {			e.printStackTrace();		}finally {			JdbcUtil.closeConn(conn);		}		}	/**	 * 查詢全部方法	 */	public void queryinfo(PageUtil<E> pageUtil) {		E e = pageUtil.getEntity();		//獲取表名		String tableName = configUtil.getVal(cls.getName());		//獲取查詢條件		Map<String,Object> paramMap = getParamMap(e);		//獲取sql		String sql = getquerySQL(paramMap,tableName);		sql += " limit ?,?";		paramMap.put("pageSize", (pageUtil.getPageSize() - 1)*pageUtil.getPageNum());		paramMap.put("pageNum", pageUtil.getPageNum());		//執行SQL		excutQuery(pageUtil,sql,paramMap,tableName);			}		/**	 * 單個查詢方法	 */	public E queryById(Object id) {		//獲取表名				String tableName = configUtil.getVal(cls.getName());				//獲取主鍵				String prykey = getPrimKey(tableName);				//獲取sql				String sql = "select * from "+tableName+" where 1 = 1 and "+prykey+" = ?";				//執行SQL				Connection conn = null;				PreparedStatement pstm = null;				ResultSet rs = null;				E e = null;				try {					conn = JdbcUtil.getConn();					pstm = conn.prepareStatement(sql);					pstm.setObject(1, id);					rs = pstm.executeQuery();					List<E> list = getEntityList(rs);					e = list.get(0);						} catch (Exception ex) {					ex.printStackTrace();				}finally{					JdbcUtil.closeConn(conn);				}				return e;	}		/**	 * 獲取總條數	 * @param paramMap	 * @param tableName	 * @return	 */  private Integer getPagenumsss(Map<String, Object> paramMap, String tableName) {  	paramMap.remove("pageSize");		paramMap.remove("pageNum");		String sql = getquerySQL(paramMap,tableName);		sql = "select count(*) from ("+sql+") tempTab";		Connection conn = null;		PreparedStatement pstm = null;		ResultSet rs = null;		Integer pagenumsss = 0;		try {			conn = JdbcUtil.getConn();			pstm = conn.prepareStatement(sql);			int i = 1;			for (Entry<String,Object> entry : paramMap.entrySet()) {				Object val = entry.getValue();				if(val instanceof java.lang.String){					pstm.setString(i, "%"+val.toString()+"%");				}else if(val instanceof java.lang.Integer){					pstm.setInt(i, Integer.parseInt(val.toString()));				}				i++;			}			rs = pstm.executeQuery();			while(rs.next()){				pagenumsss = rs.getInt(1);			}		} catch (Exception e) {			e.printStackTrace();		}finally{			JdbcUtil.closeConn(conn);		}		return pagenumsss;	}	/**   * 獲取查詢SQL   * @param paramMap   * @param tableName   * @return   */	private String getquerySQL(Map<String, Object> paramMap, String tableName) {		StringBuffer sql = new StringBuffer();		sql.append("select * from ")		.append(tableName)		.append(" where 1 = 1 and status='0' ");		List<String> columlist = getTableColumns(tableName);		for (Entry<String,Object> entry : paramMap.entrySet()) {			String columName = entry.getKey();			for (String colnName : columlist) {				if(colnName.equalsIgnoreCase(columName)){					if(entry.getValue() instanceof java.lang.String){						sql.append(" and ").append(columName).append(" like ?");					}else{						sql.append(" and ").append(columName).append("=?");					}					break;				}			}		}		return sql.toString();	}  /**   * 獲取查詢條件   * @param e   * @return   */	private Map<String, Object> getParamMap(E e) {		Map<String,Object> paramMap = new LinkedHashMap<String,Object>();		Field[] fields = e.getClass().getDeclaredFields();		for (Field field : fields) {			try {				field.setAccessible(true);				Object val = field.get(e);				if(val != null && !"".equals(val.toString())){					paramMap.put(field.getName(), val);				}			} catch (Exception e1) {				e1.printStackTrace();			}					}		return paramMap;	}		/**   * 獲取主鍵   * @param tableName   * @return   */	private String getPrimKey(String tableName) {		Connection conn = null;		DatabaseMetaData metaData = null;		ResultSet rs = null;		String primKeyName = null;		try {			conn = JdbcUtil.getConn();			metaData = conn.getMetaData();			rs = metaData.getPrimaryKeys(conn.getCatalog(), null, tableName.toUpperCase());			while (rs.next()) {				primKeyName = rs.getString("COLUMN_NAME");			}		} catch (SQLException e) {			e.printStackTrace();		}finally{			JdbcUtil.closeConn(conn);		}		return primKeyName;	}	/**	 * 保存方法執行SQL	 * @param sql	 * @param e	 * @param filedList	 * @return	 */	private boolean excuteSQL(String sql, E entity, List<String> filedList) {		boolean flag = true;		Connection conn = null;		PreparedStatement pstm = null;		try {			conn = JdbcUtil.getConn();			pstm = conn.prepareStatement(sql);			//賦值			int i = 1;			for (String columName : filedList) {				Object val = getFieldValue(entity,columName);				pstm.setObject(i, val);				i++;			}			pstm.execute();		} catch (SQLException e1) {			e1.printStackTrace();			flag = false;		}finally{			JdbcUtil.closeConn(conn);		}		return flag;	}	/**   * 獲取修改方法的SQL   * @param tableName   * @param prykey   * @param filedList   * @return   */	private String getmodifysql(String tableName, String prykey, List<String> filedList) {		StringBuffer sql = new StringBuffer();		sql.append("update ").append(tableName).append(" set ");		List<String> columnList = getTableColumns(tableName);		for (String columnName : columnList) {			if (!columnName.equalsIgnoreCase(prykey)) {				filedList.add(columnName);				sql.append(columnName).append("=?,");			}		}		if (sql.toString().endsWith(",")) {			sql = new StringBuffer(sql.substring(0,sql.length()-1));		}		sql.append(" where ").append(prykey).append("=?");		return sql.toString();	}  /**   * 執行查詢全部SQL   * @param pageUtil   * @param sql   * @param paramMap   * @param tableName   */	private void excutQuery(PageUtil<E> pageUtil, String sql, Map<String, Object> paramMap, String tableName) {		Connection conn = null;		PreparedStatement pstm = null;		ResultSet rs = null;		try {			conn = JdbcUtil.getConn();			pstm = conn.prepareStatement(sql);			int i = 1;			for (Entry<String,Object> entry : paramMap.entrySet()) {				Object val = entry.getValue();				if(val instanceof java.lang.String){					pstm.setString(i, "%"+val.toString()+"%");				}else if(val instanceof java.lang.Integer){					pstm.setInt(i, Integer.parseInt(val.toString()));				}				i++;			}			rs = pstm.executeQuery();			List<E> list = getEntityList(rs);			//封裝查詢結果 			pageUtil.setList(list);			//封裝總條數			pageUtil.setPageNumSum(getPagenumsss(paramMap,tableName));		} catch (Exception e) {			e.printStackTrace();		}finally{			JdbcUtil.closeConn(conn);		}	}	/**	 * 獲取表中屬性	 * @param entity	 * @param columName	 * @return	 */  private Object getFieldValue(E entity, String columName) {	  Class<?> cls = entity.getClass();		Object value = null;		//獲取類中的所有成員屬性		Field[] fields = cls.getDeclaredFields();		for (Field field : fields) {			//獲取屬性名稱			String fieldName = field.getName();			//判斷屬性名稱是否與列名相同			if (fieldName.equalsIgnoreCase(columName)) {				//根據規則獲取方法名稱				String methodName = "get"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);				try {					//根據方法名稱獲取方法對象					Method method = cls.getMethod(methodName);					//執行方法并獲取返回值					value = method.invoke(entity);				} catch (Exception e) {					e.printStackTrace();				}				break;			}		}		return value;	}/**  * 保存方法獲取SQL  * @param tableName  * @param prykey  * @param filedList  * @return  */	private String getsavesql(String tableName, String prykey, List<String> filedList) {		StringBuffer sql = new StringBuffer();		sql.append("insert into ").append(tableName).append(" (");			List<String> columnList = getTableColumns(tableName);			for (String string : columnList) {				if (!string.equalsIgnoreCase(prykey)) {					sql.append(string).append(",");					filedList.add(string);				}			}			if (sql.toString().endsWith(",")) {				sql = new StringBuffer(sql.substring(0,sql.length()-1));			}			sql.append(") value (");			for (int i = 0; i <filedList.size(); i++) {								sql.append("?,");								}			if (sql.toString().endsWith(",")) {				sql = new StringBuffer(sql.substring(0,sql.length()-1));			}			sql.append(")");		return sql.toString();	}  	/**	 * 獲取表列	 * @param tableName	 * @return	 */	private List<String> getTableColumns(String tableName) {		List<String> columnList = new ArrayList<String>();		Connection conn = null;		DatabaseMetaData metaData = null;		ResultSet rs = null;		conn = JdbcUtil.getConn();		try {			metaData = conn.getMetaData();			rs = metaData.getColumns(conn.getCatalog(),null,tableName.toUpperCase(),null);			while (rs.next()) {				String clumnName = rs.getString("COLUMN_NAME");				columnList.add(clumnName);			}		}catch (SQLException e) {			e.printStackTrace();		}		finally{			JdbcUtil.closeConn(conn);		}		return columnList;  }  /**   * 封裝查詢結果   * @param rs   * @return   * @throws Exception    */	@SuppressWarnings("unchecked")	private List<E> getEntityList(ResultSet rs) throws Exception {		List<E> list = new ArrayList<E>();		Field[] fields = cls.getDeclaredFields();		while(rs.next()){			E e = (E)cls.newInstance();			for (Field field : fields) {				try {					field.setAccessible(true);					String columName = field.getName();					String fieldType = field.getType().getSimpleName();					if("String".equals(fieldType)){						field.set(e, rs.getString(columName));					}else if("Integer".equals(fieldType)){						field.set(e, rs.getInt(columName));					}				} catch (Exception e1) {					e1.printStackTrace();				}			}			list.add(e);		}		return list;	}}

mysql相關配置文件config.properties內容

driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/dbsda10?characterEncoding=UTF-8 username=root password=rootroot temfile=C:// image=C://images 

配置文件讀取類ConfigUtil

package com.shude.util;import java.io.IOException;import java.util.Properties;/** * 讀取配置文件 * @author Administrator * */public class ConfigUtil { private static ConfigUtil configUtil; private static final String DEFALT_FILE_PATH="/config.properties"; private static String name; private Properties pop; private ConfigUtil(){ init(); } private void init() { pop=new Properties(); try {  if(name!=null)  pop.load(ConfigUtil.class.getResourceAsStream(name));  pop.load(ConfigUtil.class.getResourceAsStream(DEFALT_FILE_PATH)); } catch (IOException e) {  e.printStackTrace(); } } public static ConfigUtil newInstance(String name){ ConfigUtil.name=name; if(configUtil==null)  configUtil=new ConfigUtil(); return configUtil; } /** * 獲取配置文件中右邊的值 * @param key * @return */ public String getVal(String key){ return pop.getProperty(key); }}

在此之前的條件是數據庫的字段名稱要與實體類中的名稱對應并且相同,有相關的數據表名稱及實體類名稱所相關的配置文件,配置文件如下:

tabORM.properties

com.shude.entity.UserInfo=user_info com.shude.entity.RoleInfo=role_info com.shude.entity.FabricInfo=fabric_info com.shude.entity.ProductInfo=product_info com.shude.entity.MateInfo=mate_info com.shude.entity.ProgramInfo=program_info 

以上這篇JDBC 實現通用的增刪改查基礎類方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91视频国产一区| 国产在线视频不卡| 欧美在线视频免费观看| 亚洲自拍中文字幕| 欧美精品在线观看| 欧美猛男性生活免费| 亚洲人成网站777色婷婷| 国产精品久久久久久久久久久久久久| 欧美中文字幕精品| 亚洲18私人小影院| 欧美在线激情网| 在线日韩第一页| 久久伊人精品天天| 日韩精品小视频| 欧美性xxxx极品hd欧美风情| 国产精品国产三级国产专播精品人| 国产日韩欧美影视| 91欧美日韩一区| 免费av在线一区| 日韩电影免费观看中文字幕| 狠狠做深爱婷婷久久综合一区| 国产日韩一区在线| 日本精品中文字幕| 亚洲一区二区中文| 亚洲第一色中文字幕| 亚洲天堂免费在线| 中文字幕亚洲字幕| 国产一区二区免费| 91久久精品视频| 日韩av在线影视| 欧美黑人一级爽快片淫片高清| 国产91ⅴ在线精品免费观看| 国产精品自产拍在线观看| 成人免费看片视频| 欧美激情视频播放| 91久久久久久国产精品| 国产精品视频网站| 国产亚洲欧洲高清| 91中文在线观看| 亚洲综合在线播放| 91精品国产高清自在线| 欧美激情视频网址| 欧美一级高清免费播放| 亚洲国内高清视频| 国产精品v片在线观看不卡| 欧美国产亚洲视频| 久久久久久com| 亚洲欧美第一页| 国产精品视频在线播放| 亚洲欧美精品中文字幕在线| 91久久精品美女高潮| 国产97免费视| 国内精品小视频在线观看| 久久久人成影片一区二区三区观看| 亚洲美女精品成人在线视频| 欧美色视频日本高清在线观看| 韩剧1988免费观看全集| 欧美福利视频网站| 久久精品视频网站| 日韩av一区二区在线观看| 欧美在线一区二区视频| 国产精品www网站| 国产精品久久二区| 92版电视剧仙鹤神针在线观看| 亚洲视频999| 性欧美亚洲xxxx乳在线观看| 亚洲精品免费av| 久久天天躁狠狠躁夜夜躁| 4p变态网欧美系列| 欧美在线观看网址综合| 亚洲va久久久噜噜噜久久天堂| 国产精品视频中文字幕91| 色偷偷av亚洲男人的天堂| 亚洲免费小视频| 日韩视频在线一区| 亚洲成人黄色在线| 欧美丝袜一区二区三区| 国产精品欧美日韩| 日本久久久久久久久| 欧美性极品xxxx做受| 青青在线视频一区二区三区| 欧美日韩一区二区在线| 日韩精品视频在线观看网址| 欧美日韩激情网| 国产精品免费久久久| 国产一区二区三区网站| 欧美激情亚洲一区| 日韩中文字幕免费视频| 欧美激情奇米色| 最新日韩中文字幕| 亚洲成人av片在线观看| 久久免费少妇高潮久久精品99| 成人高清视频观看www| 中文字幕亚洲综合久久筱田步美| 在线一区二区日韩| 欧美激情一级二级| 国产一区二区三区在线视频| 国产一区二区三区网站| 岛国精品视频在线播放| www.99久久热国产日韩欧美.com| 午夜精品一区二区三区视频免费看| 日韩在线视频国产| 欧美高清性猛交| 日韩经典中文字幕在线观看| 亚洲国产欧美自拍| 欧美性受xxxx黑人猛交| 97av在线播放| 精品久久国产精品| 日韩精品免费观看| 亚洲а∨天堂久久精品9966| 久久精品91久久香蕉加勒比| 国产xxx69麻豆国语对白| 97精品久久久中文字幕免费| 亚洲日本欧美中文幕| 日韩一区视频在线| 2020欧美日韩在线视频| 亚洲自拍欧美色图| 国产日韩精品综合网站| 欧美黑人又粗大| 91国内产香蕉| 91综合免费在线| 九九久久综合网站| 久久久久久久电影一区| 日韩在线观看你懂的| 国产精品久久久久久av福利软件| 韩国日本不卡在线| 欧美日韩精品国产| 国产91精品黑色丝袜高跟鞋| 一区二区av在线| 在线看福利67194| 波霸ol色综合久久| 久久久999精品| 久久久精品欧美| 68精品国产免费久久久久久婷婷| 97视频免费看| 欧美性猛交xxxx黑人猛交| 美日韩精品免费视频| 国产精品女主播视频| 国产欧美日韩综合精品| 国产精品久久久久久av下载红粉| 在线观看欧美日韩| 中文字幕免费国产精品| 欧美一区亚洲一区| 日韩在线观看免费高清完整版| 欧美激情中文网| 国产精品白嫩美女在线观看| 成人精品网站在线观看| 国产精品丝袜视频| 精品久久久久久久久久久| 欧美黄网免费在线观看| 成人黄色av网站| 精品久久久久久久久久ntr影视| 日韩欧美中文在线| 久久国内精品一国内精品| 欧美精品中文字幕一区| 久99九色视频在线观看| 日本韩国在线不卡| 另类少妇人与禽zozz0性伦| 日韩在线观看精品| 一区二区三区无码高清视频| 国产精品69久久久久| 精品福利视频导航| 日韩在线视频播放| 色偷偷亚洲男人天堂|