单例模式在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 ...
随机推荐
- Code Review学习笔记
一:Code Review的必要性 代码审查,可以帮助他人发现不足,也可以促进自己培养良好的编程习惯. 自我代码审查,可以在编码完成之后,对自己的代码进行整理,发现“味道不好”的代码,作进一步的调整. ...
- Android学习笔记二:activity的理解
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7513290.html 一:activity定义了app的页面 一个app有很多个页面组成,一个页面其实就是一个 ...
- ETL面试题
1. What is a logical data mapping and what does it mean to the ETL team? 什么是逻辑数据映射?它对ETL项目组的作用是什么? 答 ...
- HttpServletResponse对象(一)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...
- jenkins关闭和重启
我们用jar -jar jenkins.war来启动jenkins服务器,那么我们如何关闭或者重启jenkins服务器呢?经过搜索找到了相应的方法. 关闭jenkins服务 只需要在访问jenkins ...
- Ubuntu18.04下使用Blender进行视频格式转换
Ubuntu下可以使用Blender的Video Editing功能进行视频格式转换, 具体步骤: 打开Blender后, 在顶层菜单栏中, 将Choose Screen Layout修改为Video ...
- ios中网络请求缓存
#import <Foundation/Foundation.h> #import "ASIFormDataRequest.h" @protocol NetWorkde ...
- vim 可视化模式(visual模式)
转文章 为了便于选取文本,VIM 引入了可视(Visual)模式. 要选取一段文本,首先将光标移到段首,在普通模式下按 v 进入可视模式,然后把光标移到段末. 需要注意,光标所在字符是包含在选区中的 ...
- Linux安装最新版Mono,Jexus(截至2015年12月30日)
安装系统必备: yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-dev ...
- Linux下使用Nexus搭建Maven私服
在开发过程中,有时候会使用到公司内部的一些开发包,显然把这些包放在外部是不合适的.另外,由于项目一直在开发中,这些内部的依赖可能也在不断的更新.可以通过搭建公司内部的Maven服务器,将第三方和内部的 ...