单例模式在JDBC数据库连接操作里的应用

来源:互联网 发布:lol账号出现数据异常 编辑:程序博客网 时间:2024/06/05 01:13


设计模式之单例模式一般应用在在数据库操作里,数据库操作就要经常创建实例,然后进行数据库操作,所有就可以

将数据库操作的方法,进行封装,然后采用单例模式进行设计,然后采用单例模式之后,就可以节约系统资源,对于

一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能



先编写数据库配置文件config.properties

host=localhost
port=3306
database=tourism_system
username=root
password=111



DBHelpUtil.java:

/** *  * 数据库连接的类,配置信息保存在config.properties里 * */public class DBHelperUtil {//静态成员变量,支持单态模式private static DBHelperUtil manager = null;//配置资源文件private PropertyResourceBundle bundle;//JDBC驱动private static String jdbcDriver = null;//主机private String host = "";//数据库端口private String port = "";//数据库名称private String database = "";//数据库用户名private String username = "";//数据库密码private String password ="";//数据库连接字符串private String connStr = "";//连接对象private Connection conn = null;//PrepareStatement对象private PreparedStatement pstm = null;//CallableStatement对象private CallableStatement cstm = null;/** * 私有构造对象,不可以实例化 * @throws IOException */public DBHelperUtil() throws IOException{bundle = new PropertyResourceBundle(DBHelperUtil.class.getResourceAsStream("config.properties"));this.host = getString("host");this.database = getString("database");this.port = getString("port");this.username = getString("username");this.password = getString("password");jdbcDriver = "com.mysql.jdbc.Driver";//数据库连接的url,设置了编码为UTF-8connStr = "jdbc:mysql://"+host+":"+port+"/"+database+"?useUnicode=true&characterEncoding=UTF-8";}/** * 读取配置文件中的值 * @param  * key 配置文件的key * @return  * key对应的值 */private String getString(String key){return this.bundle.getString(key);}/** * 单态模式获取实例 *  * @return SqlManager对象 * @throws IOException * @throws ClassNotFoundException  */public static DBHelperUtil createInstance() throws IOException, ClassNotFoundException{if (manager == null){manager = new DBHelperUtil();manager.initDB();}return manager;}/** * 初始化连接参数,由指定的DBType生成 *  * @throws ClassNotFoundException */public void initDB() throws ClassNotFoundException{Class.forName(jdbcDriver);}/** * 连接数据库 * @throws SQLException */public void connectDB() throws SQLException{conn = DriverManager.getConnection(connStr,username,password);conn.setAutoCommit(false);// 设置自动提交为false}                                                                                                                        /** * 关闭数据库,释放内存 * @throws SQLException */public void close() throws SQLException  {if (pstm != null){pstm.close();}if (cstm != null){cstm.close();}if (conn != null){conn.close();}}                                                                                                                        /** * 设置PrepareStatement对象中Sql语句中的参数 * @param sql * sql语句 * @param params * 参数列表 * @throws SQLException */@SuppressWarnings("unused")private void setPrepareStatementParams(String sql, Object[] params) throws SQLException{pstm = conn.prepareStatement(sql); // 获取对象if (params != null){for (int i = 0; i < params.length; i++) // 遍历参数列表填充参数{pstm.setObject(i + 1, params[i]);}}}/** * 执行查询 *  * @param sql *            sql语句 * @param params *            参数列表 * @return 返回ResultSet类型的查询结果 * @throws SQLException */public ResultSet executeQuery(String sql, Object[] params) throws SQLException{// 执行查询数据库接口ResultSet rs = null;manager.setPrepareStatementParams(sql, params); // 填充参数rs = pstm.executeQuery(); // 执行查询操作return rs;}/** * 更新数据库操作 *  * @param sql *            sql语句 * @param params *            参数列表 * @return 执行操作的结果 * @throws SQLException */public boolean executeUpdate(String sql, Object[] params)throws SQLException {// 执行无返回数据的数据查询,返回值是被改变的书库的数据库项数boolean result = false;manager.setPrepareStatementParams(sql, params); // 填充参数pstm.executeUpdate(); // 执行更新manager.commitChange();result = true;return result;}/** * 提交信息到数据库 * @throws SQLException */private void commitChange() throws SQLException{conn.commit();}}


调用工具类:

先创建实例,createInstance,然后连接数据库,调用方法就可以





2 0
原创粉丝点击