设计模式之单例模式一般应用在在数据库操作里,数据库操作就要常常创建实例,然后进行数据库操作,全部就能够

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

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

调用工具类:

先创建实例,createInstance。然后连接数据库。调用方法就能够




单例模式在JDBC数据库连接操作里的应用的更多相关文章

  1. JDBC 数据库连接操作——实习第三天

    今天开始了比较重量级的学习了,之前都是对于Java基础的学习和回顾.继续上篇的话题,<谁动了我的奶酪>,奉献一句我觉得比较有哲理的话:"学会自嘲了,而当人们学会自嘲,能够嘲笑自己 ...

  2. java JDBC数据库连接操作

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public clas ...

  3. Java jdbc数据库连接池总结!(转)

    1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的 ...

  4. jdbc数据库连接过程及驱动加载与设计模式详解

    首先要导入JDBC的jar包:接下来,代码:Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就 ...

  5. JAVA采用JDBC连接操作数据库详解

    JDBC连接数据库概述 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...

  6. 使用JDBC连接操作数据库

    JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和接口组成. JDBC ...

  7. 深入浅出学习Hibernate框架(二):JDBC基础操作

    上篇博客<深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架>简单介绍了一下Hibernate框架,并且举了一个实例来了解Hibernate.这篇博客将介绍JD ...

  8. JAVA基础知识之JDBC——JDBC数据库连接池

    JDBC数据库连接池 数据库的连接和关闭是很耗费资源的操作,前面介绍的DriverManager方式获取的数据库连接,一个Connection对象就对应了一个物理数据库连接,每次操作都要打开一个连接, ...

  9. JDBC连接数据库操作

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

随机推荐

  1. Error:Failed to resolve: android.arch.core:common:1.1.0

    build. gradle(project)中 allprojects { repositories { jcenter() maven { url 'https://jitpack.io' } ma ...

  2. Flash:移除匿名函数监听器EventListener

    private function handleCreationComplete():void { sampleButton.addEventListener(MouseEvent.CLICK, cre ...

  3. java.lang.NoClassDefFoundError: Ljavax/transaction/TransactionManager

    网上下载一个 jta.jar包 放到项目 的WebRoot 的lib文件夹下,解决.

  4. django之创建第9个项目-管理后台admin

    django之创建第9个项目-管理后台admin配置 1.配置setting文件INSTALLED_APPS = (    'django.contrib.auth',    'django.cont ...

  5. OPML文件

    # -*- coding: cp936 -*-#python 27#xiaodeng#OPML文件 #大纲处理标记语言其实建立在颗脱战标记语言之上的标记语言#也叫文件扩展名#是建立在XML之上的一种文 ...

  6. XPages访问关系型数据库技术与最佳实践

    XPage 对于 Domino 开发人员的一大好处就是能够很方便和高效的访问关系型数据库.本文通过实例代码展现了在 XPage 中访问关系型数据库的具体步骤 , 同时讲解了一些在 XPage 中高效访 ...

  7. Android 控件进阶修炼-仿360手机卫士波浪球进度控件

    技术:Android+java   概述 像360卫士的波浪球进度的效果,一般最常用的方法就是 画线的方式,先绘sin线或贝塞尔曲线,然后从左到右绘制竖线,然后再裁剪圆区域. 今天我这用图片bitma ...

  8. ios中非ARC项目中引用ARC文件

    下图即可 选中工程->TARGETS->相应的target然后选中右侧的“Build Phases”,向下就找到“Compile Sources”了.如何在未使用arc的工程中引入一个使用 ...

  9. [抄]OKR

    OKR是Objective Key Result KPI是KeyPointIndicator OKR概览 OKR是一个目标管理工具.即目标与关键成果法,是一套明确和跟踪目标及其完成情况的管理工具和方法 ...

  10. 更新卡片的zIndex

    问题描述 屏幕上有若干张互相重叠的卡片,用户每点击一张卡片,就要把这张卡片的移到最上面,也就是把它的zIndex置为最大值.应该如何操作每个卡片的zIndex才能实现? 实现方案一 定义一个全局变量g ...