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

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

?? jdbcmetadata.java.txt

?? 非常棒的java數據庫
?? TXT
字號:
/*
 * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved
 *
 * This file is part of Resin(R) Open Source
 *
 * Each copy or derived work must preserve the copyright notice and this
 * notice unmodified.
 *
 * Resin Open Source 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.
 *
 * Resin Open Source 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, or any warranty
 * of NON-INFRINGEMENT.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Resin Open Source; if not, write to the
 *
 *   Free Software Foundation, Inc.
 *   59 Temple Place, Suite 330
 *   Boston, MA 02111-1307  USA
 *
 * @author Scott Ferguson
 */

package com.caucho.jdbc;

import com.caucho.util.L10N;
import com.caucho.util.Log;

import javax.sql.DataSource;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Abstract way of grabbing data from the JDBC connection.
 */
public class JdbcMetaData {
  private static final L10N L = new L10N(JdbcMetaData.class);
  private static final Logger log = Log.open(JdbcMetaData.class);

  private DataSource _ds;

  /**
   * Create a new JDBC backing store.
   */
  protected JdbcMetaData(DataSource ds)
  {
    _ds = ds;
  }

  /**
   * Create based on the connection.
   */
  public static JdbcMetaData create(DataSource ds)
  {
    Connection conn = null;

    try {
      conn = ds.getConnection();

      DatabaseMetaData md = conn.getMetaData();

      String name = md.getDatabaseProductName();

      log.fine(L.l("Database '{0}' metadata.", name));

      if ("H2".equalsIgnoreCase(name))
    return new H2MetaData(ds);
      else if ("oracle".equalsIgnoreCase(name))
    return new OracleMetaData(ds);
      else if ("resin".equalsIgnoreCase(name))
    return new ResinMetaData(ds);
      else if ("postgres".equalsIgnoreCase(name) ||
           "PostgreSQL".equalsIgnoreCase(name))
    return new PostgresMetaData(ds);
      else if ("mysql".equalsIgnoreCase(name))
    return new MysqlMetaData(ds);
      else if ("Microsoft SQL Server".equalsIgnoreCase(name))
    return new SqlServerMetaData(ds);
      else {
    log.fine(name + " is an unknown database type");
    return new JdbcMetaData(ds);
      }
    } catch (SQLException e) {
      log.log(Level.FINE, e.toString(), e);
      return new JdbcMetaData(ds);
    } finally {
      try {
    if (conn != null) conn.close();
      } catch (SQLException e) {
      }
    }
  }

  /**
   * Returns the database name.
   */
  public String getDatabaseName()
  {
    Connection conn = null;

    try {
      conn = getConnection();

      DatabaseMetaData md = conn.getMetaData();

      return md.getDatabaseProductName();
    } catch (SQLException e) {
      log.log(Level.WARNING, e.toString(), e);
      return "unknown";
    } finally {
      try {
    if (conn != null) conn.close();
      } catch (SQLException e) {
      }
    }
  }

  /**
   * Returns the blob type.
   */
  public String getBlobType()
  {
    Connection conn = null;

    try {
      conn = getConnection();

      DatabaseMetaData md = conn.getMetaData();
      ResultSet rs;

      rs = md.getTypeInfo();
      try {
    while (rs.next()) {
      if (rs.getShort("DATA_TYPE") == Types.BLOB) {
        return rs.getString("TYPE_NAME");
      }
    }
      } finally {
    rs.close();
      }

      rs = md.getTypeInfo();
      try {
        while (rs.next()) {
          int dataType = rs.getShort("DATA_TYPE");

          if (rs.getShort("DATA_TYPE") == Types.LONGVARBINARY) {
            return rs.getString("TYPE_NAME");
          }
        }
      } finally {
        rs.close();
      }

      rs = md.getTypeInfo();
      try {
        while (rs.next()) {
          if (rs.getShort("DATA_TYPE") == Types.BINARY) {
            return rs.getString("TYPE_NAME");
          }
        }
      } finally {
        rs.close();
      }

      rs = md.getTypeInfo();
      try {
    while (rs.next()) {
      if (rs.getShort("DATA_TYPE") == Types.VARBINARY) {
        return rs.getString("TYPE_NAME");
      }
    }
      } finally {
    rs.close();
      }
    } catch (SQLException e) {
      log.log(Level.FINE, e.toString(), e);
    } finally {
      try {
    if (conn != null)
      conn.close();
      } catch (Exception e) {
      }
    }

    return null;
  }

  /**
   * Returns the long type.
   */
  public String getLongType()
  {
    Connection conn = null;

    try {
      conn = getConnection();

      DatabaseMetaData md = conn.getMetaData();
      ResultSet rs;

      rs = md.getTypeInfo();
      try {
    while (rs.next()) {
      if (rs.getShort("DATA_TYPE") == Types.BIGINT) {
        return rs.getString("TYPE_NAME");
      }
    }
      } finally {
    rs.close();
      }
    } catch (SQLException e) {
      log.log(Level.FINE, e.toString(), e);
    } finally {
      try {
    if (conn != null) conn.close();
      } catch (SQLException e) {
      }
    }

    return null;
  }

  /**
   * Returns true if identity is supported.
   */
  public boolean supportsIdentity()
  {
    return false;
  }

  /**
   * Returns the identity property
   */
  public String createIdentitySQL(String sqlType)
  {
    throw new UnsupportedOperationException(getClass().getName());
  }

  /**
   * Returns true if sequences are supported.
   */
  public boolean supportsSequences()
  {
    return false;
  }

  /**
   * Returns a sequence select expression.
   */
  public String createSequenceSQL(String name, int size)
  {
    throw new UnsupportedOperationException(getClass().getName());
  }

  /**
   * Returns a sequence select expression.
   */
  public String selectSequenceSQL(String name)
  {
    throw new UnsupportedOperationException(getClass().getName());
  }

  /**
   * Returns a sequence select expression.
   */
  public String testSequenceSQL(String name)
  {
    return selectSequenceSQL(name) + " WHERE 1=0";
  }

  /**
   * Returns the code to test for a boolean value for a term.
   */
  public String generateBoolean(String term)
  {
    return term;
  }

  /**
   * Returns a limit.
   */
  public String limit(String sql, int max)
  {
    return sql;
  }
  /**
   * New version to Return SQL for the table with the given
   * SQL type.  Takes, length, precision and scale.
   */
  public String getCreateColumnSQL(int sqlType, int length, int precision, int scale)
  {
    String type = null;

    switch (sqlType) {
    case Types.BOOLEAN:
      type = getCreateColumnSQLImpl(sqlType, length, precision, scale);
      if (type == null)
        type = getCreateColumnSQLImpl(Types.BIT, length, precision, scale);
      break;

    case Types.DATE:
      type = getCreateColumnSQLImpl(sqlType, length, precision, scale);
      if (type == null)
    type = getCreateColumnSQLImpl(Types.TIMESTAMP, length, precision, scale);
      break;

    case Types.TIME:
      type = getCreateColumnSQLImpl(sqlType, length, precision, scale);
      if (type == null)
    type = getCreateColumnSQLImpl(Types.TIMESTAMP, length, precision, scale);
      break;

    case Types.DOUBLE:
      type = getCreateColumnSQLImpl(Types.DOUBLE, length, precision, scale);
      break;

    case Types.NUMERIC:
        type = getCreateColumnSQLImpl(Types.NUMERIC, length, precision, scale);
        break;

    default:
      type = getCreateColumnSQLImpl(sqlType, length, precision, scale);
      break;
    }

    if (type == null)
      type = getDefaultCreateTableSQL(sqlType, length, precision, scale);

    return type;
  }

  /**
   * Returns the SQL for the table with the given SQL type.
   */
  protected String getCreateColumnSQLImpl(int sqlType, int length, int precision, int scale)
  {
    Connection conn = null;

    try {
      conn = getConnection();

      DatabaseMetaData md = conn.getMetaData();
      ResultSet rs;

      rs = md.getTypeInfo();

      try {
    while (rs.next()) {
      if (rs.getShort("DATA_TYPE") == sqlType) {
        String typeName = rs.getString("TYPE_NAME");
        String params = rs.getString("CREATE_PARAMS");

        if (params == null || params.equals(""))
          return typeName;
        else if (params.startsWith("(M)")) {
          if (length > 0)
        return typeName + "(" + length + ")";
          else
        return typeName;
        }
        else if (params.startsWith("(M,D)") || params.equals("precision,scale")) {
              if (precision > 0) {
                typeName += "(" + precision;
                if (scale > 0) {
                  typeName += "," + scale;
                }
                typeName += ")";
              }
          return typeName;
        }
        else if (params.startsWith("(")) {
          int tail = params.indexOf(')');

          if (tail > 0) {
        String value = params.substring(1, tail);
        boolean isConstant = true;

        for (int i = 0; i < value.length(); i++) {
          if (value.charAt(i) >= 'a' && value.charAt(i) <= 'z')
            isConstant = false;
          else if (value.charAt(i) >= 'A' && value.charAt(i) <= 'Z')
            isConstant = false;
        }

        if (isConstant)
          return typeName + "(" + value + ")";
          }

          return typeName;
        }
        else {
          return typeName;
        }
      }
    }
      } finally {
    rs.close();
      }
    } catch (Throwable e) {
      log.log(Level.FINE, e.toString(), e);
    } finally {
      try {
    if (conn != null)
      conn.close();
      } catch (Exception e) {
      }
    }

    return null;
  }

  protected String getDefaultCreateTableSQL(int sqlType, int length, int precision, int scale)
  {
    switch (sqlType) {
    case java.sql.Types.BOOLEAN:
      return "CHAR";
    case java.sql.Types.BIT:
    case java.sql.Types.TINYINT:
    case java.sql.Types.SMALLINT:
    case java.sql.Types.INTEGER:
    case java.sql.Types.BIGINT:
      return "INTEGER";
    case java.sql.Types.NUMERIC:
    case java.sql.Types.DECIMAL:
      String typeString = "NUMERIC";
      if (precision > 0) {
        typeString += "(" + precision;
        if (scale > 0) {
          typeString += "," + scale;
        }
        typeString += ")";
      }
      return typeString;
    case java.sql.Types.DOUBLE:
    case java.sql.Types.FLOAT:
      return "DOUBLE";
    case java.sql.Types.CHAR:
      return "CHAR";
    case java.sql.Types.DATE:
    case java.sql.Types.TIME:
    case java.sql.Types.TIMESTAMP:
        return "TIMESTAMP";
    default:
      return "VARCHAR(" + length + ")";
    }
  }

  /**
   * Returns a connection.
   */
  protected Connection getConnection()
    throws SQLException
  {
    return _ds.getConnection();
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人网页在线观看| 免费成人你懂的| 精品国产一区二区精华| 欧美日韩另类一区| 欧美色老头old∨ideo| 欧美性一级生活| 欧美性生活大片视频| 欧美色国产精品| 欧美卡1卡2卡| 日韩一卡二卡三卡| www成人在线观看| 精品国产一二三区| 久久久噜噜噜久久中文字幕色伊伊 | 日本特黄久久久高潮| 亚洲午夜精品在线| 亚洲不卡一区二区三区| 午夜成人免费电影| 久久国产福利国产秒拍| 国产在线视频一区二区三区| 国产精品一区不卡| 成人福利视频网站| 色一区在线观看| 欧美午夜精品免费| 日韩欧美在线影院| 国产免费久久精品| 亚洲欧美日韩国产综合在线 | www.亚洲色图.com| 欧美日韩在线一区二区| 日韩免费电影一区| 中文字幕av资源一区| 亚洲欧美日韩国产另类专区| 亚洲一区二区精品久久av| 日韩av中文字幕一区二区三区 | 欧美色爱综合网| 欧美精品第一页| 国产日产欧美一区二区视频| 亚洲欧美怡红院| 亚洲福利一区二区| 国产精品一级在线| 欧美日韩在线观看一区二区 | 欧美色精品天天在线观看视频| 日韩一区二区三区在线观看| 久久精品日产第一区二区三区高清版 | 99国产精品一区| 欧美色电影在线| 国产日韩精品一区二区浪潮av| 亚洲免费大片在线观看| 男男视频亚洲欧美| 色综合色综合色综合色综合色综合| 欧美喷水一区二区| 国产精品久久久久久久久久免费看 | 奇米影视一区二区三区| 成人永久aaa| 欧美一区二区高清| 亚洲色图都市小说| 国产成人午夜99999| 色国产综合视频| 欧美激情一区二区在线| 奇米色一区二区| 日本道在线观看一区二区| 国产片一区二区三区| 日韩高清在线不卡| 欧美日韩你懂的| 亚洲欧洲另类国产综合| 国产盗摄一区二区三区| 日韩精品一区二区三区中文精品 | 亚洲自拍偷拍网站| 91视频免费看| 亚洲欧洲日韩在线| 成人黄色小视频| 欧美精品一区二区三区在线播放 | 欧美日韩不卡在线| 亚洲精品亚洲人成人网在线播放| 成人一区在线看| 久久久国际精品| 久久av中文字幕片| 欧美mv日韩mv国产网站app| 国产精品一区二区久激情瑜伽| 日韩欧美国产精品一区| 蜜桃视频在线观看一区二区| 欧美精品一二三| 午夜视频在线观看一区二区三区| 91国产免费看| 亚洲精品午夜久久久| 一本大道久久a久久精二百| 日韩美女视频一区二区 | 亚洲影院在线观看| 91久久人澡人人添人人爽欧美| 亚洲欧洲精品成人久久奇米网| 福利一区在线观看| 欧美国产日韩一二三区| 99re8在线精品视频免费播放| 中文字幕一区视频| 色婷婷av一区| 石原莉奈在线亚洲二区| 精品少妇一区二区三区免费观看 | 韩国av一区二区三区四区| 欧美精品一区二区三区在线 | 国产欧美日韩在线| 91视频一区二区三区| 亚洲成va人在线观看| 日韩欧美中文字幕精品| 国产成人精品一区二| 亚洲精品va在线观看| 欧美疯狂性受xxxxx喷水图片| 奇米影视一区二区三区小说| 亚洲精品一区在线观看| 91香蕉视频在线| 亚洲第一狼人社区| 欧美激情一二三区| 欧美在线视频全部完| 久久91精品国产91久久小草| 中文字幕在线免费不卡| 欧美情侣在线播放| 成人中文字幕电影| 性欧美疯狂xxxxbbbb| 亚洲国产高清在线| 3d动漫精品啪啪一区二区竹菊 | 亚洲欧美综合另类在线卡通| 欧美日韩综合色| 国产一区二区成人久久免费影院| 自拍偷拍亚洲激情| wwwwww.欧美系列| 在线精品视频一区二区三四| 激情久久五月天| 亚洲成人综合视频| 国产精品久久网站| 欧美不卡一区二区| 欧美三级一区二区| 成人高清免费观看| 国产资源在线一区| 亚洲午夜免费电影| 中文字幕中文字幕一区二区| 欧美大黄免费观看| 欧美日韩极品在线观看一区| 国产v综合v亚洲欧| 国产在线观看免费一区| 亚洲成人免费在线观看| 亚洲男人天堂av网| 亚洲国产成人在线| 久久久久国产精品麻豆ai换脸| 欧美日韩亚洲综合一区二区三区| 国产91丝袜在线播放| 国产一区二区不卡老阿姨| 日韩精品欧美成人高清一区二区| 亚洲乱码日产精品bd| 国产精品久久影院| 欧美国产精品久久| 久久久综合精品| 久久中文字幕电影| 久久婷婷一区二区三区| 日韩精品一区二区三区四区视频| 91精品国产色综合久久不卡电影 | 精品一区二区免费视频| 日韩精品1区2区3区| 亚洲国产精品久久人人爱蜜臀| 亚洲乱码国产乱码精品精可以看| 国产精品久久久久久久久搜平片| 亚洲国产精品传媒在线观看| 2024国产精品| 久久久久国产一区二区三区四区| 久久久久久99精品| 国产欧美精品一区二区色综合| 久久久久久久免费视频了| 久久久精品免费网站| 国产亚洲精品bt天堂精选| 亚洲国产高清不卡| 亚洲乱码国产乱码精品精可以看| 自拍偷拍国产亚洲| 亚洲一区免费观看| 日韩精品国产精品| 国产精品白丝av| 成人小视频在线| 日本精品一级二级| 欧美日韩成人综合在线一区二区| 欧美一二区视频| 国产日韩成人精品| 亚洲成人在线观看视频| 午夜精品久久久久久久久久| 久久99久久久久| caoporn国产精品| 欧美日韩一级片网站| 日韩欧美激情四射| 中文字幕不卡的av| 亚洲1区2区3区视频| 另类综合日韩欧美亚洲| 成人精品免费网站| 欧美日韩久久一区二区| 久久综合色播五月| 一区二区三区四区激情| 蜜臀av性久久久久av蜜臀妖精 | 欧美性色黄大片| 欧美成人激情免费网| 亚洲天堂成人在线观看| 日本欧美一区二区| 99久久免费精品| 日韩一区二区在线观看视频| 亚洲色图色小说| 免费成人在线视频观看| 91在线视频观看|