亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? databasemetadatausinginfoschema.java

?? 用于JAVA數據庫連接.解壓就可用,方便得很
?? JAVA
?? 第 1 頁 / 共 4 頁
字號:
/*
 Copyright (C) 2005-2007 MySQL AB

 This program is free software; you can redistribute it and/or modify
 it under the terms of version 2 of the GNU General Public License as 
 published by the Free Software Foundation.

 There are special exceptions to the terms and conditions of the GPL 
 as it is applied to this software. View the full text of the 
 exception in file EXCEPTIONS-CONNECTOR-J in the directory of this 
 software distribution.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

 */
package com.mysql.jdbc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

/**
 * DatabaseMetaData implementation that uses INFORMATION_SCHEMA available in
 * MySQL-5.0 and newer.
 * 
 * The majority of the queries in this code were built for Connector/OO.org by
 * Georg Richter (georg_at_mysql.com).
 */
public class DatabaseMetaDataUsingInfoSchema extends DatabaseMetaData {

	private boolean hasReferentialConstraintsView;

	protected DatabaseMetaDataUsingInfoSchema(ConnectionImpl connToSet,
			String databaseToSet) throws SQLException {
		super(connToSet, databaseToSet);
		
		this.hasReferentialConstraintsView = 
			this.conn.versionMeetsMinimum(5, 1, 10);
	}

	private ResultSet executeMetadataQuery(PreparedStatement pStmt)
			throws SQLException {
		ResultSet rs = pStmt.executeQuery();
		((com.mysql.jdbc.ResultSetInternalMethods) rs).setOwningStatement(null);

		return rs;
	}

	/**
	 * 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>
	 * <P>
	 * Each privilige description has the following columns:
	 * <OL>
	 * <li> <B>TABLE_CAT</B> String => table catalog (may be null) </li>
	 * <li> <B>TABLE_SCHEM</B> String => table schema (may be null) </li>
	 * <li> <B>TABLE_NAME</B> String => table name </li>
	 * <li> <B>COLUMN_NAME</B> String => column name </li>
	 * <li> <B>GRANTOR</B> => grantor of access (may be null) </li>
	 * <li> <B>GRANTEE</B> String => grantee of access </li>
	 * <li> <B>PRIVILEGE</B> String => name of access (SELECT, INSERT, UPDATE,
	 * REFRENCES, ...) </li>
	 * <li> <B>IS_GRANTABLE</B> String => "YES" if grantee is permitted to
	 * grant to others; "NO" if not; null if unknown </li>
	 * </ol>
	 * </p>
	 * 
	 * @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
	 * @throws SQLException
	 *             if a database access error occurs
	 * @see #getSearchStringEscape
	 */
	public java.sql.ResultSet getColumnPrivileges(String catalog,
			String schema, String table, String columnNamePattern)
			throws SQLException {
		if (columnNamePattern == null) {
			if (this.conn.getNullNamePatternMatchesAll()) {
				columnNamePattern = "%";
			} else {
				throw SQLError.createSQLException(
						"Column name pattern can not be NULL or empty.",
						SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
			}
		}

		if (catalog == null) {
			if (this.conn.getNullCatalogMeansCurrent()) {
				catalog = this.database;
			}	
		}
		
		String sql = "SELECT TABLE_SCHEMA AS TABLE_CAT, NULL AS TABLE_SCHEM, TABLE_NAME,"
			 +"COLUMN_NAME, NULL AS GRANTOR, GRANTEE, PRIVILEGE_TYPE AS PRIVILEGE, IS_GRANTABLE FROM "
			 + "INFORMATION_SCHEMA.COLUMN_PRIVILEGES WHERE "
			 + "TABLE_SCHEMA LIKE ? AND "
			 + "TABLE_NAME =? AND COLUMN_NAME LIKE ? ORDER BY " 
			 + "COLUMN_NAME, PRIVILEGE_TYPE";
		
		PreparedStatement pStmt = null;
		
		try {
			pStmt = prepareMetaDataSafeStatement(sql);
			
			if (catalog != null) {
				pStmt.setString(1, catalog);
			} else {
				pStmt.setString(1, "%");
			}
			
			pStmt.setString(2, table);
			pStmt.setString(3, columnNamePattern);
			
			ResultSet rs = executeMetadataQuery(pStmt);
			((com.mysql.jdbc.ResultSetInternalMethods) rs).redefineFieldsForDBMD(new Field[] {
					new Field("", "TABLE_CAT", Types.CHAR, 64),
					new Field("", "TABLE_SCHEM", Types.CHAR, 1),
					new Field("", "TABLE_NAME", Types.CHAR, 64),
					new Field("", "COLUMN_NAME", Types.CHAR, 64),
					new Field("", "GRANTOR", Types.CHAR, 77),
					new Field("", "GRANTEE", Types.CHAR, 77),
					new Field("", "PRIVILEGE", Types.CHAR, 64),
					new Field("", "IS_GRANTABLE", Types.CHAR, 3)});
			
			return rs;
		} finally {
			if (pStmt != null) {
				pStmt.close();
			}
		}
	}

	/**
	 * 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>
	 * <P>
	 * Each column description has the following columns:
	 * <OL>
	 * <li> <B>TABLE_CAT</B> String => table catalog (may be null) </li>
	 * <li> <B>TABLE_SCHEM</B> String => table schema (may be null) </li>
	 * <li> <B>TABLE_NAME</B> String => table name </li>
	 * <li> <B>COLUMN_NAME</B> String => column name </li>
	 * <li> <B>DATA_TYPE</B> short => SQL type from java.sql.Types </li>
	 * <li> <B>TYPE_NAME</B> String => Data source dependent type name </li>
	 * <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>
	 * <li> <B>BUFFER_LENGTH</B> is not used. </li>
	 * <li> <B>DECIMAL_DIGITS</B> int => the number of fractional digits </li>
	 * <li> <B>NUM_PREC_RADIX</B> int => Radix (typically either 10 or 2) </li>
	 * <li> <B>NULLABLE</B> int => is NULL allowed?
	 * <UL>
	 * <li> columnNoNulls - might not allow NULL values </li>
	 * <li> columnNullable - definitely allows NULL values </li>
	 * <li> columnNullableUnknown - nullability unknown </li>
	 * </ul>
	 * </li>
	 * <li> <B>REMARKS</B> String => comment describing column (may be null)
	 * </li>
	 * <li> <B>COLUMN_DEF</B> String => default value (may be null) </li>
	 * <li> <B>SQL_DATA_TYPE</B> int => unused </li>
	 * <li> <B>SQL_DATETIME_SUB</B> int => unused </li>
	 * <li> <B>CHAR_OCTET_LENGTH</B> int => for char types the maximum number
	 * of bytes in the column </li>
	 * <li> <B>ORDINAL_POSITION</B> int => index of column in table (starting
	 * at 1) </li>
	 * <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. </li>
	 * </ol>
	 * </p>
	 */
	public ResultSet getColumns(String catalog, String schemaPattern,
			String tableName, String columnNamePattern) throws SQLException {
		if (columnNamePattern == null) {
			if (this.conn.getNullNamePatternMatchesAll()) {
				columnNamePattern = "%";
			} else {
				throw SQLError.createSQLException(
						"Column name pattern can not be NULL or empty.",
						SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
			}
		}

		if (catalog == null) {
			if (this.conn.getNullCatalogMeansCurrent()) {
				catalog = this.database;
			}
		}

		StringBuffer sqlBuf = new StringBuffer("SELECT "
				+ "TABLE_SCHEMA AS TABLE_CAT, " + "NULL AS TABLE_SCHEM,"
				+ "TABLE_NAME," + "COLUMN_NAME,");
		MysqlDefs.appendJdbcTypeMappingQuery(sqlBuf, "DATA_TYPE");

		sqlBuf.append(" AS DATA_TYPE, ");

		if (conn.getCapitalizeTypeNames()) {
			sqlBuf.append("UPPER(CASE WHEN LOCATE('unsigned', COLUMN_TYPE) != 0 AND LOCATE('unsigned', DATA_TYPE) = 0 THEN CONCAT(DATA_TYPE, ' unsigned') ELSE DATA_TYPE END) AS TYPE_NAME,");
		} else {
			sqlBuf.append("CASE WHEN LOCATE('unsigned', COLUMN_TYPE) != 0 AND LOCATE('unsigned', DATA_TYPE) = 0 THEN CONCAT(DATA_TYPE, ' unsigned') ELSE DATA_TYPE END AS TYPE_NAME,");
		}

		sqlBuf
				.append("CASE WHEN CHARACTER_MAXIMUM_LENGTH IS NULL THEN NUMERIC_PRECISION ELSE CASE WHEN CHARACTER_MAXIMUM_LENGTH > " 
						+ Integer.MAX_VALUE + " THEN " + Integer.MAX_VALUE + 
						" ELSE CHARACTER_MAXIMUM_LENGTH END END AS COLUMN_SIZE, "
						+ MysqlIO.getMaxBuf() + " AS BUFFER_LENGTH,"
						+ "NUMERIC_SCALE AS DECIMAL_DIGITS,"
						+ "10 AS NUM_PREC_RADIX,"
						+ "CASE WHEN IS_NULLABLE='NO' THEN " + columnNoNulls + " ELSE CASE WHEN IS_NULLABLE='YES' THEN " + columnNullable + " ELSE " + columnNullableUnknown + " END END AS NULLABLE,"
						+ "COLUMN_COMMENT AS REMARKS,"
						+ "COLUMN_DEFAULT AS COLUMN_DEF,"
						+ "0 AS SQL_DATA_TYPE,"
						+ "0 AS SQL_DATETIME_SUB,"
						+ "CASE WHEN CHARACTER_OCTET_LENGTH > " + Integer.MAX_VALUE + " THEN " + Integer.MAX_VALUE + " ELSE CHARACTER_OCTET_LENGTH END AS CHAR_OCTET_LENGTH,"
						+ "ORDINAL_POSITION,"
						+ "IS_NULLABLE,"
						+ "NULL AS SCOPE_CATALOG,"
						+ "NULL AS SCOPE_SCHEMA,"
						+ "NULL AS SCOPE_TABLE,"
						+ "NULL AS SOURCE_DATA_TYPE,"
						+ "IF (EXTRA LIKE '%auto_increment%','YES','NO') AS IS_AUTOINCREMENT "
						+ "FROM INFORMATION_SCHEMA.COLUMNS WHERE "
						+ "TABLE_SCHEMA LIKE ? AND "
						+ "TABLE_NAME LIKE ? AND COLUMN_NAME LIKE ? "
						+ "ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION");

		PreparedStatement pStmt = null;

		try {
			pStmt = prepareMetaDataSafeStatement(sqlBuf.toString());
			
			if (catalog != null) {
				pStmt.setString(1, catalog);
			} else {
				pStmt.setString(1, "%");
			}
			
			pStmt.setString(2, tableName);
			pStmt.setString(3, columnNamePattern);

			ResultSet rs = executeMetadataQuery(pStmt);

			((com.mysql.jdbc.ResultSetInternalMethods) rs).redefineFieldsForDBMD(new Field[] {
					new Field("", "TABLE_CAT", Types.CHAR, 255),
					new Field("", "TABLE_SCHEM", Types.CHAR, 0),
					new Field("", "TABLE_NAME", Types.CHAR, 255),
					new Field("", "COLUMN_NAME", Types.CHAR, 32),
					new Field("", "DATA_TYPE", Types.SMALLINT, 5),
					new Field("", "TYPE_NAME", Types.CHAR, 16),
					new Field("", "COLUMN_SIZE", Types.INTEGER, Integer
							.toString(Integer.MAX_VALUE).length()),
					new Field("", "BUFFER_LENGTH", Types.INTEGER, 10),
					new Field("", "DECIMAL_DIGITS", Types.INTEGER, 10),
					new Field("", "NUM_PREC_RADIX", Types.INTEGER, 10),
					new Field("", "NULLABLE", Types.INTEGER, 10),
					new Field("", "REMARKS", Types.CHAR, 0),
					new Field("", "COLUMN_DEF", Types.CHAR, 0),
					new Field("", "SQL_DATA_TYPE", Types.INTEGER, 10),
					new Field("", "SQL_DATETIME_SUB", Types.INTEGER, 10),
					new Field("", "CHAR_OCTET_LENGTH", Types.INTEGER, Integer
							.toString(Integer.MAX_VALUE).length()),
					new Field("", "ORDINAL_POSITION", Types.INTEGER, 10),
					new Field("", "IS_NULLABLE", Types.CHAR, 3),
					new Field("", "SCOPE_CATALOG", Types.CHAR, 255),
					new Field("", "SCOPE_SCHEMA", Types.CHAR, 255),
					new Field("", "SCOPE_TABLE", Types.CHAR, 255),
					new Field("", "SOURCE_DATA_TYPE", Types.SMALLINT, 10),
					new Field("", "IS_AUTOINCREMENT", Types.CHAR, 3) });
			return rs;
		} finally {
			if (pStmt != null) {
				pStmt.close();
			}
		}
	}

	/**
	 * Get a description of the foreign key columns in the foreign key table
	 * that reference the primary key columns of the primary key table (describe
	 * how one table imports another's key.) This should normally return a
	 * single foreign key/primary key pair (most tables only import a foreign
	 * key from a table once.) They are ordered by FKTABLE_CAT, FKTABLE_SCHEM,
	 * FKTABLE_NAME, and KEY_SEQ.
	 * <P>
	 * Each foreign key column description has the following columns:
	 * <OL>
	 * <li> <B>PKTABLE_CAT</B> String => primary key table catalog (may be
	 * null) </li>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲日韩欧美一区二区在线| 欧美日韩精品一区二区天天拍小说| 不卡影院免费观看| 欧洲精品在线观看| 日韩午夜在线观看视频| 久久精品视频免费观看| 一区二区欧美视频| 韩国三级中文字幕hd久久精品| 不卡在线观看av| 日韩欧美成人激情| 亚洲美女少妇撒尿| 国产一区二区精品久久91| 在线观看一区二区视频| 久久久久久久网| 亚洲国产三级在线| 福利一区福利二区| 日韩欧美电影一区| 亚洲乱码精品一二三四区日韩在线 | 亚洲综合色在线| 国产一区二区精品久久99| 精品视频在线免费| 国产精品美女一区二区| 麻豆精品久久久| 欧美亚洲国产bt| 中国色在线观看另类| 秋霞av亚洲一区二区三| 91免费在线播放| 国产日韩欧美电影| 日本欧美肥老太交大片| 日本丶国产丶欧美色综合| 久久亚洲一区二区三区明星换脸| 一区二区三区欧美久久| 成人免费看片app下载| 日韩无一区二区| 亚洲一区二区三区中文字幕| 成人免费视频app| 精品国偷自产国产一区| 亚洲成人综合网站| 日韩精品一区二区三区四区| 亚洲国产一区在线观看| 97久久久精品综合88久久| 久久免费的精品国产v∧| 免费在线观看不卡| 欧美日韩精品一区二区三区| 亚洲欧美日韩人成在线播放| 成人中文字幕合集| 久久精品夜色噜噜亚洲aⅴ| 美女视频一区在线观看| 欧美精三区欧美精三区| 亚洲国产一区视频| 在线亚洲人成电影网站色www| 亚洲欧洲国产日韩| 99热99精品| 国产精品美女久久久久aⅴ| 国产成人av一区二区三区在线| 日韩久久久精品| 老色鬼精品视频在线观看播放| 欧美丰满少妇xxxxx高潮对白| 亚洲国产精品麻豆| 欧美三级欧美一级| 亚洲成a人片在线不卡一二三区 | 一区二区三区四区五区视频在线观看| 国产不卡免费视频| 中文字幕欧美日韩一区| 成人蜜臀av电影| 国产精品美女久久福利网站| 99视频有精品| 亚洲视频一区在线| 一本一道久久a久久精品 | 欧美日韩久久久一区| 亚洲一区二区在线播放相泽| 欧美在线视频日韩| 亚洲韩国精品一区| 欧美欧美欧美欧美| 蜜臀av性久久久久蜜臀aⅴ| 欧美一区二区三区小说| 美女诱惑一区二区| 精品999久久久| 国产精品一区不卡| 国产精品传媒在线| 91黄色小视频| 日本 国产 欧美色综合| 欧美本精品男人aⅴ天堂| 国产精品资源网站| 日本一区二区不卡视频| 91美女福利视频| 亚洲不卡在线观看| 日韩欧美国产综合| 国产成人免费视| 国产精品久久久久久户外露出| 99国产精品久久久久久久久久久| 亚洲另类在线视频| 91麻豆精品国产91久久久久| 精品系列免费在线观看| 欧美国产欧美综合| 在线欧美日韩精品| 免费一级片91| 国产精品免费网站在线观看| 在线免费观看不卡av| 日韩成人精品在线观看| 久久久不卡网国产精品一区| 99精品桃花视频在线观看| 亚洲成人激情av| 久久男人中文字幕资源站| 精品国产一区二区亚洲人成毛片 | 国产精品美女久久久久高潮| 在线观看亚洲一区| 老司机午夜精品99久久| 国产精品三级av在线播放| 欧美亚洲国产一区在线观看网站| 久久99蜜桃精品| 亚洲欧美日韩精品久久久久| 91精品国产色综合久久| www..com久久爱| 日韩中文字幕一区二区三区| 久久久久9999亚洲精品| 欧美日韩一级视频| 国产成人综合在线| 丝袜美腿一区二区三区| 国产精品天美传媒沈樵| 欧美片在线播放| av电影在线观看不卡| 美女视频一区二区三区| 亚洲激情六月丁香| 久久老女人爱爱| 欧美精品三级日韩久久| 成人性生交大片免费看中文| 五月婷婷综合激情| 亚洲欧洲一区二区在线播放| 欧美一区二区三区播放老司机| 99久久伊人精品| 黑人巨大精品欧美黑白配亚洲| 亚洲美女一区二区三区| 久久精品亚洲精品国产欧美| 欧美乱妇一区二区三区不卡视频| 国产不卡在线一区| 日本女优在线视频一区二区| 悠悠色在线精品| 国产午夜亚洲精品羞羞网站| 91精品国产综合久久精品app| 99久久综合精品| 国内国产精品久久| 日韩av网站免费在线| 亚洲美女偷拍久久| 国产精品嫩草99a| 久久综合狠狠综合久久激情 | 日本在线不卡视频| 亚洲综合视频网| 国产精品传媒入口麻豆| 久久综合九色综合欧美98| 日韩一区二区在线播放| 欧美日韩一区中文字幕| 色综合久久中文综合久久97| 成人h精品动漫一区二区三区| 精品一区二区日韩| 日韩电影一二三区| 性做久久久久久免费观看欧美| 国产精品不卡一区| 中文字幕欧美日韩一区| 久久久三级国产网站| 欧美变态tickling挠脚心| 欧美一区二区免费观在线| 国产日韩av一区二区| 欧美成人官网二区| 在线综合视频播放| 欧美精品色一区二区三区| 欧美日韩中文精品| 欧美日韩国产首页| 欧美三级三级三级爽爽爽| 欧美性大战久久久| 精品视频一区三区九区| 91黄视频在线观看| 欧美网站大全在线观看| 91国产精品成人| 在线观看区一区二| 在线看日韩精品电影| 精品视频资源站| 欧美精品v日韩精品v韩国精品v| 欧美三级一区二区| 欧美日韩不卡一区二区| 91精品午夜视频| 日韩三级中文字幕| 日韩视频一区二区三区在线播放 | 国产91精品在线观看| 国产精品18久久久久久久久| 国产麻豆欧美日韩一区| 国产91在线观看丝袜| aaa欧美大片| 色婷婷精品久久二区二区蜜臂av| 91久久精品一区二区| 欧美在线观看一区| 欧美日韩高清一区二区不卡| 欧美人狂配大交3d怪物一区| 日韩西西人体444www| 久久久久99精品一区| 国产精品久久久久久久蜜臀| 亚洲欧美视频在线观看| 亚洲韩国精品一区| 久久精品国产一区二区| 国产激情视频一区二区三区欧美|