⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test3.java

📁 用途: 自动查询所有数据库的所有表
💻 JAVA
字号:
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;

public class test3 {
	public static void main(String[] args) {
		//获取数据库基本信息
		DBAccess db = DBAccess.getDBAccess("Northwind");
		try {
			DatabaseMetaData dbmd=db.getConnection().getMetaData( );
			
			System.out.println("DB Name:"+dbmd.getDatabaseProductName()); 
			System.out.println("DB Version:"+dbmd.getDatabaseProductVersion()); 
           	System.out.println("Driver Name:"+dbmd.getDriverName()); 
            
		} catch (SQLException e1) {
			// TODO 自动生成 catch 块
			e1.printStackTrace();
		}
		db.closeDB();
		
/*		//设置为 非 单例模式,因为单例模式一次运行中只有一个连接(只能访问固定的数据库)
		DBAccess.setOnlyOneMode(false);
		test3 test = new test3();
		
		//数据库
		ArrayList list1 = test.getDatabaseList();		
		System.out.println("\n获得如下数据库列表:");
		for(int i=0;i<list1.size();i++){
			System.out.println((String)list1.get(i));
		}
		
		//表
		ArrayList list2 = test.getTableList("Northwind");		
		System.out.println("\n获得数据库的表的如下列表:");		
		for(int j=0;j<list2.size();j++){
			System.out.println((String)list2.get(j));
		}
		
		//字段
		ArrayList list = test.getTableInfoList("Northwind","Orders");		
		System.out.println("\n获得数据库的表的字段信息如下列表:");		
		for(int k=0;k<list.size();k++){
			ColumnType key = (ColumnType)list.get(k);
			System.out.println("字段名:"+key.getName());
			System.out.println("字段类型:"+key.getType());
		}*/		
		
		//自动查询所有数据库的所有表,列出所有表的字段的属性:字段名+字段类型
		showAll();
	}
	
	private static void showAll(){
		//设置为 非 单例模式,因为单例模式一次运行中只有一个连接(只能访问固定的数据库)
		DBAccess.setOnlyOneMode(false);
		test3 test = new test3();
		
		ArrayList list1 = test.getDatabaseList();	
		for(int i=0;i<list1.size();i++){//
			String databaseName = (String)list1.get(i);
			System.out.println("数据库:"+databaseName+"");
			System.out.println("------------------------------------------------------------------");
			
			ArrayList list2 = test.getTableList(databaseName);		
			for(int j=0;j<list2.size();j++){
				String tableName = (String)list2.get(j);
				System.out.println("表:"+tableName+"");
				System.out.println("--------------------------------");
				
				ArrayList list = test.getTableInfoList(databaseName,"["+tableName+"]");		
				for(int k=0;k<list.size();k++){
					ColumnType key = (ColumnType)list.get(k);
					System.out.println("字段名称:"+key.getName());
					System.out.println("字段类型:"+key.getType()+"\n");
				}
				
				//System.out.println("\n");
			}
			
			System.out.println("\n\n");
		}
	}

	//获得数据库列表
	private ArrayList getDatabaseList(){
		String databaseName = "master";
		ArrayList list = new ArrayList();
		DBAccess db = DBAccess.getDBAccess(databaseName);
		ResultSet rst = db.query("select name from sysdatabases");
		try {
			while(rst.next()) {
				list.add(rst.getString(1));
			}
		} catch (SQLException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		
		db.closeDB();
		
		return list;		
	}
	
	
	//获得指定数据库的表列表
	private ArrayList getTableList(String databaseName){
		ArrayList list = new ArrayList();
		DBAccess db = DBAccess.getDBAccess(databaseName);		
		try {
			DatabaseMetaData dbmd=db.getConnection().getMetaData( );
			//获取数据库表名结果集
			ResultSet mrs = dbmd.getTables( null, null, null,new String[] { "TABLE" } );
			while(mrs.next()){
				list.add(mrs.getString(3));  //table is in column 3
			}	
			mrs.close();
		} catch (SQLException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		
		db.closeDB();
		
		return list;		
	}
	
	
	//获得指定数据库的表的字段列表 ResultSet.getMetaData()方法
	private ArrayList getTableInfoList(String databaseName,String tableName){
		ArrayList list = new ArrayList();
		DBAccess db = DBAccess.getDBAccess(databaseName);	
		
		try {			
			ResultSet rstable = db.query("select top 0 * from "+tableName+"");
			ResultSetMetaData rsmd = rstable.getMetaData();
			
			for(int i=1; i<rsmd.getColumnCount(); i++){
				String name = rsmd.getColumnName(i);
				String type = rsmd.getColumnTypeName(i);
				
				ColumnType key = new ColumnType();
				key.setName(name);
				key.setType(type);
				
				list.add(key);
			}

            rstable.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		db.closeDB();
		
		return list;		
	}
	
/*	//获得指定数据库的表的字段列表
	private ArrayList getTableInfoList(String databaseName,String tableName){
		ArrayList list = new ArrayList();
		DBAccess db = DBAccess.getDBAccess(databaseName);		
		try {
			DatabaseMetaData dbmd=db.getConnection().getMetaData( );
			//获得表的结构
			ResultSet results = dbmd.getColumns(null, null,tableName, null);

            while (results.next()) {   
            	String name = results.getString("COLUMN_NAME").toString().trim();
            	String type;

            	int dbType = results.getInt ("DATA_TYPE");  
				
            	switch (dbType){
            	case Types.VARCHAR:
            		type="String";
            		break;
            	case Types.INTEGER:
            		type="int";
            		break;
            	case Types.FLOAT:
            		type="float";
            		break;
            	case Types.DOUBLE:
				case Types.REAL: 
					type="double";
					break; 
				case Types.DATE:
				case Types.TIME:
				case Types.TIMESTAMP:
					type="date";
					break;
				default:
					type ="unkonw type";
					break;
            	};     

            	ColumnType key = new ColumnType();
				key.setName(name);
				key.setType(type);
				list.add(key);
            }
            results.close();
		} catch (SQLException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		
		db.closeDB();
		
		return list;		
	}*/


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -