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

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

?? databasemetadata.java

?? jsp數據庫系統
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
/*
   Copyright (C) 2002 MySQL AB

      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation; either version 2 of the License, or
      (at your option) any later version.

      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.Statement;
import java.sql.Types;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import java.util.TreeMap;


/**
 * JDBC Interface to Mysql functions
 * 
 * <p>
 * This class provides information about the database as a whole.
 * </p>
 * 
 * <p>
 * Many of the methods here return lists of information in ResultSets. You can
 * use the normal ResultSet methods such as getString and getInt to retrieve
 * the data from these ResultSets.  If a given form of metadata is not
 * available, these methods show throw a java.sql.SQLException.
 * </p>
 * 
 * <p>
 * Some of these methods take arguments that are String patterns.  These
 * methods all have names such as fooPattern.  Within a pattern String "%"
 * means match any substring of 0 or more characters and "_" means match any
 * one character.
 * </p>
 *
 * @author Mark Matthews
 * @version $Id: DatabaseMetaData.java,v 1.27.2.34 2004/02/04 02:47:36 mmatthew Exp $
 */
public class DatabaseMetaData implements java.sql.DatabaseMetaData {
    private static final byte[] TABLE_AS_BYTES = "TABLE".getBytes();

    /** The table type for generic tables that support foreign keys. */
    private static final String SUPPORTS_FK = "SUPPORTS_FK";

    //
    // Column indexes used by all DBMD foreign key
    // ResultSets
    //
    private static final int PKTABLE_CAT = 0;
    private static final int PKTABLE_SCHEM = 1;
    private static final int PKTABLE_NAME = 2;
    private static final int PKCOLUMN_NAME = 3;
    private static final int FKTABLE_CAT = 4;
    private static final int FKTABLE_SCHEM = 5;
    private static final int FKTABLE_NAME = 6;
    private static final int FKCOLUMN_NAME = 7;
    private static final int KEY_SEQ = 8;
    private static final int UPDATE_RULE = 9;
    private static final int DELETE_RULE = 10;
    private static final int FK_NAME = 11;
    private static final int PK_NAME = 12;
    private static final int DEFERRABILITY = 13;

    /** The connection to the database */
    private Connection conn;

    /** The 'current' database name being used */
    private String database = null;

    /** What character to use when quoting identifiers */
    private String quotedId = null;

    /**
     * Creates a new DatabaseMetaData object.
     *
     * @param conn DOCUMENT ME!
     * @param database DOCUMENT ME!
     */
    public DatabaseMetaData(Connection conn, String database) {
        this.conn = conn;
        this.database = database;

        try {
            this.quotedId = this.conn.supportsQuotedIdentifiers()
                ? getIdentifierQuoteString() : "";
        } catch (SQLException sqlEx) {
            // Forced by API, never thrown from getIdentifierQuoteString() in this
            // implementation.
            AssertionFailedException.shouldNotHappen(sqlEx);
        }
    }

    /**
     * @see DatabaseMetaData#getAttributes(String, String, String, String)
     */
    public java.sql.ResultSet getAttributes(String arg0, String arg1,
        String arg2, String arg3) throws SQLException {
        Field[] fields = new Field[21];
        fields[0] = new Field("", "TYPE_CAT", Types.CHAR, 32);
        fields[1] = new Field("", "TYPE_SCHEM", Types.CHAR, 32);
        fields[2] = new Field("", "TYPE_NAME", Types.CHAR, 32);
        fields[3] = new Field("", "ATTR_NAME", Types.CHAR, 32);
        fields[4] = new Field("", "DATA_TYPE", Types.SMALLINT, 32);
        fields[5] = new Field("", "ATTR_TYPE_NAME", Types.CHAR, 32);
        fields[6] = new Field("", "ATTR_SIZE", Types.INTEGER, 32);
        fields[7] = new Field("", "DECIMAL_DIGITS", Types.INTEGER, 32);
        fields[8] = new Field("", "NUM_PREC_RADIX", Types.INTEGER, 32);
        fields[9] = new Field("", "NULLABLE ", Types.INTEGER, 32);
        fields[10] = new Field("", "REMARKS", Types.CHAR, 32);
        fields[11] = new Field("", "ATTR_DEF", Types.CHAR, 32);
        fields[12] = new Field("", "SQL_DATA_TYPE", Types.INTEGER, 32);
        fields[13] = new Field("", "SQL_DATETIME_SUB", Types.INTEGER, 32);
        fields[14] = new Field("", "CHAR_OCTET_LENGTH", Types.INTEGER, 32);
        fields[15] = new Field("", "ORDINAL_POSITION", Types.INTEGER, 32);
        fields[16] = new Field("", "IS_NULLABLE", Types.CHAR, 32);
        fields[17] = new Field("", "SCOPE_CATALOG", Types.CHAR, 32);
        fields[18] = new Field("", "SCOPE_SCHEMA", Types.CHAR, 32);
        fields[19] = new Field("", "SCOPE_TABLE", Types.CHAR, 32);
        fields[20] = new Field("", "SOURCE_DATA_TYPE", Types.SMALLINT, 32);

        return buildResultSet(fields, new ArrayList());
    }

    /**
     * Get a description of a table's optimal set of columns that uniquely
     * identifies a row. They are ordered by SCOPE.
     * 
     * <P>
     * Each column description has the following columns:
     * 
     * <OL>
     * <li>
     * <B>SCOPE</B> short => actual scope of result
     * 
     * <UL>
     * <li>
     * bestRowTemporary - very temporary, while using row
     * </li>
     * <li>
     * bestRowTransaction - valid for remainder of current transaction
     * </li>
     * <li>
     * bestRowSession - valid for remainder of current session
     * </li>
     * </ul>
     * 
     * </li>
     * <li>
     * <B>COLUMN_NAME</B> String => column name
     * </li>
     * <li>
     * <B>DATA_TYPE</B> short => SQL data type from java.sql.Types
     * </li>
     * <li>
     * <B>TYPE_NAME</B> String => Data source dependent type name
     * </li>
     * <li>
     * <B>COLUMN_SIZE</B> int => precision
     * </li>
     * <li>
     * <B>BUFFER_LENGTH</B> int => not used
     * </li>
     * <li>
     * <B>DECIMAL_DIGITS</B> short  => scale
     * </li>
     * <li>
     * <B>PSEUDO_COLUMN</B> short => is this a pseudo column like an Oracle
     * ROWID
     * 
     * <UL>
     * <li>
     * bestRowUnknown - may or may not be pseudo column
     * </li>
     * <li>
     * bestRowNotPseudo - is NOT a pseudo column
     * </li>
     * <li>
     * bestRowPseudo - is a pseudo column
     * </li>
     * </ul>
     * 
     * </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 scope the scope of interest; use same values as SCOPE
     * @param nullable include columns that are nullable?
     *
     * @return ResultSet each row is a column description
     *
     * @throws java.sql.SQLException DOCUMENT ME!
     */
    public java.sql.ResultSet getBestRowIdentifier(String catalog,
        String schema, String table, int scope, boolean nullable)
        throws java.sql.SQLException {
        Field[] fields = new Field[8];
        fields[0] = new Field("", "SCOPE", Types.SMALLINT, 5);
        fields[1] = new Field("", "COLUMN_NAME", Types.CHAR, 32);
        fields[2] = new Field("", "DATA_TYPE", Types.SMALLINT, 32);
        fields[3] = new Field("", "TYPE_NAME", Types.CHAR, 32);
        fields[4] = new Field("", "COLUMN_SIZE", Types.INTEGER, 10);
        fields[5] = new Field("", "BUFFER_LENGTH", Types.INTEGER, 10);
        fields[6] = new Field("", "DECIMAL_DIGITS", Types.INTEGER, 10);
        fields[7] = new Field("", "PSEUDO_COLUMN", Types.SMALLINT, 5);

        String databasePart = "";

        if (catalog != null) {
            if (!catalog.equals("")) {
                databasePart = " FROM " + this.quotedId + catalog
                    + this.quotedId;
            }
        } else {
            databasePart = " FROM " + this.quotedId + this.database
                + this.quotedId;
        }

        if (table == null) {
            throw new java.sql.SQLException("Table not specified.", SQLError.SQL_STATE_ILLEGAL_ARGUMENT);
        }

        ResultSet results = null;
        Statement stmt = null;

        try {
            stmt = this.conn.createStatement();

			if (stmt.getMaxRows() != 0) {
				stmt.setMaxRows(0);
			}
			
            StringBuffer queryBuf = new StringBuffer("SHOW COLUMNS FROM ");
            queryBuf.append(this.quotedId);
            queryBuf.append(table);
            queryBuf.append(this.quotedId);
            queryBuf.append(databasePart);

            results = stmt.executeQuery(queryBuf.toString());

            ArrayList tuples = new ArrayList();

            while (results.next()) {
                String keyType = results.getString("Key");

                if (keyType != null) {
                    if (StringUtils.startsWithIgnoreCase(keyType, "PRI")) {
                        byte[][] rowVal = new byte[8][];
                        rowVal[0] = Integer.toString(java.sql.DatabaseMetaData.bestRowSession)
                                           .getBytes();
                        rowVal[1] = results.getBytes("Field");

                        String type = results.getString("Type");
                        int size = MysqlIO.getMaxBuf();
                        int decimals = 0;

                        /*
                         * Parse the Type column from MySQL
                         */
                        if (type.indexOf("enum") != -1) {
                            String temp = type.substring(type.indexOf("("),
                                    type.indexOf(")"));
                            java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(temp,
                                    ",");
                            int maxLength = 0;

                            while (tokenizer.hasMoreTokens()) {
                                maxLength = Math.max(maxLength,
                                        (tokenizer.nextToken().length() - 2));
                            }

                            size = maxLength;
                            decimals = 0;
                            type = "enum";
                        } else if (type.indexOf("(") != -1) {
                            if (type.indexOf(",") != -1) {
                                size = Integer.parseInt(type.substring(type
                                            .indexOf("(") + 1, type.indexOf(",")));
                                decimals = Integer.parseInt(type.substring(type
                                            .indexOf(",") + 1, type.indexOf(")")));
                            } else {
                                size = Integer.parseInt(type.substring(type
                                            .indexOf("(") + 1, type.indexOf(")")));
                            }

                            type = type.substring(type.indexOf("("));
                        }

                        rowVal[2] = new byte[0]; // FIXME!
                        rowVal[3] = s2b(type);
                        rowVal[4] = Integer.toString(size + decimals).getBytes();
                        rowVal[5] = Integer.toString(size + decimals).getBytes();
                        rowVal[6] = Integer.toString(decimals).getBytes();
                        rowVal[7] = Integer.toString(java.sql.DatabaseMetaData.bestRowNotPseudo)
                                           .getBytes();
                        tuples.add(rowVal);
                    }
                }
            }

            return buildResultSet(fields, tuples);
        } finally {
            if (results != null) {
                try {
                    results.close();
                } catch (Exception ex) {
                    ;
                }

                results = null;
            }

            if (stmt != null) {
                try {
                    stmt.close();
                } catch (Exception ex) {
                    ;
                }

                stmt = null;
            }
        }
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜视频在线观看| 欧美日韩免费视频| 成人av午夜电影| 欧美日韩精品欧美日韩精品| 久久久蜜臀国产一区二区| 一个色综合av| 成人国产亚洲欧美成人综合网| 国产精品国产三级国产aⅴ原创| 偷拍与自拍一区| 91免费视频网| 中文字幕精品三区| 国内精品国产三级国产a久久| 欧美日韩在线播放三区| 人人狠狠综合久久亚洲| 欧美伊人久久久久久久久影院| 国产日韩欧美综合一区| 免费精品99久久国产综合精品| 欧美v日韩v国产v| 99re视频这里只有精品| 99国产精品视频免费观看| 一区二区三区日韩精品视频| 欧美日韩国产综合久久| 国产一区视频导航| 精品国产制服丝袜高跟| 久久福利资源站| 日韩久久精品一区| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美日韩中文一区| 蜜乳av一区二区| 亚洲欧洲国产日韩| 99re热视频精品| 日本不卡不码高清免费观看| 久久久久88色偷偷免费| 在线精品视频小说1| 午夜精品成人在线视频| 国产欧美一区二区在线| 欧美日韩中文精品| 波多野结衣中文字幕一区二区三区 | gogogo免费视频观看亚洲一| 国产欧美一区二区精品性| 欧美专区在线观看一区| 国产成人午夜精品5599| 1区2区3区精品视频| 日韩欧美综合一区| 国产一区二区成人久久免费影院| 伊人色综合久久天天| 欧美日韩一级黄| 成人精品鲁一区一区二区| 亚洲丝袜精品丝袜在线| 色婷婷久久久综合中文字幕| 一区二区三区四区高清精品免费观看| 日韩精品一区二区三区四区视频| 日本道精品一区二区三区| 三级不卡在线观看| 欧美精品一区二区精品网| 国产人妖乱国产精品人妖| 国产成人综合在线| 黄色成人免费在线| 日韩av中文在线观看| 国产欧美精品国产国产专区| 欧美老人xxxx18| 国产成人免费在线观看不卡| 日韩精品一二区| 亚洲福利电影网| 亚洲国产日韩一级| 亚洲美女区一区| 精品久久久久久亚洲综合网| 欧美久久久久久久久中文字幕| 日本乱人伦aⅴ精品| 91黄色小视频| 欧美亚洲综合一区| 欧美日韩免费一区二区三区视频| 欧美中文字幕亚洲一区二区va在线 | 久久久国产精品麻豆| 久久久亚洲欧洲日产国码αv| 精品久久久久久久久久久久包黑料| 欧美疯狂做受xxxx富婆| 欧美一区二区三区四区五区| 成人午夜视频免费看| 国产精品18久久久久久vr| 亚洲成av人片| 中文一区二区完整视频在线观看 | 91国产免费看| 欧美日韩综合色| 欧美一区二区免费视频| 欧美va亚洲va香蕉在线| 久久先锋影音av鲁色资源| 国产人妖乱国产精品人妖| 国产精品久久久久毛片软件| 亚洲欧美二区三区| 亚洲一二三级电影| 日本中文字幕不卡| 国模套图日韩精品一区二区| 成人av网站大全| 欧洲精品一区二区三区在线观看| 欧美精品久久99久久在免费线| 日韩精品一区二区三区四区| 国产午夜精品一区二区| 日韩免费观看高清完整版在线观看| 51久久夜色精品国产麻豆| 91精彩视频在线观看| 欧美日韩www| 26uuu亚洲综合色欧美| 中文字幕在线不卡一区| 亚洲成av人片一区二区梦乃| 极品销魂美女一区二区三区| 青青草国产成人av片免费| 国产精品一区一区三区| 91啪九色porn原创视频在线观看| 欧美中文字幕一二三区视频| 欧美成人vps| 亚洲精品国产一区二区三区四区在线| 亚州成人在线电影| 国产精品羞羞答答xxdd| 欧美视频中文一区二区三区在线观看| 日韩视频一区二区三区在线播放| 中文子幕无线码一区tr| 香蕉乱码成人久久天堂爱免费| 国产乱码精品一区二区三区av| 色婷婷综合在线| 久久在线观看免费| 国产精品99久久久| 精品久久久久久久人人人人传媒| 久久久久久麻豆| 亚洲综合在线免费观看| 99国产精品久久久| 日韩欧美黄色影院| 国产成a人亚洲精品| 国产成人午夜电影网| 久久先锋影音av| 99久久婷婷国产| 精品国产伦一区二区三区观看体验 | 亚洲人成网站在线| 成人免费精品视频| 国产精品电影院| k8久久久一区二区三区 | 国产亚洲人成网站| 国产成人自拍网| 日本一区免费视频| 成人国产精品视频| 自拍偷拍欧美精品| 欧美午夜视频网站| 天堂精品中文字幕在线| 91精品国产高清一区二区三区| 免费成人在线观看| 久久午夜老司机| 99久久久国产精品| 亚洲国产欧美一区二区三区丁香婷| 欧美日精品一区视频| 日本人妖一区二区| 精品久久久久久久久久久久久久久 | 久久综合国产精品| 成人黄色在线看| 一区二区国产视频| 91精品婷婷国产综合久久竹菊| 日本欧美一区二区三区乱码| 欧美精品一区二区三区一线天视频| 国产精品一区二区x88av| 国产精品久久一卡二卡| 欧美性一区二区| 狠狠色综合日日| 成人欧美一区二区三区| 欧美日本精品一区二区三区| 毛片av一区二区| 国产精品乱人伦一区二区| 亚洲大片一区二区三区| 日韩欧美另类在线| 国产91精品露脸国语对白| 亚洲欧美激情插| 欧美大度的电影原声| 本田岬高潮一区二区三区| 亚洲成人av一区二区三区| 精品成人一区二区三区四区| 99精品国产99久久久久久白柏 | 性感美女极品91精品| 久久午夜电影网| 欧美偷拍一区二区| 国产一区二区按摩在线观看| 亚洲三级在线免费| 日韩精品中文字幕在线不卡尤物 | 一区二区在线观看免费| 日韩一区二区三区精品视频 | 欧美一级二级在线观看| 99这里只有久久精品视频| 日本在线观看不卡视频| 成人欧美一区二区三区白人| 日韩免费视频一区| 欧美亚洲国产一区二区三区va| 国产在线视频不卡二| 亚洲在线观看免费视频| 中文字幕欧美区| 日韩一区二区电影网| 一本色道久久综合亚洲精品按摩| 国产真实乱子伦精品视频| 亚洲第一激情av| 亚洲天堂成人在线观看| 久久综合丝袜日本网| 欧美日韩不卡视频| 色域天天综合网| 国产成人精品aa毛片|