单例模式在JDBC数据库连接操作里的应用
设计模式之单例模式一般应用在在数据库操作里,数据库操作就要常常创建实例,然后进行数据库操作,全部就能够
将数据库操作的方法。进行封装,然后採用单例模式进行设计,然后採用单例模式之后,就能够节约系统资源。对于
一些须要频繁创建和销毁的对象单例模式无疑能够提高系统的性能
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:
- /**
- *
- * 数据库连接的类。配置信息保存在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。然后连接数据库。调用方法就能够
单例模式在JDBC数据库连接操作里的应用的更多相关文章
- JDBC 数据库连接操作——实习第三天
今天开始了比较重量级的学习了,之前都是对于Java基础的学习和回顾.继续上篇的话题,<谁动了我的奶酪>,奉献一句我觉得比较有哲理的话:"学会自嘲了,而当人们学会自嘲,能够嘲笑自己 ...
- java JDBC数据库连接操作
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public clas ...
- Java jdbc数据库连接池总结!(转)
1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的 ...
- jdbc数据库连接过程及驱动加载与设计模式详解
首先要导入JDBC的jar包:接下来,代码:Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就 ...
- JAVA采用JDBC连接操作数据库详解
JDBC连接数据库概述 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...
- 使用JDBC连接操作数据库
JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和接口组成. JDBC ...
- 深入浅出学习Hibernate框架(二):JDBC基础操作
上篇博客<深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架>简单介绍了一下Hibernate框架,并且举了一个实例来了解Hibernate.这篇博客将介绍JD ...
- JAVA基础知识之JDBC——JDBC数据库连接池
JDBC数据库连接池 数据库的连接和关闭是很耗费资源的操作,前面介绍的DriverManager方式获取的数据库连接,一个Connection对象就对应了一个物理数据库连接,每次操作都要打开一个连接, ...
- JDBC连接数据库操作
JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...
随机推荐
- Error:Failed to resolve: android.arch.core:common:1.1.0
build. gradle(project)中 allprojects { repositories { jcenter() maven { url 'https://jitpack.io' } ma ...
- Flash:移除匿名函数监听器EventListener
private function handleCreationComplete():void { sampleButton.addEventListener(MouseEvent.CLICK, cre ...
- java.lang.NoClassDefFoundError: Ljavax/transaction/TransactionManager
网上下载一个 jta.jar包 放到项目 的WebRoot 的lib文件夹下,解决.
- django之创建第9个项目-管理后台admin
django之创建第9个项目-管理后台admin配置 1.配置setting文件INSTALLED_APPS = ( 'django.contrib.auth', 'django.cont ...
- OPML文件
# -*- coding: cp936 -*-#python 27#xiaodeng#OPML文件 #大纲处理标记语言其实建立在颗脱战标记语言之上的标记语言#也叫文件扩展名#是建立在XML之上的一种文 ...
- XPages访问关系型数据库技术与最佳实践
XPage 对于 Domino 开发人员的一大好处就是能够很方便和高效的访问关系型数据库.本文通过实例代码展现了在 XPage 中访问关系型数据库的具体步骤 , 同时讲解了一些在 XPage 中高效访 ...
- Android 控件进阶修炼-仿360手机卫士波浪球进度控件
技术:Android+java 概述 像360卫士的波浪球进度的效果,一般最常用的方法就是 画线的方式,先绘sin线或贝塞尔曲线,然后从左到右绘制竖线,然后再裁剪圆区域. 今天我这用图片bitma ...
- ios中非ARC项目中引用ARC文件
下图即可 选中工程->TARGETS->相应的target然后选中右侧的“Build Phases”,向下就找到“Compile Sources”了.如何在未使用arc的工程中引入一个使用 ...
- [抄]OKR
OKR是Objective Key Result KPI是KeyPointIndicator OKR概览 OKR是一个目标管理工具.即目标与关键成果法,是一套明确和跟踪目标及其完成情况的管理工具和方法 ...
- 更新卡片的zIndex
问题描述 屏幕上有若干张互相重叠的卡片,用户每点击一张卡片,就要把这张卡片的移到最上面,也就是把它的zIndex置为最大值.应该如何操作每个卡片的zIndex才能实现? 实现方案一 定义一个全局变量g ...