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