最近期末实训图书管理系统,发现数据中查询有许多的相同查询的方式,于是打算写成通用方法方便使用
查询数据库中所需要的字段,数据库的字段名为map的key的值 ,保存在List集合中。此处为了防止注入攻击,提高性能,所以用的PreparedStatement类来执行SQL语句。
注:遵循PreparedStatement规则 如: table_name表中有多个字段,我们需要姓名为张三的id,name的写法
String sql = "select id,name from table_name where name=?" ;
List<Map<String,Object>> queryObject(sql,new Object[]{"张三"}
代码如下:
public static List<Map<String,Object>> queryObject(String sql , Object[]st){
List<Map<String , Object>> list = new ArrayList<>() ;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
ps = conn.prepareStatement(sql);
if(st!=null && st.length>0){
for (int i = 0; i < st.length; i++) {
ps.setObject(i+1, st[i]);
}
}
rs = ps.executeQuery() ;
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next()){
Map<String , Object> map = new HashMap<>() ;
for(int i=0;i<rsmd.getColumnCount();i++){
String name = rsmd.getColumnLabel(i+1);
Object values = rs.getObject(name);
map.put(name, values);
}
list.add(map) ;
}
}catch(Exception e) {
e.printStackTrace();
//正常写法是依次获取相应的异常抛出交给上层处理
}
return list ;
}
获取数据依次遍历list数据或去map集合,从map集合中依次遍历,key值对应相应的字段名 如
查询当前字段信息存在的行数,返回0代表不存在
public static int executeQuery(String sql,Object[] obj){
Connection conn = JDBCUtils.getConnection();
PreparedStatement ps = null;
ResultSet rs = null ;
int rows = 0 ;
try {
ps = conn.prepareStatement(sql);
if(obj!=null && obj.length>0){
for (int i = 0; i < obj.length; i++) {
ps.setObject(i+1, obj[i]);
}
}
rs= ps.executeQuery() ;
while(rs.next()){
rows++;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
// 关闭资源,这里可以手动判断是否为空关闭.注:由最后使用的对象依次向前关闭,如上关闭顺序 rs-->ps
JDBCUtils.free(rs, ps, conn);
}
return rows;
}
插入数据 (0插入失败 ,1成功)
public static int executeUpdate(String sql,Object[] obj){
Connection conn = JDBCUtils.getConnection();
PreparedStatement ps = null;
int rows = 0 ;
try {
ps = conn.prepareStatement(sql);
if(obj!=null && obj.length>0){
for (int i = 1; i <= obj.length; i++) {
ps.setObject(i, obj[i-1]);
}
}
rows= ps.executeUpdate() ;
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.free(null, ps, conn);
}
return rows;
}
查询单个值 (失败返回null)
public static Object getSingleObject(String sql , Object[] obj) {
Object ob = null;
Connection conn = JDBCUtils.getConnection();
PreparedStatement ps = null;
ResultSet rs = null ;
try {
ps = conn.prepareStatement(sql);
if(obj!=null && obj.length>0){
for (int i = 0; i < obj.length; i++) {
ps.setObject(i+1, obj[i]);
}
}
rs= ps.executeQuery() ;
if(rs.next()) {
ob = rs.getObject(1) ;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.free(rs, ps, conn);
}
return ob;
}