- 浏览: 75351 次
文章分类
最新评论
database.properties :--->
jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.connection.url=jdbc:mysql://127.0.0.1:3306/news?useUnicode=true$characterEncoding=utf8-8
jdbc.connection.username=root
jdbc.connection.password=1234
========单例模式=========:运行期间有且仅有一个实例
关键点:
- 一个类只有一个实例---最基本的--(只提供私有的构造器)
- 它必须自行创建这个实例--(定义了静态的该类的私有对象)
- 它必须自行向整个系统提供这个实例--(提供一个静态的公有的方法,返回创建或者获取本身的静态私有对象)
-----------------------------------------------------------
懒汉模式:(线程不安全,在并发环境下,很有可能会出现多个configManager实列------
-----------需要考虑同步 1、方法体加同步 synchronized 2、双重校验锁)
在类加载的时候,不创建实例,运行调用的时候创建。
优点:类加载快
缺点:效率低,在运行时获取对象速度慢
-----------------------------------------------------------
饿汉模式:(线程安全)
在类加载的时候,就完成初始化。
所以类加载慢,但是在运行时获取对象快
1.如这种写法
private static ConfigManager configManager2 = new ConfigManager();
2. 或者这样写
private static ConfigManager configManager; static(){ configManager = new ConfigManager(); }
3.如果有要求需要实现延迟加载,通过静态内部类;
保证类加载的速度
--(外部调用 test()方法时,静态内部类实现了延时加载)
public class Singleton { //静态内部类 lazy loading private static Singleton singleton; private Singleton(){} private static class SingletonHelper{ private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance(){ return SingletonHelper.INSTANCE; } public static void test(){ System.out.println("test===" + singleton.toString()); } }
----------------------------------------------------------------------
-----------------------------------------------------------------------
package cn.news.util; import java.io.IOException; import java.io.InputStream; import java.util.Properties; //读取配置文件的工具类--单例模式 public class ConfigManager { //读取配置文件properties.load(inputstream); private static ConfigManager configManager; private static Properties properties; private ConfigManager(){ String configFile="database.properties"; properties = new Properties(); InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile); try { properties.load(is); is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static ConfigManager getInstance(){ if(configManager==null){ configManager = new ConfigManager(); } return configManager ; } //取得key对应的value; public String getString(String key){ return properties.getProperty(key); } }
================================================================================
=================================================================================
package com.news.util; import java.io.InputStream; import java.util.Properties; /** * * *读取配置文件的工具类---单列模式---懒汉模式--延迟加载 * * 步骤: * * 1.创建私有的构造器,进行配置文件的读取 * 2.创建全局访问点,通过单列模式设置实列化的个数,返回configManager实列 * 3.通过key获得对应的value */ public class ConfigManager { private static ConfigManager configManager; private static Properties properties;//Properties用来操作properties文件 //私有的构造器,进行配置文件的读取 private ConfigManager(){ String configFile="jdbc.properties"; properties=new Properties(); try { //通过classpath找资源 //在当前类所在包的根目录下找到相应的configFile文件 //getClassLoader()返回类加载器 //getResourceAsStream(configFile)返回InputStream对象 InputStream is=ConfigManager.class.getClassLoader().getResourceAsStream(configFile); properties.load(is);//读取配置文件 is.close(); } catch (Exception e) { // TODO: handle exception } } /* *线程不安全,在并发环境下,很有可能会出现多个configManager实列 *需要考虑同步 , 可以加同步锁 synchronized * 懒汉模式 (线程不安全--解决办法1.方法体加同步锁synchronized 2.双重校验锁) * 在类加载的时候不创建实列,运行的时候创建。 * 优点:类加载快 * 缺点:效率低,在运行时获取对象速度慢 * * */ //全局访问点 //通过单列模式设置实列化的个数 public static synchronized ConfigManager getInstance(){ if (configManager==null) { configManager=new ConfigManager(); } return configManager; } //通过key获得对应的value public String getValue(String key){ return properties.getProperty(key); } /*//双重校验锁 public static ConfigManager getInstance(){ if (cManager==null) { synchronized(ConfigManager.class){ if (cManager==null) { cManager=new ConfigManager(); } } } return cManager; }*/ }
===================================================================================================
===================================================================================================
package com.news.util; import java.io.InputStream; import java.util.Properties; /** * 单列模式---饿汉模式:(线程安全) 在类加载的时候,就完成初始化。所以类加载慢,但在运行时获取对象快 */ public class ConfigManager2 { //类加载的时候,自动进行初始化 private static ConfigManager2 configManager2=new ConfigManager2(); private static Properties properties; //私有的构造器 private ConfigManager2(){ String configFile="database.properties"; properties=new Properties(); try { //通过classpath找资源 //在当前类所在包的根目录下找到相应的configFile文件 InputStream is=ConfigManager.class.getClassLoader().getResourceAsStream(configFile); properties.load(is); is.close(); } catch (Exception e) { } } //全局访问点 public static ConfigManager2 getInstance(){ return configManager2; } public String getValue(String key){ return properties.getProperty(key); } }
--------------------------------------------------------------------------------------------------------------------------------------
上面的工具类用在JDBC连接数据库时,工具类创建configManager实列,通过configManager实列获取数据库连接。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.util.ConfigManager; /* * 操作数据库的基类---静态类 * * 方法: * 1.获取数据库连接:public static Connection getConnection() * 步骤: * 获取porperties文件,的value值 * 加载类的驱动 * 获取连接 * 返回连接 * * 2.查询操作:public static ResultSet execute(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet,String sql,Object[] params) throws SQLException 步骤: 执行SQL 接收结果集 返回结果集 3.更新操作: public static int execute(Connection connection,PreparedStatement preparedStatement,String sql,Object[] params) throws Exception 步骤: 执行SQL 接收影响的行数 返回影响的行数 4.关闭资源:public static boolean closeResource(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet) * 步骤: * 关闭资源 * GC回收 * 返回falg */ public class BaseDao { //获取数据库连接 public static Connection getConnection(){ String driver=ConfigManager.getInstance().getValue("driver"); String url=ConfigManager.getInstance().getValue("url"); String username=ConfigManager.getInstance().getValue("username"); String password=ConfigManager.getInstance().getValue("password"); Connection connection=null; //类加载 try { Class.forName(driver); connection=DriverManager.getConnection(url,username,password); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return connection; } //关闭资源 public static boolean closeResource(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet){ boolean flag=true; if (resultSet!=null) { try { resultSet.close(); resultSet=null;//GC回收 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); flag=false; } } if (preparedStatement!=null) { if (preparedStatement!=null) { try { preparedStatement.close(); preparedStatement=null;//GC回收 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); flag=false; } } if (connection!=null) { try { connection.close(); connection=null;//GC回收 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); flag=false; } } } return flag; } //查询操作 public static ResultSet execute(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet,String sql,Object[] params) throws SQLException{//dao层的异常要抛出,在service层接收 preparedStatement=connection.prepareStatement(sql); for (int i = 0; i < params.length; i++) { preparedStatement.setObject(i+1, params[i]); } resultSet=preparedStatement.executeQuery(); return resultSet; } //更新操作 public static int execute(Connection connection,PreparedStatement preparedStatement,String sql,Object[] params) throws Exception{ int updateRows=0; preparedStatement=connection.prepareStatement(sql); for (int i = 0; i < params.length; i++) { preparedStatement.setObject(i+1, params[i]); } updateRows=preparedStatement.executeUpdate(); return updateRows; } }
发表评论
-
关于jdbc
2016-09-27 14:55 0一、如果我这 ... -
JDBC与JNDI这两种连接方式有什么区别?
2016-09-18 10:44 459jdbc是数据库中间代理商为了是java连接数据库而定的一个 ... -
网页代码中用<%=request.getContextPath()%>和不用的区别?
2016-09-14 12:50 502request.getContextPath()应该是得到项目 ... -
CKEditor 文本域编辑
2016-09-14 10:10 517CKEditor 网页中实现所见即所得的编辑器 ... -
表单添加图片,commons-fileupload实现上传
2016-09-12 15:36 637======先设置form 表单的属性: <for ... -
before start of result set 是什么错误
2016-09-10 16:58 795在使用ResultSet时发生的错误: ... -
Tomcat配置数据源步骤以及使用JNDI
2016-09-09 16:36 4891、 配置Tomcat的conf/context.xml ... -
Statement与PreparedStatement区别
2016-09-09 10:44 367Statement与PreparedStatement区别 ...
相关推荐
在VC++(Visual C++)开发环境中,读取动态配置文件是常见的需求,尤其是在软件设计中需要根据用户需求或环境变化灵活调整程序行为时。动态配置文件通常采用文本格式,如INI、XML或JSON,方便非程序员进行编辑。本...
ConfigManager.cs
该程序configmanager读取配置文件(* .conf),并将值分配给用户定义的结构。 当您想通过自定义配置文件在golang程序中分配一些变量时,这非常方便。 过程很简单:导入configmanager ,使用导出的字段创建结构,在...
资源分类:Python库 所属语言:Python 资源全名:whtc.recipe.configmanager-1.1.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
读取这些文件的基本步骤包括打开文件、读取内容、处理数据以及关闭文件。在C语言中,我们可以使用标准库中的`fopen()`、`fread()`、`fgets()`、`fscanf()`、`fprintf()`、`fclose()`等函数来完成这些操作。 1. **...
在"r-configmanager-master"这个压缩包中,很可能是包含了项目的源代码、文档、示例和其他资源。开发者可以查看这些文件来了解该配置管理器的具体实现细节,学习如何在自己的项目中集成和使用它。通过阅读源码,还...
在实际使用ConfigManager时,首先需要根据项目需求选择合适的配置文件格式,然后通过提供的API或命令行工具进行配置的读取、修改和保存操作。同时,理解ConfigManager的内部原理和设计模式,可以帮助开发者更好地...
1. **类库(CLASS Library)**:Config_manager 是一个类库,它由一系列相互关联的类组成,每个类都有特定的功能,如读取、写入或编辑配置文件。这种设计模式提高了代码的可重用性和模块化。 2. **ConfigManager**...
在C++编程中,文件配置类通常用于管理应用程序的设置和参数,使程序可以根据不同的配置文件进行动态调整。本文将详细介绍一个通用的C++文件配置类的设计与实现,以及如何利用此类来处理配置文件。 首先,这个通用的...
《Go-configmanager:高效管理raft配置的利器》 在IT领域,配置管理是系统稳定运行的关键环节,尤其是在分布式系统中,如基于Raft一致性算法的系统。Go-configmanager是一个专门针对这种需求设计的工具,它巧妙地将...
configmanager2
- `ConfigManager`:读取和管理应用程序配置文件,如App.config或Web.config。 12. **邮件发送类**: - `MailSender`:发送电子邮件,支持设置发件人、收件人、主题和正文,以及添加附件。 这些工具类在实际项目...
1. `ConfigManager`类:负责读取和写入XML配置文件,提供修改IP、网关和DNS的方法。 2. `NetworkHelper`类:封装了`System.Net.NetworkInformation`的相关操作,用于获取和设置网络接口的IP信息。 3. `Form`类:可能...
该ConfigManager统一配置中心是基于CSS设计,包含1376个文件,涵盖359个CSS样式文件、175个JavaScript脚本文件、141个DLL动态链接库文件等。该项目旨在实现所有项目的配置集中管理,简化运维和部署流程,并具备高...
- `ConfigManager`:配置管理器,用于读取和保存用户的输入法设置。 通过以上组件的组合,Qt输入法实现了在Tiny6410开发板上的稳定运行,为嵌入式设备提供了高效、易用的输入解决方案。同时,由于其良好的设计原则...
- 示例中提到了`ConfigManager.java`文件,该文件用于读取配置文件并返回相应的配置信息。 4. **代码实现**: - `ConfigManager.java`的代码片段展示了如何读取配置文件并解析JSON数据。 - 该类主要用于读取`...
最后,文件中还包含了一个ConfigManager类,这个类虽然不是单例模式的一个示例,但它代表了单例模式在实际应用中的一个典型场景。ConfigManager类用于管理配置信息,它加载了一个配置文件并将其内容缓存,以便快速...
- 使用`System.Xml.XmlDocument`类来读取和修改XML文件内容。 四、使用示例 在VB.NET代码中,你可以像这样调用类方法来操作XML配置文件: ```vbnet Dim configManager As New XMLConfigManager configManager.XML...
`ConfigManager` 类是一个单例模式的实现,它负责创建并返回一个`ConfigModel`实例,客户端可以通过这个类获取到配置信息。 ##### 3. 子系统类 - **`Presentation.java`**:表示层类,根据配置决定是否生成表示层...