使用JDBC鏈接數據庫獲取表字段的註釋信息

使用JDBC鏈接數據庫獲取表字段的註釋信息

能夠直接Copy編譯使用的,不過別忘了數據庫驅動! java

另外注意的:數據庫,庫中的表字段要有註釋信息,要否則是不可能拿到註釋信息,而後注意下面那個if判斷我那是判斷有"user"這個表就輸出這個表的信息! mysql

javac不須要驅動jar,但java須要對應的數據驅動jar文件哦 
編譯:java環境已經搭建好

編譯命令:javac DBHelpInfo.java
運行命令:java -cp mysql.jar; DBHelpInfo

固然你複製到MyEclipse 或者Eclipse中了就很少解了! sql

import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import javax.swing.filechooser.FileSystemView;

public class DBHelpInfo {
	
	/**
	 * 這裏是Oracle鏈接方法
	 *private static final String driver = "oracle.jdbc.driver.OracleDriver";
	 *private static final String url = "jdbc:oracle:thin:@localhost:1521:orcl";
	 *private static final String uid = "system";
	 *private static final String pwd = "sys";
	 *這裏是SQL Server鏈接方法
	 *private static final String url = "jdbc:sqlserver://localhost:1433;DateBaseName=數據庫名";
	 *private static final String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
	 *private static final String uid = "sa";
	 *private static final String pwd = "sa";
	 *
	 *
	 * 這裏是MySQL鏈接方法
	 */
	private static final String driver="com.mysql.jdbc.Driver";
	private static final String pwd="root";
	private static final String user="root";
	private static final String url = "jdbc:mysql://localhost/test"
			+ "?user=" + user + "&password=" + pwd
			+ "&useUnicode=true&characterEncoding=UTF-8";
	private static Connection getConnection=null;

	public static void main(String[] args) {
		FileSystemView fsv=FileSystemView.getFileSystemView();
		String path=fsv.getHomeDirectory().toString();//獲取當前用戶桌面路徑
		getConnection=getConnections();
		try {
			DatabaseMetaData dbmd=getConnection.getMetaData();
		    ResultSet resultSet = dbmd.getTables(null, "%", "%", new String[] { "TABLE" });
		    while (resultSet.next()) {
		    	String tableName=resultSet.getString("TABLE_NAME");
		    	//System.out.println(tableName);
		    	if(tableName.equals("user")){
		    		//ResultSet rs =getConnection.getMetaData().getColumns(null, getXMLConfig.getSchema(),tableName.toUpperCase(), "%");//其餘數據庫不須要這個方法的,直接傳null,這個是oracle和db2這麼用
		    		ResultSet rs = dbmd.getColumns(null, "%", tableName, "%");
		    		File directory = new File(path);
					FileWriter fw = new FileWriter(directory+ "\\"+tableName.toUpperCase()+".xml");
					PrintWriter pw = new PrintWriter(fw);
		    		System.out.println("表名:"+tableName+"\t\n表字段信息:");
		    		pw.write("<p filid=\"xx\" table=\""+tableName.toUpperCase()+"\" zj=\"xx\"/>\n");
		    		while(rs.next()){
		    			pw.write("\t<p code=\""+rs.getString("COLUMN_NAME").toUpperCase()+"\" name=\""+rs.getString("REMARKS")+"\"/>\n");
		    			System.out.println("字段名:"+rs.getString("COLUMN_NAME")+"\t字段註釋:"+rs.getString("REMARKS")+"\t字段數據類型:"+rs.getString("TYPE_NAME"));
		    		}
		    		pw.write("</p>");
	    			pw.flush();
					pw.close();
					System.out.println("生成成功!");
		    	}
		    }
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static Connection getConnections(){
		try {
			//Properties props =new Properties();
			//props.put("remarksReporting","true");
			Class.forName(driver);
			getConnection=DriverManager.getConnection(url);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return getConnection;
	}
	////其餘數據庫不須要這個方法 oracle和db2須要
	 public static String getSchema() throws Exception {
			String schema;
			schema =getConnection.getMetaData().getUserName();
			if ((schema == null) || (schema.length() == 0)) {
			    throw new Exception("ORACLE數據庫模式不容許爲空");
			}
			return schema.toUpperCase().toString();

	}

}

rs.getString("這裏放入下面列出的常量")    數據庫

例如:  
  System.out.println(rs.getString("TABLE_CAT")+"----"+rs.getString("TABLE_SCHEM"));    就是分別拿到表類別和表模式 每一個列描述都有如下列: TABLE_CAT String => 表類別(可爲null) TABLE_SCHEM String => 表模式(可爲null) TABLE_NAME String => 表名稱 COLUMN_NAME String => 列名稱 DATA_TYPE int => 來自 java.sql.Types 的 SQL 類型 TYPE_NAME String => 數據源依賴的類型名稱,對於 UDT,該類型名稱是徹底限定的 COLUMN_SIZE int => 列的大小。 BUFFER_LENGTH 未被使用。 DECIMAL_DIGITS int => 小數部分的位數。對於 DECIMAL_DIGITS 不適用的數據類型,則返回 Null。 NUM_PREC_RADIX int => 基數(一般爲 10 或 2) NULLABLE int => 是否容許使用 NULL。 columnNoNulls - 可能不容許使用NULL值 columnNullable - 明確容許使用NULL值 columnNullableUnknown - 不知道是否可以使用 null REMARKS String => 描述列的註釋(可爲null) COLUMN_DEF String => 該列的默認值,當值在單引號內時應被解釋爲一個字符串(可爲null) SQL_DATA_TYPE int => 未使用 SQL_DATETIME_SUB int => 未使用 CHAR_OCTET_LENGTH int => 對於 char 類型,該長度是列中的最大字節數 ORDINAL_POSITION int => 表中的列的索引(從 1 開始) IS_NULLABLE String => ISO 規則用於肯定列是否包括 null。 YES --- 若是參數能夠包括 NULL NO --- 若是參數不能夠包括 NULL 空字符串 --- 若是不知道參數是否能夠包括 null SCOPE_CATLOG String => 表的類別,它是引用屬性的做用域(若是 DATA_TYPE 不是 REF,則爲null) SCOPE_SCHEMA String => 表的模式,它是引用屬性的做用域(若是 DATA_TYPE 不是 REF,則爲null) SCOPE_TABLE String => 表名稱,它是引用屬性的做用域(若是 DATA_TYPE 不是 REF,則爲null) SOURCE_DATA_TYPE short => 不一樣類型或用戶生成 Ref 類型、來自 java.sql.Types 的 SQL 類型的源類型(若是 DATA_TYPE 不是 DISTINCT 或用戶生成的 REF,則爲null) IS_AUTOINCREMENT String => 指示此列是否自動增長 YES --- 若是該列自動增長 NO --- 若是該列不自動增長 空字符串 --- 若是不能肯定該列是不是自動增長參數 
相關文章
相關標籤/搜索