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掉,否则会出现溢出错误。
  • 相关阅读:
    【代码笔记】iOS-翻书效果的实现
    【代码笔记】iOS-多张图片合成一张
    【代码笔记】iOS-scrollerView里多个tableView加搜索框
    【代码笔记】iOS-对UIView进行截图
    【代码笔记】iOS-对iphone手机进行判断的一些函数
    【代码笔记】iOS-短信分享
    【代码笔记】iOS-读取一段文字
    【代码笔记】iOS-调用系统震动和声音
    【读书笔记】iOS-给模拟器相册增加图片
    【读书笔记】iOS-GCD-GCD与perfomSelector系方法比较
  • 原文地址:https://www.cnblogs.com/bjh1117/p/6586168.html
Copyright © 2011-2022 走看看