阅读本文章前建议先阅读: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. C# WINFORM进销存系统开发(内涵免费源码+部分实操视频讲解)

    互联网的时代,电商火爆,大家都开始进行线上销售货品,那你是如何管理你的商品库存和进销问题?软积木--小敏用的是C# WINFORM进销存系统来管理我的数据,给我带来了很多便利. 它是高频需求项目,很多 ...

  2. 手把手教你学Dapr - 9. 可观测性

    目录 手把手教你学Dapr - 1. .Net开发者的大时代 手把手教你学Dapr - 2. 必须知道的概念 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 手把手教你学Dapr ...

  3. 算法学习->递归典例N皇后问题

    00 问题 在NN(这个N==N皇后的N)的方格棋盘上放置n个皇后,要求:1.每个皇后在不同行不同列:2.每个皇后在不同左右对角线 输出要求:输出符合条件的所有解,解以皇后的坐标的形式. 01 思路 ...

  4. [loj3368]数蘑菇

    由于题目是让我们统计个数,当我们确定了$k$个$p_{i}$都为0或1后,再用至多$\lceil \frac{n-k}{k}\rceil$次询问和$2(n-k)$个"$n$"即可求 ...

  5. [cf1184E]Daleks' Invasion

    先求出任意一棵最小生成树,然后对边分类讨论1.非树边,答案即最小生成树的环上的最长边2.树边,反过来考虑,相当于对于每一个点对那条路经打上标记,取min对于1直接用倍增维护即可,对于2可以用树链剖分/ ...

  6. appScan安全软件的使用

    1.点击文件,新建 2.常规扫描 3.点击下一步 4.输入需要扫描的网站 5.下一步,如果有账号 密码可以使用记录. 6.选择缺省值,下一步 7.启动全面扫描.

  7. Python集合&字典

    Python集合&字典 @ 目录 字典 字典的几种定义方式 第一种 第二种 第三种 字典的一些基本操作 通过key得到value 增加字典键值对 删除字典键值对 格式化操作 清空字典 复制字典 ...

  8. 【贾志豪NOIP模拟题】慰问员工 cheer 【最小生成树】【对边权值的一些处理】

    Description LongDD 变得非常懒, 他不想再继续维护供员工之间供通行的道路. 道路被用来连接 N(5 <= N <= 10,000)个房子, 房子被连续地编号为 1..N. ...

  9. Codeforces 1396D - Rainbow Rectangles(扫描线+线段树)

    Codeforces 题面传送门 & 洛谷题面传送门 一道鸽了整整一年的题目,上一次提交好像是 2020 年 9 月 13 日来着的(?) 乍一看以为第 2 个提交和第 3 个提交只差了 43 ...

  10. Small but Funny Tricks [Remember them all!]

    模数 1e9 的神奇求行列式: #include <bits/stdc++.h> using namespace std; const int maxn = 1e2, mod = 1e9; ...