CSDNRGY 2017-02-22 08:56 采纳率: 87.5%
浏览 1468
已采纳

封装了一个jdbc,这个jdbc中的close方法为什么可以关闭Connection对象?

 public class Jdbc {

    private Connection conn;
    private ResultSet rs;
    private ResultSetMetaData md;
    private PreparedStatement ps;
    private Properties prop;
    private String url;
    private String user;
    private String psw;
    private List<Map<String,Object>> list;
    private Map<String,Object> map;
    private Integer flg;
    private FileInputStream fis;
    private String jdbcPath = "src/jdbc.properties";

    //测试代码
    public static void main(String[] args)  {
        Jdbc jdbc = new Jdbc();
        try {
            jdbc.open();
            String sql = "select * from GC_EXAMTYPE t where t.examtype_id= ?  or examtype_id=?";
            List<Map<String, Object>> query = jdbc.query(sql,5,6);
            System.out.println(query);
            String inser_sql = "insert into test (id, name) values (?, ?)";
            Integer add_flg = jdbc.add(inser_sql, 2,2);
            System.out.println(add_flg);
            String mod_sql = "update test set name = ? where id=?";
            Integer mod_flg =jdbc.mod(mod_sql, 2,1);
            System.out.println(mod_flg);
            String del_sql = "delete test where id=?";
            Integer del_flg =jdbc.del(del_sql, 1);
            System.out.println(del_flg);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            /*
             * 我最大的疑惑就在这里,这里我并没有告诉计算机,应该关闭某个对象
             * 我就是直接写了一个close方法
             * 例如100个人同时使用这个代码
             * 计算机是怎么知道该关闭哪个对象的
             * 或者说,我这段代码本身就是有问题的
             */
            jdbc.close();
        }
    }
    /**
     * 连接数据库
     * @throws Exception
     */
    public void open() throws Exception{
        fis = new FileInputStream(jdbcPath);
        prop = new Properties();
        prop.load(fis);
        url = prop.getProperty("db.url");
        user = prop.getProperty("db.user");
        psw = prop.getProperty("db.password");
        Class.forName(prop.getProperty("driverClass"));
        conn = DriverManager.getConnection(url, user, psw);
    }
    /**
     * 关闭连接
     */
    public void close() {
        try {
            if(ps!=null) ps.close();
            if(rs!=null) rs.close();
            if(conn!=null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
    /**
     * 执行dml语句
     * @param sql dml语句
     * @param objs 参数
     * @return 0失败 1成功
     * @throws SQLException sql异常
     */
    public int dml(String sql, Object... objs) throws SQLException {
        ps = conn.prepareStatement(sql);
        for (int i = 0; i < objs.length; i++) {
            ps.setObject(i+1, objs[i]);
        }
        flg = ps.executeUpdate();
        return flg;
    }
    /**
     * 执行查询语句
     * @param sql 查询语句
     * @param objs 参数
     * @return 查询结果
     * @throws SQLException sql异常
     */
    public List<Map<String,Object>> query(String sql,Object...objs) throws SQLException{
        list = new ArrayList<>();
        ps = conn.prepareStatement(sql);
        for (int i = 0; i < objs.length; i++) {
            ps.setObject(i+1, objs[i]);
        }
        rs = ps.executeQuery();
        md = rs.getMetaData();
        while (rs.next()) {
            map = new HashMap<>();
            for (int i = 1; i <= md.getColumnCount(); i++) {
                String key = md.getColumnName(i);
                Object value = rs.getObject(i);
                map.put(key, value);
            }
            list.add(map);
        }
        return list;
    }
    /**
     * 添加数据
     * @param sql 添加语句
     * @param objs 参数
     * @return 0失败 1成功
     * @throws SQLException sql异常
     */
    public int add(String sql,Object...objs) throws SQLException {
        flg = dml(sql, objs);
        return flg;
    }
    /**
     * 修改数据
     * @param sql 修改语句
     * @param objs 参数
     * @return 0失败 1成功
     * @throws SQLException sql异常
     */
    public int mod(String sql,Object...objs) throws SQLException{
        flg = dml(sql, objs);
        return flg;
    }
    /**
     * 删除数据
     * @param sql 删除语句
     * @param objs 参数
     * @return 0失败 1成功
     * @throws SQLException sql异常
     */
    public int del(String sql,Object...objs) throws SQLException{
        flg = dml(sql, objs);
        return flg;
    }
}
  • 写回答

1条回答 默认 最新

  • 小七-001 2017-02-22 08:57
    关注

    100个使用,100个人都new了自己的jdbc,自己管自己

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决
  • ¥15 关于华为5g模块mh5000-31接线问题
  • ¥15 keil L6007U报错
  • ¥15 webapi 发布到iis后无法访问
  • ¥15 初学者如何快速上手学习stm32?
  • ¥15 如何自动更换布娃娃图片上的衣服
  • ¥15 心理学eprime编程
  • ¥15 arduino esp8266开发