Jdbc封装(MySql)

来源:互联网 发布:消费积分软件 编辑:程序博客网 时间:2024/06/07 20:42

大体步骤:
1.加载Jdbc驱动(Class.forName("com.mysql.jdbc.Driver");)
2.创建Jdbc连接(conn = DriverManager.getConnection("","","");)
3.创建statement(

statement=conn.prepareStatemnet(sql);statement.setObject(i,objects[i-1]);

)
4.执行增删改 或 执行查询操作。
5.增删改返回boolean值,判断是否操作成功。
6.查询操作可分为 返回一条数据,或返回多条数据。
7.释放资源。

代码示例:

import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Jdbc {    private Connection        conn;      // 加载数据库驱动后,进行数据库连接    private PreparedStatement statement; // 连接之后构建sql语句,并执行    private ResultSet         resultSet; // 结果集,执行sql语句后,返回的结果    private static Jdbc       instance;    // 私有构造,记载jdbc驱动    private Jdbc() {        try {            Class.forName("com.mysql.jdbc.Driver");// 加载jdbc驱动        } catch (ClassNotFoundException e) {            e.printStackTrace();        }    }    // 单例模式    public static Jdbc getInstance() {        if (instance == null) {            instance = new Jdbc();        }        return instance;    }    // 创建jdbc连接    private void createConnection() {        try {            if (conn == null || conn.isClosed()) {                // Gsonadmin:工程名, root:数据库账号密码                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Gsonadmin", "root", "root");            }        } catch (SQLException e) {            e.printStackTrace();        }    }    // 创建statement    private void createStatement(String sql, Object... objects) throws SQLException {        this.createConnection();        /**         * 可以通过调用 Connection 对象的 preparedStatement() 方法获取 PreparedStatement 对象         * PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句         * PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示         */        statement = conn.prepareStatement(sql);        // 统一绑定参数        if (objects != null && objects.length > 0) {            for (int i = 1; i <= objects.length; i++) {                // 第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值.                statement.setObject(i, objects[i - 1]);            }        }    }    /**     * 执行所有增、删、改的sql操作     *      * @throws SQLException     */    public boolean executeUpdate(String sql, Object... objects) throws SQLException {        boolean flag = false;        try {            this.createStatement(sql, objects);            flag = statement.executeUpdate() > 0;        } finally {            // 释放资源            this.release();        }        return flag;    }    /**     * 返回一条记录的sql     *      * @throws SQLException     */    public Map<String, Object> executeQuery(String sql, Object... objects) throws SQLException {        Map<String, Object> row = null;        try {            this.createStatement(sql, objects); // 创建statement            resultSet = statement.executeQuery(); // 执行query操作,返回结果赋给resultSet            // 遍历resultSet            if (resultSet.next()) {                row = new HashMap<>();                ResultSetMetaData meta = resultSet.getMetaData(); // 得到结果集的结构信息,比如字段数、字段名等。                for (int i = 1; i < meta.getColumnCount(); i++) { // 得到结果集的列数                    String lable = meta.getColumnLabel(i); // 得到每列的字段名                    row.put(lable, resultSet.getObject(lable));                }            }        } finally {            this.release();        }        return row;    }    /**     * 返回多条记录的sql     *      * @throws SQLException     */    public List<Map<String, Object>> executeQueryForList(String sql, Object... objects) throws SQLException {        List<Map<String, Object>> rows = null;        try {            this.createStatement(sql, objects); // 创建statement            resultSet = statement.executeQuery(); // 执行query操作,返回结果赋给resultSet            rows = new ArrayList<>();            Map<String, Object> row;            // 遍历resultSet            while (resultSet.next()) {                row = new HashMap<>();                ResultSetMetaData meta = resultSet.getMetaData(); // 得到结果集的结构信息,比如字段数、字段名等。                for (int i = 1; i < meta.getColumnCount(); i++) { // 得到结果集的列数                    String lable = meta.getColumnLabel(i); // 得到每列的字段名                    row.put(lable, resultSet.getObject(lable));                }                rows.add(row);            }        } finally {            this.release();        }        return rows;    }    /**     * 释放资源     */    private void release() {        try {            if (resultSet != null) {                resultSet.close();            }        } catch (SQLException e) {            e.printStackTrace();        }        try {            if (statement != null) {                statement.close();            }        } catch (SQLException e) {            e.printStackTrace();        }        try {            if (conn != null) {                conn.close();            }        } catch (SQLException e) {            e.printStackTrace();        }    }}

关键:反射+泛型。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 二岁宝宝有蛀牙怎么办 3岁宝宝有蛀牙了怎么办 三岁宝宝夜惊怎么办 小班孩子跳舞不好好跳怎么办 15个月宝宝拉稀怎么办 孩子学习不认真该怎么办 孩子学习不自觉该怎么办 孩子学习压力大该怎么办 分手发信息不回怎么办 两岁宝宝不会回答问题怎么办 分手了我还想他怎么办 两岁宝宝特别不听话怎么办 2岁宝宝争东西怎么办 两岁宝宝钙吸收不好怎么办 1岁宝宝害羞胆小怎么办 2岁宝宝害羞胆小怎么办 6个月的宝宝胆小怎么办 3岁半宝宝很胆小怎么办 分手了想他了怎么办 分手了还想联系怎么办 2岁多宝宝不长肉怎么办 2个月宝宝尿裤子怎么办 四岁宝宝脾气大怎么办 两周宝宝换奶粉怎么办 两周半宝宝不喝奶粉怎么办 2岁半宝宝太调皮怎么办 2岁宝宝晚上睡觉晚怎么办 三周岁半宝宝入园后不合群怎么办 数学懒于思考的孩子怎么办 2岁宝宝爱哭不讲道理怎么办 孩子不讲道理一直哭怎么办 白天不烧晚上烧怎么办 两岁宝宝出虚汗怎么办 两岁宝宝出水痘怎么办 两岁宝宝爱看手机怎么办 两岁宝宝太好动怎么办 五岁宝宝不会数数怎么办 四岁宝宝算数不好怎么办 两个月宝宝体内有火怎么办 两个月宝宝有火怎么办 2岁宝宝起眼屎怎么办