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

举报
yd_273762914 发表于 2020/12/02 23:18:28 2020/12/02
5.6k+ 0 0
【摘要】 设计模式之单例模式一般应用在在数据库操作里,数据库操作就要经常创建实例,然后进行数据库操作,所有就可以 将数据库操作的方法,进行封装,然后采用单例模式进行设计,然后采用单例模式之后,就可以节约系统资源,对于 一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能 先编写数据库配置文件config.properties host=localhostport=3306...

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

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

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

先编写数据库配置文件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-8
      		connStr = "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,然后连接数据库,调用方法就可以

文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。

原文链接:smilenicky.blog.csdn.net/article/details/50867280

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。