Java JDBC数据库通用方法

本文介绍了一种用于期末实训图书管理系统的通用数据库查询方法,通过使用PreparedStatement执行SQL语句,有效防止了SQL注入攻击并提高了查询效率。文中详细展示了如何利用Java进行数据库连接、参数设置、结果集处理等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近期末实训图书管理系统,发现数据中查询有许多的相同查询的方式,于是打算写成通用方法方便使用


查询数据库中所需要的字段,数据库的字段名为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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值