用于jdbc 连接sqlite数据库的dao层
2018-07-20 来源:open-open
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
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
最新资讯
热门推荐