体现的是一种思想,一种写法。涉及增删改查,供参考。数据库使用的是MySQL5.7。

package dao;import java.lang.reflect.Field;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Map.Entry;import entity.User;import util.C3p0DBUtil;import util.DBUtil;public class DBDao {	private Connection conn = null; 		// 数据库连接对象	private PreparedStatement ps = null; 	        // SQL语句预编译对象	private ResultSet rs = null; 			// 查询数据库反馈结果集	private static DBDao dao = new DBDao();         // 数据库操作类对象	private DBDao() {	};	/**	 * 获取数据库操作类DBDao对象的方法。	 * 	 * @return DBDao对象	 */	public static DBDao getInstance() {		return dao;	}	/**	 * 正确关闭连接,释放所有资源。单独调用executeQueryRS方法获取结果集时,请务必用完后调用此方法。	 */	public void closeAll() {		// C3p0DBUtil.closeAll(conn, ps, rs);		DBUtil.closeAll(conn, ps, rs);	}	/**	 * 更新数据库,操作包括增删改	 * 	 * @param sql	 *            SQL语句	 * @param params	 *            占位符参数列表	 * @return -1表示传入参数错误,0表示0行受影响,大于0表示N行受影响	 */	public int executeUpdateSQL(String sql, List params) {		try {			// conn = C3p0DBUtil.getConnection(); // 获取连接对象			conn = DBUtil.getConnection();			ps = conn.prepareStatement(sql); // 格式化SQL语句			if (params != null && !params.isEmpty()) {				for (int i = 0; i < params.size(); i++) {//					System.out.println(params.get(i));					ps.setObject(i + 1, params.get(i)); // 填充占位符				}			}			return ps.executeUpdate(); // 返回执行受影响行数		} catch (SQLException e) {			e.printStackTrace();		} finally {			// C3p0DBUtil.closeAll(conn, ps, rs); // 关闭连接,释放资源			DBUtil.closeAll(conn, ps, rs);		}		return 0; // 执行错误就是没有结果,返回0。	}	/**	 * 动态执行多事物处理,不做查询处理,查询不需要事物处理。	 * @param params 多条SQL事物语句集	 * 		MapMap
>是已要执行的SQL语句为键,占位符参数列表List为值的集合  */ public int executeUpdateByThing(List
>> params) { int count = 0; try {// conn = C3p0DBUtil.getConnection(); conn = DBUtil.getConnection(); conn.setAutoCommit(false); //使用事物处理,先存放内容,不自动提交给数据库执行 for (Map
> map : params) { for (Entry
> enmap : map.entrySet()) { //执行SQL语句 ps = conn.prepareStatement(enmap.getKey()); //配置占位符参数,如果没占位符,就配置对应的参数 List sqlParams = enmap.getValue(); if (sqlParams != null && !sqlParams.isEmpty()) { for (int i = 0; i < sqlParams.size(); i++) { ps.setObject(i + 1, sqlParams.get(i)); } } //记录执行受影响行数 count = ps.executeUpdate(); } } //最终提交给数据库执行 conn.commit(); //返回总受影响行数 return count; } catch (SQLException e) { //如果出现异常全部回滚 if(conn != null) { e.printStackTrace(); try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } } finally {// C3p0DBUtil.closeAll(conn, ps, rs); DBUtil.closeAll(conn, ps, rs); } return count; } /**  * 执行数据库查询,获取数据库结果集。单独调用executeQueryRS方法获取结果集时,请务必手动关闭连接。  *   * @param sql  *            SQL语句字符串  * @param params  *            占位符对应的参数列表,如果没有占位符传空集合即可  * @return 数据库结果集  */ public ResultSet executeQueryRS(String sql, List params) { try { // conn = C3p0DBUtil.getConnection(); conn = DBUtil.getConnection(); ps = conn.prepareStatement(sql); // 如果没占位符,就配置对应的参数 if (params != null && !params.isEmpty()) { for (int i = 0; i < params.size(); i++) { ps.setObject(i + 1, params.get(i)); } } return ps.executeQuery(); } catch (SQLException e) { if (sql.contains("?") && (params == null || params.isEmpty())) { System.err.println("SQL语句中有占位符“?”,请问是否忘记加参数了?"); } e.printStackTrace(); } return null; } /**  * 获取单个实体对象,数据通过结果集提取  *   * @param sql  *            SQL语句字符串  * @param params  *            占位符对应的参数列表  * @param c  *            实体对象对应的类,如:User.class  * @return 对应的实体对象  */ public 
 T getOneObject(String sql, List
 params, Class
 c) { rs = executeQueryRS(sql, params); try { if (rs != null) { T obj = null; ResultSetMetaData rsm = rs.getMetaData(); int count = rsm.getColumnCount(); while (rs.next()) { obj = c.newInstance(); // 创建一个实体对象 for (int i = 1; i <= count; i++) { String columnName = rsm.getColumnName(i); Object columnValue = rs.getObject(i); // System.out.println(columnName + " " + columnValue); if (columnName != null && !columnName.equals("")) { Field field = c.getDeclaredField(columnName); field.setAccessible(true); if (columnValue == null) { columnValue = ""; } field.set(obj, columnValue); // 初始化实体对象属性 } } } return obj; } } catch (Exception e) { e.printStackTrace(); } finally { // C3p0DBUtil.closeAll(conn, ps, rs); DBUtil.closeAll(conn, ps, rs); } return null; } /**  * 获取所有实体对象,数据通过结果集提取  *   * @param sql  *            SQL语句字符串  * @param params  *            占位符对应的参数列表  * @param c  *            实体对象对应的类,如:User.class  * @return 存储所有实体对象的集合  */ public 
 List
 getObjectList(String sql, List
 params, Class
 c) { rs = executeQueryRS(sql, params); try { if (rs != null) { List
 list = new ArrayList
(); ResultSetMetaData rsm = rs.getMetaData(); int count = rsm.getColumnCount(); while (rs.next()) { T obj = c.newInstance(); // 创建一个实体对象 for (int i = 1; i <= count; i++) { String columnName = rsm.getColumnName(i); Object columnValue = rs.getObject(i); if (columnName != null && !columnName.equals("")) { Field field = c.getDeclaredField(columnName); field.setAccessible(true); if (columnValue == null) { columnValue = ""; } field.set(obj, columnValue); // 初始化实体对象属性 } } list.add(obj); // 把单条数据存入集合 } return list; } } catch (Exception e) { e.printStackTrace(); } finally { // C3p0DBUtil.closeAll(conn, ps, rs); DBUtil.closeAll(conn, ps, rs); } return null; } /**  * 获取表头列名  * @param tableName 表名  * @return  */ public List
 getTableColumns(String tableName) { List
 list = null; String sql = "SELECT * FROM " + tableName + "LIMIT 0,1"; ResultSet rs = dao.executeQueryRS(sql, null); try { ResultSetMetaData rsm = rs.getMetaData(); int count = rsm.getColumnCount(); list = new ArrayList
(); for (int i = 1; i <= count; i++) { list.add(rsm.getColumnName(i)); } } catch (SQLException e) { e.printStackTrace(); }finally { dao.closeAll(); } return list; } /**  * 获取数据库表总记录数  * @param tableName 表名  * @return -1表示查询出错,0表示没记录  */ public int getTotalRecord(String tableName) { try { String sql = "SELECT count(*) totals FROM (" + tableName + ") a"; ResultSet rs = dao.executeQueryRS(sql, null); if(rs.next()) { return rs.getInt("totals"); } } catch (SQLException e) { e.printStackTrace(); return -1; }finally { dao.closeAll(); } return 0; } public static void main(String[] args) throws SQLException { DBDao dbd = new DBDao(); String sql = "select * from user"; // ResultSet rs = dbd.executeQueryRS(sql,null); // if(rs == null){ // return; // } // ResultSetMetaData rsm = rs.getMetaData(); // int count = rsm.getColumnCount(); // while(rs.next()){ // for (int i = 1; i <= count; i++) { // System.out.print(rs.getObject(i) + " "); // } // System.out.println(); // } List
 userlist = dbd.getObjectList(sql, null, User.class); for (User user : userlist) { System.out.println(user); } // String sql1 = "select * from user where userAccount=?"; // List
 params = new ArrayList(); // params.add("admin"); // User user = dbd.getOneObject(sql1, params, User.class); // System.out.println(user); dbd.closeAll(); }}

数据库表:

CREATE TABLE `user` (  `userId` int(10) NOT NULL AUTO_INCREMENT,  `userName` varchar(50) DEFAULT NULL,  `userAccount` varchar(50) NOT NULL,  `userPassword` varchar(200) NOT NULL,  PRIMARY KEY (`userId`),  UNIQUE KEY `userAccount` (`userAccount`)) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8

实体类:

package entity;public class User {	private int userId;							//用户编号	private String userName;					//用户名	private String userAccount;					//用户账号	private String userPassword;				//账号密码	public int getUserId() {		return userId;	}	public void setUserId(int userId) {		this.userId = userId;	}	public String getUserName() {		return userName;	}	public void setUserName(String userName) {		this.userName = userName;	}	public String getUserAccount() {		return userAccount;	}	public void setUserAccount(String userAccount) {		this.userAccount = userAccount;	}	public String getUserPassword() {		return userPassword;	}	public void setUserPassword(String userPassword) {		this.userPassword = userPassword;	}	@Override	public String toString() {		return "{\"id\":\"" + userId + "\",\"userName\":\"" + userName + "\",\"userAccount\":\"" + userAccount + "\",\"userPassword\":\""				+ userPassword + "\",\"status\":1}";	}	}