用于jdbc 连接sqlite数据库的dao层

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

c3p0部分配置    

package com.jht.navigate;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
	private static ComboPooledDataSource ds = new ComboPooledDataSource();

	static {
		try {
			Class.forName("org.sqlite.JDBC");
			String path = C3P0Utils.class.getResource("/").getPath();
			ds.setJdbcUrl("jdbc:sqlite:" + path + "test.db");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 打开数据库连接
	 */
	public static Connection openConnection() {
		Connection conn = null;
		try {
			conn = ds.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	/**
	 * 关闭数据库
	 */
	public static void closeAll(Connection con, Statement stmt, ResultSet rs) {
		try {
			if (con != null) {
				con.close();
			}
			if (stmt != null) {
				stmt.close();
			}
			if (rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

dao接口    

package com.jht.navigate;

import java.util.List;

/**
 * @author chmin<br>
 * @time 2016年1月23日 上午9:35:51<br>
 */
public interface IBaseDao<T> {

	// 保存实体
	boolean add(T t);

	// 删除实体
	boolean remove(T t);

	// 根据id删除
	boolean remove(int id);

	// 更新实体数据
	boolean update(T t);

	// 添加或更新,有则更新,无则添加
	boolean addOrUpdate(T t);

	// 用id获取一个实体
	T getObjectById(int id);

	// 用khdm获取一个实体
	T getObjectByName(String khdm);

	// 自定义获取一个实体
	T getObject(String sql, Object[] parameters);

	// 自定义获取一个集合
	List<T> getObjects(String sql, Object[] parameters);

	// 根据khdm返回集合
	List<T> getObjectsByName(String khdm);

	// 获取所有实体
	List<T> getObjects();
}

[代码]dao辅助(需要jdk7)    

package com.jht.navigate;

import java.lang.reflect.Method;
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;

/**
 * @author chmin<br>
 * @time 2016年1月23日 上午9:41:43<br>
 */
public class DaoHandle {

	/**
	 * 更新和删除
	 * @param sql
	 * @param parameters
	 * @return
	 */
	public static int executeUpdate(String sql, Object[] parameters) {
		return execute(sql, parameters, 0);
	}
	
	/**
	 * 添加
	 * @param sql
	 * @param parameters
	 * @return
	 */
	public static int insert(String sql, Object[] parameters) {
		return execute(sql, parameters, 1);
	}
	
	/**
	 * 执行增删改
	 * @param sql
	 * @param parameters
	 * @param type 0为删改,1为增加
	 * @return
	 */
	private static int execute(String sql, Object[] parameters, int type){
		Connection con = C3P0Utils.openConnection();
		int count = 0;
		if (con != null) {
			try (PreparedStatement ps = con.prepareStatement(sql);) {
				for (int i = type + 1; i <= parameters.length + type; i++) {
					ps.setObject(i, parameters[i - (1 + type)]);
				}
				count = ps.executeUpdate();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				C3P0Utils.closeAll(con, null, null);
			}
		}
		return count;
	}

	/**
	 * 执行查询,并将值反射到bean
	 * @param sql
	 * @param parameters
	 * @param clazz
	 * @return
	 */
	public static <T> List<T> select(String sql, Object[] parameters, Class<T> clazz) {
		List<T> list = new ArrayList<T>();
		Connection conn = C3P0Utils.openConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			ps = conn.prepareStatement(sql);
			if(parameters != null){
				for (int i = 1; i <= parameters.length; i++) {
					ps.setObject(i, parameters[i - 1]);
				}
			}
			// 执行查询方法
			rs = ps.executeQuery();
			ResultSetMetaData rsmd = rs.getMetaData();
			List<String> columnList = new ArrayList<String>();
			for (int i = 0; i < rsmd.getColumnCount(); i++) {
				columnList.add(rsmd.getColumnName(i + 1));
			}
			// 循环遍历记录
			while (rs.next()) {
				// 创建封装记录的对象
				T obj = clazz.newInstance();
				// 遍历一个记录中的所有列
				for (int i = 0; i < columnList.size(); i++) {
					// 获取列名
					String column = columnList.get(i);
					// 根据列名创建set方法
					String setMethd = "set" + column.substring(0, 1).toUpperCase() + column.substring(1);
					// 获取clazz中所有方法对应的Method对象
					Method[] ms = clazz.getMethods();
					// 循环遍历ms
					for (int j = 0; j < ms.length; j++) {
						// 获取每一个method对象
						Method m = ms[j];
						// 判断m中对应的方法名和数据库中列名创建的set方法名是否形同
						if (m.getName().equals(setMethd)) {
							// 反调set方法封装数据
							m.invoke(obj, rs.getObject(column));// 获取rs中对应的值,封装到obj中
							break; // 提高效率
						}
					}
				}
				list.add(obj);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			C3P0Utils.closeAll(conn, ps, rs);
		}
		return list;
	}
}

[代码]dao impl层    

package com.jht.navigate;

import java.util.List;

/**
 * @author chmin<br>
 * @time 2016年1月23日 上午9:39:49<br>
 */
public class ClientInfoDao implements IBaseDao<Clientinfo> {
	/**
	 * 方便使用dao
	 */
	public static ClientInfoDao dao = new ClientInfoDao();

	/**
	 * 保存实体
	 */
	@Override
	public boolean add(Clientinfo t) {
		String sql = "insert into tb_clientinfo values (?,?,?,?,?)";
		Object[] parameters = new Object[]{t.getKhdm(), t.getCmpyname(), t.getPhone(), t.getAddr()};
		return DaoHandle.insert(sql, parameters) == 1 ? true : false;
	}

	/**
	 * 删除实体
	 */
	@Override
	public boolean remove(Clientinfo t) {
		return remove(t.getId());
	}

	/**
	 * 删除实体
	 */
	@Override
	public boolean remove(int id) {
		String sql = "delete from tb_wxnavinfo where khdm = (select khdm from tb_clientinfo where id = ?)";
		Object[] parameters = new Object[]{id};
		DaoHandle.executeUpdate(sql, parameters);
		sql = "delete from tb_clientinfo where id = ?";
		return DaoHandle.executeUpdate(sql, parameters) == 1 ? true : false;
	}

	/**
	 * 更新
	 */
	@Override
	public boolean update(Clientinfo t) {
		String sql = "update tb_clientinfo khdm = ?, cmpyname = ?, phone = ?, addr = ? where id = ?";
		Object[] parameters = new Object[]{t.getKhdm(), t.getCmpyname(), t.getPhone(), t.getAddr(), t.getId()};
		return DaoHandle.executeUpdate(sql, parameters) == 1 ? true : false;
	}

	@Override
	public boolean addOrUpdate(Clientinfo t) {
		if (getObjectByName(t.getKhdm()) == null) {
			return add(t);
		} else {
			return update(t);
		}
	}

	@Override
	public Clientinfo getObjectById(int id) {
		String sql = "select * from tb_clientinfo where id = ?";
		Object[] parameters = new Object[]{id};
		return getObject(sql, parameters);
	}

	@Override
	public Clientinfo getObject(String sql, Object[] parameters) {
		List<Clientinfo> list = DaoHandle.select(sql, parameters, Clientinfo.class);
		return list == null ? null : list.get(0);
	}

	@Override
	public Clientinfo getObjectByName(String khdm) {
		String sql = "select * from tb_clientinfo where khdm = ?";
		Object[] parameters = new Object[]{khdm};
		return getObject(sql, parameters);
	}

	@Override
	public List<Clientinfo> getObjectsByName(String khdm) {
		String sql = "select * from tb_clientinfo where khdm = ?";
		Object[] parameters = new Object[]{khdm};
		return getObjects(sql, parameters);
	}

	@Override
	public List<Clientinfo> getObjects() {
		String sql = "select * from tb_clientinfo order by id desc";
		Object[] parameters = new Object[]{};
		return getObjects(sql, parameters);
	}

	@Override
	public List<Clientinfo> getObjects(String sql, Object[] parameters) {
		return DaoHandle.select(sql, parameters, Clientinfo.class);
	}
}

标签: 代码 数据库

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:STL_算法_Heap算法(堆排)(精)

下一篇:python图像数组操作与灰度变换