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

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

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

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数据库连接操作里的应用的更多相关文章

  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. sqlserver 表中记录生成insert,可以加条件,可以生成建表语句

    sqlserver 表中记录生成insert,可以加条件,可以生成建表语句 create PROCEDURE [sp_getinsert] ( ) , --如果非默认架构,可以加上架构名 例如:sch ...

  2. Apache禁止显示目录结构

    打开文件:httpd-vhosts.conf: 禁止显示Apache目录列表-Indexes FollowSymLinks如何修改目录的配置以禁止显示 Apache 目录列表.缺省情况下如果你在浏览器 ...

  3. 〖Android〗JDK7签名apk出现INSTALL_PARSE_FAILED_NO_CERTIFICATES的解决方法

    由于某项需求,把JDK版本从JDK6升级到了JDK7: 但是签名APK之后出现了INSTALL_PARSE_FAILED_NO_CERTIFICATES的错误: 解决方法: 在签名时,添加参数 -di ...

  4. COUNTA函数功能是返回参数列表中非空值的单元格个数

    COUNTA:返回参数列表中非空值的单元格个数

  5. API返回错误信息的最佳实践

    使用HTTP Status区分不同消息返回 最基础的三个状态200 OK, 400 Client Error, 500 Server Error 这些应该是够的, 如果客户端可以处理更细的划分, 可以 ...

  6. Uva10161 Ant on a Chessboard

    Uva10161 Ant on a Chessboard 10161 Ant on a Chessboard One day, an ant called Alice came to an M*M c ...

  7. Axure快速原型教程01--原型说明下载和安装

          Axure是一个快速画原型的工具         什么是原型?         估计进来的朋友应该都清楚,原型通俗来讲,不仅仅是在软件开发中使用,在很多行业中也需要用的,比如服装设计,建筑 ...

  8. StompClient的包装类

    为了简化MQ调用,写了个StompClient的包装类,可以供需要的参考: unit FStompClient; interface uses SysUtils, Windows, Messages, ...

  9. [Spring学习笔记 4 ] AOP 概念原理以及java动态代理

    一.Spring IoC容器补充(1) Spring IoC容器,DI(依赖注入): 注入的方式:设值方法注入setter(属性注入)/构造子注入(构造函数传入依赖的对象)/字段注入Field(注解) ...

  10. java 实现唯一ID生成器

      2014-11-08 内容存档在evernote,笔记名"java 实现唯一ID生成器"