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

📄 databasemetadata.java

📁 SSD9 练习9
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	Vector Tuples = new Vector();	while (RS.next()) {	    byte[][] RowVal = new byte[1][];	    RowVal[0] = RS.getBytes(1);	    Tuples.addElement(RowVal);	}		  	return new ResultSet(Fields, Tuples, _Conn);    }      /**     * Get the table types available in this database.  The results     * are ordered by table type.     *     * <P>The table type is:     *  <OL>     *    <LI><B>TABLE_TYPE</B> String => table type.  Typical types are "TABLE",     *                    "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",     *                    "LOCAL TEMPORARY", "ALIAS", "SYNONYM".     *  </OL>     *     * @return ResultSet each row has a single String column that is a     * table type     */    public java.sql.ResultSet getTableTypes() throws java.sql.SQLException    {	Vector Tuples = new Vector();	Field[] Fields = new Field[1];	Fields[0] = new Field("", "TABLE_TYPE", Types.VARCHAR, 5);	byte[][] TType = new byte[1][];	TType[0] = _Table_As_Bytes;	Tuples.addElement(TType);	return new ResultSet(Fields, Tuples, _Conn);    }      /**     * Get a description of table columns available in a catalog.     *     * <P>Only column descriptions matching the catalog, schema, table     * and column name criteria are returned.  They are ordered by     * TABLE_SCHEM, TABLE_NAME and ORDINAL_POSITION.     *     * <P>Each column description has the following columns:     *  <OL>     *    <LI><B>TABLE_CAT</B> String => table catalog (may be null)     *    <LI><B>TABLE_SCHEM</B> String => table schema (may be null)     *    <LI><B>TABLE_NAME</B> String => table name     *    <LI><B>COLUMN_NAME</B> String => column name     *    <LI><B>DATA_TYPE</B> short => SQL type from java.sql.Types     *    <LI><B>TYPE_NAME</B> String => Data source dependent type name     *    <LI><B>COLUMN_SIZE</B> int => column size.  For char or date     *        types this is the maximum number of characters, for numeric or     *        decimal types this is precision.     *    <LI><B>BUFFER_LENGTH</B> is not used.     *    <LI><B>DECIMAL_DIGITS</B> int => the number of fractional digits     *    <LI><B>NUM_PREC_RADIX</B> int => Radix (typically either 10 or 2)     *    <LI><B>NULLABLE</B> int => is NULL allowed?     *      <UL>     *      <LI> columnNoNulls - might not allow NULL values     *      <LI> columnNullable - definitely allows NULL values     *      <LI> columnNullableUnknown - nullability unknown     *      </UL>     *    <LI><B>REMARKS</B> String => comment describing column (may be null)     *    <LI><B>COLUMN_DEF</B> String => default value (may be null)     *    <LI><B>SQL_DATA_TYPE</B> int => unused     *    <LI><B>SQL_DATETIME_SUB</B> int => unused     *    <LI><B>CHAR_OCTET_LENGTH</B> int => for char types the     *       maximum number of bytes in the column     *    <LI><B>ORDINAL_POSITION</B> int => index of column in table     *      (starting at 1)     *    <LI><B>IS_NULLABLE</B> String => "NO" means column definitely     *      does not allow NULL values; "YES" means the column might     *      allow NULL values.  An empty string means nobody knows.     *  </OL>     *     * @param catalog a catalog name; "" retrieves those without a catalog     * @param schemaPattern a schema name pattern; "" retrieves those     * without a schema     * @param tableNamePattern a table name pattern     * @param columnNamePattern a column name pattern     * @return ResultSet each row is a column description     * @see #getSearchStringEscape     */    public java.sql.ResultSet getColumns(String Catalog, String SchemaPattern,					 String TableName, 					 String ColumnNamePattern)	throws java.sql.SQLException    {	String DB_Sub = "";	if (ColumnNamePattern == null) {	    ColumnNamePattern = "%";	}	if (Catalog != null) {	    if (!Catalog.equals("")) {		DB_Sub = " FROM " + Catalog;	    }	}	else {	    DB_Sub = " FROM " + _Database;	}			Vector TableNameList = new Vector();			int tablename_length = 0;			if (TableName == null) {	    // Select from all tables	    java.sql.ResultSet Tables = getTables(Catalog, SchemaPattern, "%", new String[0]);				    while (Tables.next()) {		String TN = Tables.getString("TABLE_NAME");						TableNameList.addElement(TN);						if (TN.length() > tablename_length) {		    tablename_length = TN.length();		}	    }	    Tables.close();	}	else {	    TableNameList.addElement(TableName);	    tablename_length = TableName.length();	}				int catalog_length = 0;				if (Catalog != null) {	    catalog_length = Catalog.length();	}				java.util.Enumeration TableNames = TableNameList.elements();			Field[] Fields = new Field[18];			Fields[0]  = new Field("", "TABLE_CAT"        , Types.CHAR, 			       catalog_length);	Fields[1]  = new Field("", "TABLE_SCHEM"      , Types.CHAR,     0);	Fields[2]  = new Field("", "TABLE_NAME"       , Types.CHAR,			       tablename_length);	Fields[3]  = new Field("", "COLUMN_NAME"      , Types.CHAR,     32);	Fields[4]  = new Field("", "DATA_TYPE"        , Types.SMALLINT, 5);	Fields[5]  = new Field("", "TYPE_NAME"        , Types.CHAR,     16);	Fields[6]  = new Field("", "COLUMN_SIZE"      , Types.INTEGER,   			       Integer.toString(Integer.MAX_VALUE).length());	Fields[7]  = new Field("", "BUFFER_LENGTH"    , Types.INTEGER,  10);	Fields[8]  = new Field("", "DECIMAL_DIGITS"   , Types.INTEGER,  10);	Fields[9]  = new Field("", "NUM_PREC_RADIX"   , Types.INTEGER,  10);	Fields[10] = new Field("", "NULLABLE"         , Types.INTEGER,  10);	Fields[11] = new Field("", "REMARKS"          , Types.CHAR,     0);	Fields[12] = new Field("", "COLUMN_DEF"       , Types.CHAR,     0);	Fields[13] = new Field("", "SQL_DATA_TYPE"    , Types.INTEGER,  10);	Fields[14] = new Field("", "SQL_DATETIME_SUB",  Types.INTEGER,  10);	Fields[15] = new Field("", "CHAR_OCTET_LENGTH", Types.INTEGER,      			       Integer.toString(Integer.MAX_VALUE).length());	Fields[16] = new Field("", "ORDINAL_POSITION" , Types.INTEGER,  10);	Fields[17] = new Field("", "IS_NULLABLE"      , Types.CHAR,     3);	Vector Tuples = new Vector();			while (TableNames.hasMoreElements()) {					    String TableNamePattern = (String)TableNames.nextElement();				    org.gjt.mm.mysql.ResultSet RS = _Conn.execSQL(							  "show columns from " + 							  TableNamePattern + DB_Sub + " like '" 							  + ColumnNamePattern + "'", -1);	    RS.setConnection(_Conn);	    java.sql.ResultSetMetaData RSMD = RS.getMetaData();				    int ord_pos = 1;	    /*	     * Fix up Catalog and TableName	     */			 	    if (Catalog == null) {		Catalog = "";	    }    	    if (TableName == null) {		TableName = "";	    }    	    while (RS.next()) {		byte[][] RowVal = new byte[18][];		RowVal[0] = Catalog.getBytes();   // TABLE_CAT		RowVal[1] = new byte[0];        // TABLE_SCHEM (No schemas in MySQL)			  		RowVal[2] = TableName.getBytes(); // TABLE_NAME		RowVal[3] = RS.getBytes("Field");			  		String TypeInfo = RS.getString("Type");		if (Driver.debug) {		    System.out.println("Type: " + TypeInfo);		}		String MysqlType = "";			  		if (TypeInfo.indexOf("(") != -1) {		    MysqlType = TypeInfo.substring(0, TypeInfo.indexOf("("));		}		else {		    MysqlType = TypeInfo;		}		/* 		 * Convert to XOPEN (thanks JK)		 */		RowVal[4] = Integer.toString(MysqlDefs.mysqlToJavaType(MysqlType)).getBytes(); // DATA_TYPE (jdbc)		RowVal[5] = MysqlType.getBytes(); // TYPE_NAME (native)		// Figure Out the Size		if (TypeInfo != null) {		    if (TypeInfo.indexOf("enum") != -1) {			String Temp = TypeInfo.substring(TypeInfo.indexOf("("), TypeInfo.indexOf(")"));								java.util.StringTokenizer ST = new java.util.StringTokenizer(Temp, ",");								int max_length = 0;								while (ST.hasMoreTokens()) {			    max_length = Math.max(max_length, (ST.nextToken().length() - 2));			}			RowVal[6] = Integer.toString(max_length).getBytes();			RowVal[8] = new byte[] {(byte)'0'};		    }		    else if (TypeInfo.indexOf(",") != -1) {			// Numeric with decimals			String Size = TypeInfo.substring((TypeInfo.indexOf("(") + 1),							 (TypeInfo.indexOf(",")));			String Decimals = TypeInfo.substring((TypeInfo.indexOf(",") + 1),							     (TypeInfo.indexOf(")")));			RowVal[6] = Size.getBytes();			RowVal[8] = Decimals.getBytes();		    }		    else {			String Size = "0";			/* If the size is specified with the DDL, use that */									if (TypeInfo.indexOf("(") != -1) {			    Size = TypeInfo.substring((TypeInfo.indexOf("(") + 1),						      (TypeInfo.indexOf(")")));			}			/* Otherwise resort to defaults */			else if (TypeInfo.toLowerCase().equals("tinyint")) {			    Size = "1";			}			else if (TypeInfo.toLowerCase().equals("smallint")) {			    Size = "6";			}			else if (TypeInfo.toLowerCase().equals("mediumint")) {			    Size = "6";			}			else if (TypeInfo.toLowerCase().equals("int")) {			    Size = "11";			}			else if (TypeInfo.toLowerCase().equals("integer")) {			    Size = "11";			}			else if (TypeInfo.toLowerCase().equals("bigint")) {			    Size = "25";			}			else if (TypeInfo.toLowerCase().equals("int24")) {			    Size = "25";			}			else if (TypeInfo.toLowerCase().equals("real")) {			    Size = "12";			}			else if (TypeInfo.toLowerCase().equals("float")) {			    Size = "12";			}			else if (TypeInfo.toLowerCase().equals("decimal")) {			    Size = "12";			}			else if (TypeInfo.toLowerCase().equals("numeric")) {			    Size = "12";			}			else if (TypeInfo.toLowerCase().equals("double")) {			    Size = "22";			}			else if (TypeInfo.toLowerCase().equals("char")) {			    Size = "1";			}			else if (TypeInfo.toLowerCase().equals("varchar")) {			    Size = "255";			}			else if (TypeInfo.toLowerCase().equals("date")) {			    Size = "10";			}			else if (TypeInfo.toLowerCase().equals("time")) {			    Size = "8";			}			else if (TypeInfo.toLowerCase().equals("timestamp")) {			    Size = "19";			}			else if (TypeInfo.toLowerCase().equals("datetime")) {			    Size = "19";			}			else if (TypeInfo.toLowerCase().equals("tinyblob")) {			    Size = "255";			}			else if (TypeInfo.toLowerCase().equals("blob")) {			    Size = Integer.toString(Math.min(65535, MysqlIO.getMaxBuf()));			}			else if (TypeInfo.toLowerCase().equals("mediumblob")) {			    Size = Integer.toString(Math.min(16277215, MysqlIO.getMaxBuf()));			}			else if (TypeInfo.toLowerCase().equals("longblob")) {			    Size = (Integer.toString(MysqlIO.getMaxBuf()).compareTo("2147483657") < 0 ? Integer.toString(MysqlIO.getMaxBuf()) : "2147483657");			}			else if (TypeInfo.toLowerCase().equals("tinytext")) {			    Size = "255";			}			else if (TypeInfo.toLowerCase().equals("text")) {			    Size = "65535";			}			else if (TypeInfo.toLowerCase().equals("mediumtext")) {			    Size = Integer.toString(Math.min(16277215, MysqlIO.getMaxBuf()));			}			else if (TypeInfo.toLowerCase().equals("enum")) {			    Size = "255";			}			else if (TypeInfo.toLowerCase().equals("set")) {			    Size = "255";			}			RowVal[6] = Size.getBytes();			RowVal[8] = new byte[] {(byte)'0'};		    }		}		else {                    		    RowVal[8] = new byte[] {(byte)'0'};		    RowVal[6] = new byte[] {(byte)'0'};		}		RowVal[7] = Integer.toString(MysqlIO.MAXBUF).getBytes(); // BUFFER_LENGTH		RowVal[9] = new byte[] {(byte)'1',(byte)'0'}; // NUM_PREC_RADIX (is this right for char?)		String Nullable = RS.getString("Null");		// Nullable?		if (Nullable != null) {		    if (Nullable.equals("YES")) {			RowVal[10] = Integer.toString(columnNullable).getBytes();			RowVal[17] = new String("YES").getBytes(); // IS_NULLABLE		    }		    else {			RowVal[10] = Integer.toString(columnNoNulls).getBytes();			RowVal[17] = new String("NO").getBytes();		    }		}		else {		    RowVal[10] = Integer.toString(columnNoNulls).getBytes();		    RowVal[17] = new String("NO").getBytes();		}		RowVal[11] = new byte[0]; // REMARK			  		// COLUMN_DEF		byte[] Default = RS.getBytes("Default");		if (Default != null) {		    RowVal[12] = Default;		}		else {		    RowVal[12] = new byte[0];		}		RowVal[13] = new byte[] {(byte)'0'};  // SQL_DATA_TYPE		RowVal[14] = new byte[] {(byte)'0'};       // SQL_DATE_TIME_SUB		RowVal[15] = RowVal[6];       // CHAR_OCTET_LENGTH		RowVal[16] = Integer.toString(ord_pos++).getBytes();  // ORDINAL_POSITION			 		Tuples.addElement(RowVal);	    }	    RS.close();	}    	ResultSet Results = new ResultSet(Fields, Tuples, _Conn);	return Results;    }    /**     * Get a description of the access rights for a table's columns.     *     * <P>Only privileges matching the column name criteria are     * returned.  They are ordered by COLUMN_NAME and PRIVILEGE.     *     * <P>Each privilige description has the following columns:     *  <OL>     *    <LI><B>TABLE_CAT</B> String => table catalog (may be null)     *    <LI><B>TABLE_SCHEM</B> String => table schema (may be null)     *    <LI><B>TABLE_NAME</B> String => table name     *    <LI><B>COLUMN_NAME</B> String => column name     *    <LI><B>GRANTOR</B> => grantor of access (may be null)     *    <LI><B>GRANTEE</B> String => grantee of access     *    <LI><B>PRIVILEGE</B> String => name of access (SELECT,     *      INSERT, UPDATE, REFRENCES, ...)     *    <LI><B>IS_GRANTABLE</B> String => "YES" if grantee is permitted     *      to grant to others; "NO" if not; null if unknown     *  </OL>     *     * @param catalog a catalog name; "" retrieves those without a catalog     * @param schema a schema name; "" retrieves those without a schema     * @param table a table name     * @param columnNamePattern a column name pattern     * @return ResultSet each row is a column privilege description     * @see #getSearchStringEscape     */    public java.sql.ResultSet getColumnPrivileges(String catalog, String schema,						  String table, String columnNamePattern) throws java.sql.SQLException     {	Field[] Fields = new Field[8];    	Fields[0]  = new Field("", "TABLE_CAT",    Types.CHAR,     1);	Fields[1]  = new Field("", "TABLE_SCHEM",  Types.CHAR,     1);	Fields[2]  = new Field("", "TABLE_NAME",   Types.CHAR,     1);	Fields[3]  = new Field("", "COLUMN_NAME",  Types.CHAR,     1);	Fields[4]  = new Field("", "GRANTOR",      Types.CHAR,     1);	Fields[5]  = new Field("", "GRANTEE",      Types.CHAR,     1);	Fields[6]  = new Field("", "PRIVILEGE",    Types.CHAR,     1); 	Fields[7]  = new Field("", "IS_GRANTABLE", Types.CHAR,     1);    	return new ResultSet(Fields, new Vector(), _Conn);    }    /**     * Get a description of the access rights for each table available     * in a catalog.     *     * <P>Only privileges matching the schema and table name     * criteria are returned.  They are ordered by TABLE_SCHEM,     * TABLE_NAME, and PRIVILEGE.     *     * <P>Each privilige description has the following columns:     *  <OL>     *    <LI><B>TABLE_CAT</B> String => table catalog (may be null)     *    <LI><B>TABLE_SCHEM</B> String => table schema (may be null)     *    <LI><B>TABLE_NAME</B> String => table name     *    <LI><B>COLUMN_NAME</B> String => column name     *    <LI><B>GRANTOR</B> => grantor of access (may be null)     *    <LI><B>GRANTEE</B> String => grantee of access     *    <LI><B>PRIVILEGE</B> String => name of access (SELECT,     *      INSERT, UPDATE, REFRENCES, ...)     *    <LI><B>IS_GRANTABLE</B> String => "YES" if grantee is permitted     *      to grant to others; "NO" if not; null if unknown     *  </OL>     *     * @param catalog a catalog name; "" retrieves those without a catalog     * @param schemaPattern a schema name pattern; "" retrieves those     * without a schema     * @param tableNamePattern a table name pattern     * @return ResultSet each row is a table privilege description     * @see #getSearchStringEscape     */    public java.sql.ResultSet getTablePrivileges(S

⌨️ 快捷键说明

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