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掉,否则会出现溢出错误。
  • 相关阅读:
    疫情环境下的网络学习笔记 python 5.8 数据库入门终章
    疫情环境下的网络学习笔记 python 5.7 navicat数据库,例题,sql注入
    疫情环境下的网络学习笔记 python 5.6 暂时看看
    疫情环境下的网络学习笔记 python 5.5 MYSql 表关系,外键
    疫情环境下的网络学习笔记 python 5.4 数据库基础
    疫情环境下的网络学习笔记 python 4.30 初识数据库
    疫情环境下的网络学习笔记 python 4.29 网络小项目
    XJOI 夏令营501-511测试11 游戏
    XJOI 夏令营501-511测试11 统计方案
    CF1197D Yet Another Subarray Problem
  • 原文地址:https://www.cnblogs.com/bjh1117/p/6586168.html
Copyright © 2011-2022 走看看