用于jdbc 連接sqlite數據庫的dao層
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); } }
本文由用戶 cyjjkz1 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!