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

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


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

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

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



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

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



DBHelpUtil.java:


  
  1. /**
  2. *
  3. * 数据库连接的类,配置信息保存在config.properties里
  4. *
  5. */
  6. public class DBHelperUtil {
  7. //静态成员变量,支持单态模式
  8. private static DBHelperUtil manager = null;
  9. //配置资源文件
  10. private PropertyResourceBundle bundle;
  11. //JDBC驱动
  12. private static String jdbcDriver = null;
  13. //主机
  14. private String host = "";
  15. //数据库端口
  16. private String port = "";
  17. //数据库名称
  18. private String database = "";
  19. //数据库用户名
  20. private String username = "";
  21. //数据库密码
  22. private String password ="";
  23. //数据库连接字符串
  24. private String connStr = "";
  25. //连接对象
  26. private Connection conn = null;
  27. //PrepareStatement对象
  28. private PreparedStatement pstm = null;
  29. //CallableStatement对象
  30. private CallableStatement cstm = null;
  31. /**
  32. * 私有构造对象,不可以实例化
  33. * @throws IOException
  34. */
  35. public DBHelperUtil() throws IOException{
  36. bundle = new PropertyResourceBundle(DBHelperUtil.class.getResourceAsStream("config.properties"));
  37. this.host = getString("host");
  38. this.database = getString("database");
  39. this.port = getString("port");
  40. this.username = getString("username");
  41. this.password = getString("password");
  42. jdbcDriver = "com.mysql.jdbc.Driver";
  43. //数据库连接的url,设置了编码为UTF-8
  44. connStr = "jdbc:mysql://"+host+":"+port+"/"+database+"?useUnicode=true&characterEncoding=UTF-8";
  45. }
  46. /**
  47. * 读取配置文件中的值
  48. * @param
  49. * key 配置文件的key
  50. * @return
  51. * key对应的值
  52. */
  53. private String getString(String key){
  54. return this.bundle.getString(key);
  55. }
  56. /**
  57. * 单态模式获取实例
  58. *
  59. * @return SqlManager对象
  60. * @throws IOException
  61. * @throws ClassNotFoundException
  62. */
  63. public static DBHelperUtil createInstance() throws IOException, ClassNotFoundException{
  64. if (manager == null)
  65. {
  66. manager = new DBHelperUtil();
  67. manager.initDB();
  68. }
  69. return manager;
  70. }
  71. /**
  72. * 初始化连接参数,由指定的DBType生成
  73. *
  74. * @throws ClassNotFoundException
  75. */
  76. public void initDB() throws ClassNotFoundException{
  77. Class.forName(jdbcDriver);
  78. }
  79. /**
  80. * 连接数据库
  81. * @throws SQLException
  82. */
  83. public void connectDB() throws SQLException{
  84. conn = DriverManager.getConnection(connStr,username,password);
  85. conn.setAutoCommit(false);// 设置自动提交为false
  86. }
  87. /**
  88. * 关闭数据库,释放内存
  89. * @throws SQLException
  90. */
  91. public void close() throws SQLException {
  92. if (pstm != null)
  93. {
  94. pstm.close();
  95. }
  96. if (cstm != null)
  97. {
  98. cstm.close();
  99. }
  100. if (conn != null)
  101. {
  102. conn.close();
  103. }
  104. }
  105. /**
  106. * 设置PrepareStatement对象中Sql语句中的参数
  107. * @param sql
  108. * sql语句
  109. * @param params
  110. * 参数列表
  111. * @throws SQLException
  112. */
  113. @SuppressWarnings("unused")
  114. private void setPrepareStatementParams(String sql, Object[] params) throws SQLException{
  115. pstm = conn.prepareStatement(sql); // 获取对象
  116. if (params != null)
  117. {
  118. for (int i = 0; i < params.length; i++) // 遍历参数列表填充参数
  119. {
  120. pstm.setObject(i + 1, params[i]);
  121. }
  122. }
  123. }
  124. /**
  125. * 执行查询
  126. *
  127. * @param sql
  128. * sql语句
  129. * @param params
  130. * 参数列表
  131. * @return 返回ResultSet类型的查询结果
  132. * @throws SQLException
  133. */
  134. public ResultSet executeQuery(String sql, Object[] params) throws SQLException{
  135. // 执行查询数据库接口
  136. ResultSet rs = null;
  137. manager.setPrepareStatementParams(sql, params); // 填充参数
  138. rs = pstm.executeQuery(); // 执行查询操作
  139. return rs;
  140. }
  141. /**
  142. * 更新数据库操作
  143. *
  144. * @param sql
  145. * sql语句
  146. * @param params
  147. * 参数列表
  148. * @return 执行操作的结果
  149. * @throws SQLException
  150. */
  151. public boolean executeUpdate(String sql, Object[] params)throws SQLException
  152. {
  153. // 执行无返回数据的数据查询,返回值是被改变的书库的数据库项数
  154. boolean result = false;
  155. manager.setPrepareStatementParams(sql, params); // 填充参数
  156. pstm.executeUpdate(); // 执行更新
  157. manager.commitChange();
  158. result = true;
  159. return result;
  160. }
  161. /**
  162. * 提交信息到数据库
  163. * @throws SQLException
  164. */
  165. private void commitChange() throws SQLException
  166. {
  167. conn.commit();
  168. }
  169. }


调用工具类:

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



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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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