zoukankan      html  css  js  c++  java
  • 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掉,否则会出现溢出错误。
  • 相关阅读:
    依赖注入和控制反转概念及目的(新手必读)
    电商秒杀系统可能遇到的坑及思路
    Java中的ReentrantLock和synchronized两种锁定机制的对比
    Java集合---HashMap源码剖析
    Java中的字符串常量池
    redhat7:用户、组和权限
    redhat7下对用户账户的管理
    通过Tacker将NFV引入OpenStack
    github中的一个快捷键
    关于
  • 原文地址:https://www.cnblogs.com/bjh1117/p/6586168.html
Copyright © 2011-2022 走看看