一、采用读取数据源配置文件的方式
package com.ofsp.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
public class DataSourceUtil {
     public static final String DATASOURCE_FILENAME ="jdbc.properties"; //连接数据库的数据源文件
     public static final String DATASOURCE_URL = "jdbc.url"; //数据源文件里url的key
     public static final String DATASOURCE_USERNAME = "jdbc.username";//数据源文件里用户名的key
     public static final String DATASOURCE_PASSWORD = "jdbc.password";//数据源文件里密码的key
 
     /**
      * 读取配置文件信息
      * @return Properties 配置文件信息
      * @throws Exception
      */
     public static Properties getProperties() throws Exception {
         InputStream in = null;
         if (in == null) {
             //Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.class.getResourceAsStream("name") 会在com.test.mycode包下查找相应的资源。如果这个name是以 '/' 开头的,那么就会从classpath的根路径下开始查找。 ClassLoader.getResourceAsStream()  无论要查找的资源前面是否带'/' 都会从classpath的根路径下查找。
             in = Thread.currentThread().getContextClassLoader().getResourceAsStream(DATASOURCE_FILENAME); //路径是 classpath的相对路径, classpath是指 WEB-INF文件夹下的classes目录
             if(in == null){
                 throw new Exception("找不到路径为"+DATASOURCE_FILENAME+"的数据源配置文件。");
             }
         }
         Properties properties = new Properties();
         try {
             properties.load(in);
         } catch (IOException e) {
             e.printStackTrace();
         }
         return properties;
     }
 
     /**
      * 读取配置文件获取连接数据库的数据库url
      * @return String 数据库名
      * @throws Exception
      */
     public static String getDatabaseURL() throws Exception {
          Properties p = getProperties();
          return p.getProperty(DATASOURCE_URL);
     }
 
     /**
      * 读取配置文件获取连接数据库的用户名
      * @return String 用户名
     * @throws Exception
      */
     public static String getUserOfDatabase() throws Exception {
          Properties p = getProperties();
          return p.getProperty(DATASOURCE_USERNAME);
     }
 
     /**
      * 读取配置文件获取连接数据库的密码
      * @return String 密码
     * @throws Exception
      */
     public static String getPasswordOfDatabase() throws Exception {
          Properties p = getProperties();
          return p.getProperty(DATASOURCE_PASSWORD);
     }
 
     /**
      * 获取数据库Connection
      * @return
      * @throws Exception
      */
     public static Connection getConnection() throws Exception{
         Properties p = getProperties();
         String url = p.getProperty(DATASOURCE_URL);
         String username = p.getProperty(DATASOURCE_USERNAME);
         String password = p.getProperty(DATASOURCE_PASSWORD);
         return DriverManager.getConnection(url, username, password);
     }
 
     /**
      * 获取指定数据库和用户的所有表名
      * @param conn 连接数据库对象
      * @param user 用户
      * @param database 数据库名
      * @return
      */
     public static List<String> getAllTableNames(Connection conn,String database,String schem,String tableName) {
         List<String> tableNames = new ArrayList<String>();
         if (conn != null) {
               try {
                    DatabaseMetaData metadata = conn.getMetaData();
                    // 表名列表
                    ResultSet rest = metadata.getTables(database, schem.toUpperCase(), tableName.toUpperCase(), new String[] {"TABLE"});
                    while (rest.next()) {
                        tableNames.add(rest.getString("TABLE_NAME"));
                    }
               } catch (SQLException e) {
                   e.printStackTrace();
               }
          }
          return tableNames;
     }
 
}
二、如果采用Spring框架的话,还可以从Spring的配置文件中获取当前数据源:
数据源文件配置在spring-context.xml文件中,部分片断截取:
DruidDataSource dataSource = ApplicationContextHelper.getBean("dataSource");//获取数据源
Connection connection = dataSource.getConnection();//获取连接
String user = dataSource.getUsername();//获取用户名
注意:connection用完后一定要及时close掉,否则会出现溢出错误。

Java读取数据源相关信息的更多相关文章

  1. java读取properties配置文件信息

    一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...

  2. Java读取图片exif信息实现图片方向自动纠正

    起因 一个对试卷进行OCR识别需求,需要实现一个功能,一个章节下的题目图片需要上下拼接合成一张大图,起初写了一个工具实现图片的合并,程序一直很稳定的运行着,有一反馈合成的图片方向不对,起初怀疑是本身图 ...

  3. Java读取txt文件信息并操作。

    一.java读取txt文件内容 import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.Fi ...

  4. fstat - 读取文件相关信息

    #fstat读取到的信息 ["dev"]=> int(16777220) ["ino"]=> int(66880002) ["mode&q ...

  5. Java用System读取系统相关信息、环境变量——(六)

    package Java_Test; public class System1 { public static void main(String[] args) { // TODO Auto-gene ...

  6. (转)java读取数据库表信息,子段

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

  7. java 读取数据库中文信息,为何在jsp页面中出现乱码

    有如下几种解决办法:1.保证项目的字符编码和每一个jsp页面的字符编码一致,如果不一致可能导致中文乱码问题<%@ page language="java" contentTy ...

  8. java读取配置文件的信息

    1. 首先,工程结构如下: 注:a. 蓝色标注的两个文件是和com包平级的,都在src下.EnnNotificationPushProxy.ini是这个工程的配置文件,log4j.properties ...

  9. JAVA获取系统相关信息

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00003596 获取JRE系统相关参数 java 通过S ...

随机推荐

  1. 关于volatile的一些理解

    什么是volatile?什么是可见性? volatile本意是易变的,就是说它修饰的变量可能经常被修改. 可见性就是说多线程访问一个共享变量的时候,任何的修改都会让所有的线程知道并且更新. 如何实现可 ...

  2. 2.1 Java程序的构成

    2.1 Java程序的构成 2.1.1逻辑构成 Java源程序逻辑构成分为两大部分:程序头包的引用和类 的定义 1.程序头包的引用 主要是指引用JDK软件包自带的包,也可以是自己定义的类. 引用之后程 ...

  3. vue的双向绑定原理及实现

    前言 使用vue也好有一段时间了,虽然对其双向绑定原理也有了解个大概,但也没好好探究下其原理实现,所以这次特意花了几晚时间查阅资料和阅读相关源码,自己也实现一个简单版vue的双向绑定版本,先上个成果图 ...

  4. SSM框架中常用的注解

    @Controller:在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model , ...

  5. React,关于redux的一点小见解

    最近项目做多页面应用使用到了,react + webpack + redux + antd去构建多页面的应用,本地开发用express去模拟服务端程序(个人觉得可以换成dva).所以在这里吐槽一下我自 ...

  6. mysqldump命令详解

    1.数据备份的重要性: 保护公司的数据 网站的7x24提供服务 2.MySQL数据库备份: --all-databases , -A 导出全部数据库. mysqldump -uroot -p --al ...

  7. python 之走坑的道路

    ### python之 继续走函数的坑 上篇文章简单介绍了函数的一些简单的使用,这次继续踩函数的坑1.函数对象 函数其实也可以当做一个参数传给另一个函数,也可以使用赋值的方式来给另一个,而且这两个的内 ...

  8. CSS小技巧-两个盒子之间的间距问题

    1.水平排放的盒子,水平间距是两个margin的累加 2.垂直排放的盒子,垂直间距是合并的取最大值

  9. poj2104(划分树模板)

    poj2104 题意 给出一个序列,每次查询一个区间,要求告诉这个区间排序后的第k个数. 分析 划分树模板,O(mlogn). 建树.根据排序之后的数组,对于一个区间,找到中点的数,将整个区间分为左右 ...

  10. 使用DotNetty编写跨平台网络通信程序

    长久以来,.Net开发人员都非常羡慕Java有Netty这样,高效,稳定又易用的网络通信基础框架.终于微软的Azure团队,使用C#实现的Netty的版本发布.不但使用了C#和.Net平台的技术特点, ...