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