按照自己的想法制作了一个简单的增删改查,没有深刻的诠释。
本文的重点在于查询的返回数据格式。
BaseDao.java
package com.weigeli.test.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import java.util.Vector;
import com.weigeli.test.util.DBUtil;
/**
* Dao连接数据库通用类
* @author weigeli
*
*/
public class BaseDao {
/**
* 根据SQL语句查询所有数据,以List<HashMap<String, Object>>格式存储
* @param sql
* @return vector
*/
public List<HashMap<String, Object>> fandAllData(String sql) {
List<HashMap<String, Object>> list = new ArrayList<>();
// 获取数据库连接
Connection conn = DBUtil.getConn();
Statement st = null;
ResultSet rs = null;
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
// 统计列的总数
int count = md.getColumnCount();
while (rs.next()) {
// 组装一行数据
HashMap<String, Object> lineData = new HashMap<>();
for (int i=1; i<=count; i++) {
// 获取当前列的名称
String columnName = md.getColumnName(i);
// 以Object格式装载数据
lineData.put(columnName, rs.getObject(i));
}
// 将一行数据加入到集合中
list.add(lineData);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 统一关闭数据库连接
DBUtil.closeAll(rs, st, conn);
}
// 返回结果
return list;
}
/**
* 新增表数据,返回受到影响的数据行数
* @param sql
* @return int
*/
public int insertData(String sql) {
return execSQL(sql);
}
/**
* 删除表数据,返回受到影响的数据行数
* @param sql
* @return int
*/
public int deleteData(String sql) {
return execSQL(sql);
}
/**
* 修改表数据,返回受到影响的数据行数
* @param sql
* @return int
*/
public int updateData(String sql) {
return execSQL(sql);
}
// 执行SQL语句,返回受到影响的数据行数
private int execSQL(String sql) {
int count = 0;
// 获取数据库连接
Connection conn = DBUtil.getConn();
Statement st = null;
try {
st = conn.createStatement();
count = st.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtil.closeAll(null, st, conn);
}
return count;
}
}