import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.loushang.persistent.jdbc.datasource.PropertyDataSourceFactoryImpl;public classDataBaseUtil {private static Log logger = LogFactory.getLog(DataBaseUtil.class);public static final String DATASOURCE_FILENAME = "datasource.properties"; //连接数据库的数据源文件
public static final String DATASOURCE_URL = "dataSource.url"; //数据源文件里url的key
public static final String DATASOURCE_USERNAME = "dataSource.username"; //数据源文件里用户名的key
/**
* 读取配置文件信息
* @return Properties 配置文件信息*/
public staticProperties getProperties() {//InputStream in = ClassLoader.getSystemResourceAsStream(DATASOURCE_FILENAME);
InputStreamin = PropertyDataSourceFactoryImpl.class.getClassLoader()
.getResourceAsStream(DATASOURCE_FILENAME);if (in == null) {in =Thread.currentThread().getContextClassLoader().getResourceAsStream(DATASOURCE_FILENAME);if(in == null){
logger.warn("Can not find the datasource config file 'datasource.properties'.");
}
}
Properties properties= newProperties();try{
properties.load(in);
}catch(IOException e) {
logger.error("Error occurred when loading datasource config file.", e);
}returnproperties;
}/**
* 读取配置文件获取连接数据库的数据库名
* @return String 数据库名*/
public staticString getDatabaseName() {
String databaseName= "";
Properties p=getProperties();
String database=p.getProperty(DATASOURCE_URL);int startIndex = database.lastIndexOf(":");
databaseName= database.substring(startIndex+1, database.length());returndatabaseName;
}/**
* 读取配置文件获取连接数据库的用户名
* @return String 用户名*/
public staticString getUserOfDatabase() {
String user= "";
Properties p=getProperties();
user=p.getProperty(DATASOURCE_USERNAME);returnuser;
}/**
* 获取指定数据库和用户的所有表名
* @param conn 连接数据库对象
* @param user 用户
* @param database 数据库名
* @return*/
public staticList getAllTableNames(Connection conn, String user, String database) {
List tableNames= newArrayList();if (conn != null) {try{
DatabaseMetaData dbmd=conn.getMetaData();//表名列表
ResultSet rest = dbmd.getTables(database, null, null, new String[] { "TABLE"});//输出 table_name
while(rest.next()) {
String tableSchem= rest.getString("TABLE_SCHEM");if(user.equalsIgnoreCase(tableSchem)) {
tableNames.add(rest.getString("TABLE_NAME"));
}
}
}catch(SQLException e) {
e.printStackTrace();
}
}returntableNames;
}public static voidmain(String [] args) {
Connection conn= null;try{/*String url="jdbc:oracle:thin:@10.*.*.*:1521:***";
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url , "*" , "*");*/DataSource datasource= DataSourceFactory.defaultFactory.getDataSource("dataSource");
conn=datasource.getConnection();
}catch(SQLException e1) {
e1.printStackTrace();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
List tables=getAllTableNames(conn, getUserOfDatabase(), getDatabaseName());
System.out.println(tables.size());
}
}