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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? databasemetadatausinginfoschema.java

?? 用于JAVA數(shù)據(jù)庫連接.解壓就可用,方便得很
?? 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>

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片一区二区| 91精品国产日韩91久久久久久| 图片区小说区区亚洲影院| 中文字幕中文字幕中文字幕亚洲无线| 日韩一区二区免费在线观看| 欧美视频一区二区三区| 色综合天天综合网天天狠天天 | 国产乱对白刺激视频不卡| 日韩精品乱码免费| 亚洲综合图片区| 亚洲精品视频在线观看免费| 国产精品电影一区二区三区| 综合激情成人伊人| 亚洲色图色小说| 亚洲视频中文字幕| 亚洲一区二区三区美女| 一区二区三区精品在线观看| 亚洲乱码国产乱码精品精98午夜 | 制服丝袜成人动漫| 69久久夜色精品国产69蝌蚪网| 精品视频在线免费看| 欧美伊人久久久久久午夜久久久久| 91网站在线播放| 欧美中文字幕一区| 欧美日韩精品系列| 日韩一区二区在线看片| 日韩欧美国产小视频| 欧美成人午夜电影| 国产亚洲精品中文字幕| 国产精品伦理在线| 亚洲人被黑人高潮完整版| 一区二区三区四区不卡视频| 亚洲一区二区三区四区中文字幕| 亚洲妇女屁股眼交7| 日本不卡一二三区黄网| 国产综合久久久久影院| 高清成人在线观看| 日本高清成人免费播放| 欧美精品一二三四| 精品福利在线导航| 国产精品久久久久婷婷二区次| 樱花影视一区二区| 免费看日韩精品| 懂色av一区二区在线播放| 色综合天天综合网天天看片| 欧美日本乱大交xxxxx| 精品日韩99亚洲| 中文av一区特黄| 午夜视频在线观看一区二区| 国产在线一区二区| 91在线精品一区二区| 欧美精品一二三| 国产精品美女久久久久aⅴ| 亚洲一区在线观看视频| 国产一区二区在线视频| 色天天综合久久久久综合片| 日韩午夜小视频| 国产精品久久国产精麻豆99网站| 三级欧美在线一区| 成人激情综合网站| 欧美精品v国产精品v日韩精品| 久久久国产午夜精品| 亚洲成人免费视频| 成人午夜在线视频| 7777精品久久久大香线蕉| 欧美国产综合一区二区| 日韩影院免费视频| 不卡的av电影在线观看| 欧美一区二区大片| 综合久久综合久久| 狠狠色丁香久久婷婷综| 在线欧美日韩精品| 中文字幕第一区第二区| 免费av网站大全久久| 一本色道久久综合精品竹菊| 精品国产乱码久久久久久图片| 亚洲一区二区高清| 99视频精品全部免费在线| 精品88久久久久88久久久| 亚洲在线一区二区三区| 成人午夜私人影院| 精品国产一二三| 亚洲国产裸拍裸体视频在线观看乱了| 大美女一区二区三区| 日韩午夜激情av| 午夜伊人狠狠久久| 91论坛在线播放| 欧美国产一区二区| 韩国精品在线观看| 日韩午夜精品电影| 午夜激情久久久| 99riav一区二区三区| 国产无一区二区| 国产一区二区三区日韩| 日韩欧美在线1卡| 亚洲国产精品人人做人人爽| 97精品久久久久中文字幕| 亚洲国产成人私人影院tom| 强制捆绑调教一区二区| 欧美午夜一区二区三区免费大片| 亚洲日本一区二区三区| 波多野结衣视频一区| 久久蜜桃av一区二区天堂 | 欧美午夜一区二区| 亚洲色图欧美激情| 99r国产精品| 中文字幕日韩av资源站| 粉嫩一区二区三区在线看| 26uuu成人网一区二区三区| 麻豆精品在线视频| 日韩欧美一区二区免费| 美女视频网站久久| 日韩一区二区在线播放| 蜜臀国产一区二区三区在线播放 | 欧洲av一区二区嗯嗯嗯啊| 亚洲精品欧美综合四区| 成年人网站91| 国产精品动漫网站| 日本精品裸体写真集在线观看 | 亚洲综合图片区| 欧美影视一区在线| 欧美一区二区久久久| 蜜桃视频免费观看一区| 欧美久久一区二区| 视频一区视频二区在线观看| 欧美精品vⅰdeose4hd| 欧美aaaaa成人免费观看视频| 日韩欧美一区二区久久婷婷| 激情五月播播久久久精品| 久久久久久久久久久久久女国产乱 | 亚洲精品第1页| 欧美性做爰猛烈叫床潮| 午夜电影久久久| 欧美一级日韩不卡播放免费| 国内精品视频666| 欧美国产禁国产网站cc| 色婷婷久久久亚洲一区二区三区| 亚洲一区二区成人在线观看| 欧美日韩视频在线一区二区| 免费看日韩精品| 国产精品色哟哟网站| 91官网在线观看| 日韩成人精品在线| 国产午夜精品久久久久久久| 91老师国产黑色丝袜在线| 亚洲444eee在线观看| 久久综合色天天久久综合图片| 国产91清纯白嫩初高中在线观看| 亚洲人亚洲人成电影网站色| 欧美日韩成人在线| 国产精品1区2区3区| 亚洲日本va在线观看| 51精品国自产在线| 国产东北露脸精品视频| 亚洲尤物视频在线| 久久综合色婷婷| 91福利视频久久久久| 久久机这里只有精品| 中文字幕中文字幕中文字幕亚洲无线| 欧美午夜不卡在线观看免费| 国产一区欧美二区| 一区二区三区四区视频精品免费 | 日韩欧美一级在线播放| 成人99免费视频| 热久久国产精品| 国产精品高潮呻吟| 日韩女优电影在线观看| 成人91在线观看| 久久机这里只有精品| 亚洲黄色av一区| 亚洲精品一区二区三区福利| 色综合中文字幕国产 | 欧美aⅴ一区二区三区视频| 中文字幕av免费专区久久| 欧美日韩午夜精品| 不卡大黄网站免费看| 久久成人羞羞网站| 亚洲伊人色欲综合网| 欧美国产精品劲爆| 欧美电影免费观看高清完整版在线 | 蜜桃视频在线一区| 亚洲精品欧美二区三区中文字幕| 精品久久久三级丝袜| 欧美日韩午夜在线| 91香蕉视频污在线| 国产成人aaaa| 青青草国产成人99久久| 亚洲另类色综合网站| 久久精品日产第一区二区三区高清版 | 欧美视频在线观看一区| 懂色av一区二区三区蜜臀| 蜜臀精品久久久久久蜜臀| 亚洲一二三级电影| 中文字幕在线一区| 久久精品男人天堂av| 日韩精品专区在线影院重磅| 欧美视频日韩视频在线观看| 色综合视频一区二区三区高清| 粉嫩欧美一区二区三区高清影视| 韩国av一区二区三区四区|