Java读取数据源相关信息

一、采用读取数据源配置文件的方式
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掉,否则会出现溢出错误。
posted @ 2017-03-20 10:04  乐呵呵的小码农  阅读(4212)  评论(0编辑  收藏  举报