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

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

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

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. JAVA的驼峰和下划线互转帮助类

    实体类: import java.io.Serializable; import lombok.AllArgsConstructor; import lombok.Data; import lombo ...

  2. mysql取年、月、日、时间

    select id, phone,time,year(time),month(time), DAY(time),TIME(time) from user where phone='xxxxxx'  # ...

  3. 【转】TestNG 与 Junit的比较

    转自 http://www.blogjava.net/fanscial/archive/2005/12/14/23780.html 1.         JDK 5 Annotations (JDK ...

  4. 【TP3.2】TP3.2的 FIND_IN_SET()的用法

    1.mysql的find_in_set 用法我这里就不介绍了,很好用的一个方法. 2.TP3.2使用: $where['_string'] = 'FIND_IN_SET('."'$id'&q ...

  5. 如何开发一个基于 Docker 的 Python 应用

    前言 Python 家族成员繁多,解决五花八门的业务需求.这里将通过 Python 明星项目 IPython Notebook,使其容器化,让大家掌握基础的 Docker 使用方法. IPython ...

  6. Xcode7 运行iOS10以上系统(10.1、10.2、10.3)解决Could not find Developer Disk Image

    由于历史原因,需要在Xcode7上真机运行下app,无奈手机系统已是10.3了,一运行, 就提示:Could not find Developer Disk Image 解决办法: 1.找到xcode ...

  7. Tensorflow get_variable和Varialbe的区别

    import tensorflow as tf """ tf.get_variable()和Variable有很多不同点 * 它们对重名操作的处理不同 * 它们受name ...

  8. 深度优化LNMP之PHP

    PHP缓存加速介绍   1.操作码介绍及缓存原理     当客户端请求一个php程序时,服务器的PHP引擎会解析该PHP程序,并将其编译为特定的操作码文件(Operate Code,opcode)该文 ...

  9. [think]关于个人发展值得记住的一些建议 听别人的话,即使你不想听 不要只做不想 成功不能被复制,但失败总在不停复制。看看别人是怎么倒下的,你可以更早地成功

    [think]关于个人发展值得记住的一些建议 偶然看到一篇采访周爱民的文章,里面的一些建议虽然朴实无华,却感觉很有道理,特此记录: 记者:对于程序员的技术发展和职业规划能否给大家一些建议呢?----- ...

  10. 树莓派UFW防火墙简单设置

    ufw是一个主机端的iptables类防火墙配置工具,比较容易上手.如果你有一台暴露在外网的树莓派,则可通过这个简单的配置提升安全性. 安装方法 sudo apt-get install ufw 当然 ...