阅读本文章前建议先阅读:java通过JDBC访问sqlserver数据库

一、使用原因:通过JDBC连接数据库时有时会需要连接不同的数据库,而jar包、连接url、用户名和密码等都是写定在程序中,不便修改,因此引入配置文件(key-value),可以通过key得到对应的value,即动态获取数据。

二、实现步骤

1.编写配置文件database.properties;

2.创建包com.yh.util,编写类ConfigManager,读取属性文件;

3.修改连接数据库的参数。

三、代码示例

database.properties

jdbc.SQLServerDriver.class=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.connection.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=news
jdbc.connection.username=sa
jdbc.connection.password=12345yehuan

ConfigManager.java

package com.yh.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
// 读取配置文件的工具类-单例模式
public class ConfigManager {
private static ConfigManager configManager;
private static Properties properties;
private ConfigManager(){
// 把配置文件load到properties对象中
String configFile = "database.properties";
properties = new Properties();
// 获得当前类的根目录,然后在里面获得文件configFile的输入流,这样写就算项目路径变了,这里的路径也不用改,这句的相同功能代码见文末
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;
} public String getString(String key){
return properties.getProperty(key);
}
}

修改后的数据库连接代码

public void getData(){
ConfigManager configManager = ConfigManager.getInstance();
String url = configManager.getString("jdbc.connection.url");
String username = configManager.getString("jdbc.connection.username");
String password = configManager.getString("jdbc.connection.password");
String driver = configManager.getString("jdbc.SQLServerDriver.class");
Connection con = null;
Statement statement = null;
ResultSet rs = null;
try {
// 加载驱动
Class.forName(driver);
// 获得数据库连接
con = DriverManager.getConnection(url, username, password);
// 执行sql语句
String sql = "select * from student";
statement = con.createStatement();
rs = statement.executeQuery(sql);
while(rs.next()){
int id = rs.getInt(1);
String name = rs.getString(2);
int age = rs.getInt(3);
System.out.println(id+"\t"+name+"\t"+age);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
// 释放资源
rs.close();
statement.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

相同功能代码:

坏处是项目路径变了,这里也要修改。

InputStream is = null;
try {
is = new FileInputStream("D:/Workspaces/MyEclipse 2017 CI/News/WebRoot/WEB-INF/classes/database.properties");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

java配置文件的使用 —— 设置一个类为单例模式的更多相关文章

  1. Java中是否可以调用一个类中的main方法?

    前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...

  2. java多线程并发去调用一个类的静态方法安全性探讨

    java多线程并发去调用一个类的静态方法安全性探讨 转自:http://blog.csdn.net/weibin_6388/article/details/50750035   这篇文章主要讲多线程对 ...

  3. java反射获取和设置实体类的属性值 递归所有父类

    最近做一个通用数据操作接口,需要动态获取和设置实体类的属性值,为了通用实体做了多重继承,开始网上找到代码都不支持父类操作,只能自己搞一个工具类了,此工具类可以设置和获取所有父类属性,代码贴下面拿走不谢 ...

  4. Java中如何在另一个类里面使用运行类中的对象,举例说明了一下。

    package 计时器; import java.util.Timer; import java.util.TimerTask; /* * 主要是想在另一个类里面,使用该类的对象,如何使用呢?如何传递 ...

  5. [改善Java代码]不要只替换一个类

    建议20: 不要只替换一个类 我们经常在系统中定义一个常量接口(或常量类),以囊括系统中所涉及的常量,从而简化代码,方便开发,在很多的开源项目中已采用了类似的方法,比如在Struts2中,org.ap ...

  6. 用java的socket来发送一个类

    用socket可以简单的发送一些文本信息,太复杂的可能发送不了,比如图片音频可能要用到http来发送和接收了.最基本的使用socket来发送一个字符串,但有的时候我们希望能够发送一个类,这样serve ...

  7. Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序

    package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...

  8. 为什么java中只允许继承一个类?

      一个类只能继承一个其他的类 在Java语言中禁止多重继承:一个类可以具有多个直接父类.多重继承不合法的原因是容易引发意义不明确.例如,有一个类C,如果允许它同时继承A类与B类(class C ex ...

  9. java使用netty模拟实现一个类dubbo的分布式服务调用框架

    本文较长,如果想直接看代码可以查看项目源码地址: https://github.com/hetutu5238/rpc-demo.git 要想实现分布式服务调用框架,我们需要了解分布式服务一般需要的功能 ...

随机推荐

  1. 解决一次gitlab因异常关机导致启动失败

    解决一次gitlab因异常关机导致启动失败 目录 解决一次gitlab因异常关机导致启动失败 1. 服务器异常关机 2. gitlab服务 2.1 进入gitlab容器内部 2.2 检查gitlab各 ...

  2. web前端学习路径推荐

    如果你是从其他行业转行到web前端开发领域,如果你没有计算机方面基础,建议大家先从最基础的网页制作开始学习,web前端的范围非常广泛,现在已经达到了大前端的要求,不过薪资待遇也是越来越好,可以说前端开 ...

  3. python openpyxl、RESTful、Webservice接口 基础知识

    最近 在做接口测试的时候,遇到如下问题:如何通过数据驱动去做批量接口测试呢,我们的测试数据放在哪里去维护?下面整理出相关点,供大家参考 1.如何维护接口测试数据:放在excel文件中,通过python ...

  4. [gym102978D]Do Use FFT

    前置知识 (以下内容并不严谨,可以参考论文<转置原理的简单介绍>) 对于一个算法,其为线性算法当且仅当仅包含以下操作: 1.$read\ i$,将$r_{i}$的值赋为(下一个)读入的元素 ...

  5. [luogu7116]微信步数

    先判定无解,当且仅当存在一个位置使得移动$n$步后没有结束且仍在原地 暴力枚举移动的步数,记$S_{i}$为移动$i$步(后)未离开范围的点个数,则恰好移动$i$步的人数为$S_{i-1}-S_{i} ...

  6. PaintHouse II

    // // Created by Administrator on 2021/7/27. // #ifndef C__TEST01_PAINTHOUSE_HPP #define C__TEST01_P ...

  7. k8s-Pod污点与容忍

    目录 Pod污点与容忍 大白话先解释一下污点与容忍 为什么要用污点和容忍? 官方解释 Taints参数 标记污点 容忍污点 取消所有节点污点 Pod污点与容忍 大白话先解释一下污点与容忍 污点:被打上 ...

  8. Python+selenium之键盘和鼠标事件

  9. Spring Cloud Gateway过滤器精确控制异常返回(实战,完全定制返回body)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 Spring Cloud Gateway应用 ...

  10. P2336 [SCOI2012]喵星球上的点名(SA+莫队)

    题面传送门 一道还算有点含金量的 SA 罢-- 首先按照套路我们把读入的所有字符串都粘在一起,中间用分隔符隔开并建出后缀数组出来. 我们考虑对于一个固定的字符串 \(s\),什么样的字符串 \(t\) ...