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

📄 databaseinformation.java

📁 一个可以在applet窗体上持行sql语句并显示返回结果的程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
      t.addColumn("PRECISION",Column.INTEGER);
      t.addColumn("LITERAL_PREFIX",Column.VARCHAR);
      t.addColumn("LITERAL_SUFFIX",Column.VARCHAR);
      t.addColumn("CREATE_PARAMS",Column.VARCHAR);
      t.addColumn("NULLABLE",Column.SMALLINT);
      t.addColumn("CASE_SENSITIVE",Column.VARCHAR);
      t.addColumn("SEARCHABLE",Column.SMALLINT);
      t.addColumn("UNSIGNED_ATTRIBUTE",Column.BIT);
      t.addColumn(META_FIXED_PREC_SCALE,Column.BIT);
      t.addColumn("AUTO_INCREMENT",Column.BIT);
      t.addColumn("LOCAL_TYPE_NAME",Column.VARCHAR);
      t.addColumn("MINIMUM_SCALE",Column.SMALLINT);
      t.addColumn("MAXIMUM_SCALE",Column.SMALLINT);
      // this columns are not supported by Access and Intersolv
      t.addColumn("SQL_DATE_TYPE",Column.INTEGER);
      t.addColumn("SQL_DATETIME_SUB",Column.INTEGER);
      t.addColumn("NUM_PREC_RADIX",Column.INTEGER);
      t.createPrimaryKey();
      for(int i=0;i<Column.TYPES.length;i++) {
        Object o[]=t.getNewRow();
        int type=Column.TYPES[i];
        o[0]=Column.getType(type);
        o[1]=new Short((short)type);
        o[2]=new Integer(0); // precision
        o[6]=new Short((short)DatabaseMetaData.typeNullable);
        o[7]=new Boolean(true); // case sensitive
        o[8]=new Short((short)DatabaseMetaData.typeSearchable);
        o[9]=new Boolean(false); // unsigned
        o[10]=new Boolean(type==Column.NUMERIC || type==Column.NUMERIC);
        o[11]=new Boolean(type==Column.INTEGER);
        o[12]=o[0];
        o[13]=new Short((short)0);
        o[14]=new Short((short)0); // maximum scale
        o[15]=new Short((short)0);
        o[16]=o[15];
        o[17]=new Integer(10);
        t.insert(o,null);
      }
      return t;
    } else if(name.equals("SYSTEM_INDEXINFO")) {
      Table t=createTable(name);
      t.addColumn("TABLE_"+META_CAT,Column.VARCHAR);
      t.addColumn("TABLE_"+META_SCHEM,Column.VARCHAR);
      t.addColumn("TABLE_NAME",Column.VARCHAR);
      t.addColumn("NON_UNIQUE",Column.BIT);
      t.addColumn("INDEX_QUALIFIER",Column.VARCHAR);
      t.addColumn("INDEX_NAME",Column.VARCHAR);
      t.addColumn("TYPE",Column.SMALLINT);
      t.addColumn(META_ORDINAL_POSITON,Column.SMALLINT);
      t.addColumn("COLUMN_NAME",Column.VARCHAR);
      t.addColumn(META_ASC_OR_DESC,Column.VARCHAR);
      t.addColumn("CARDINALITY",Column.INTEGER);
      t.addColumn("PAGES",Column.INTEGER);
      t.addColumn("FILTER_CONDITION",Column.VARCHAR);
      t.createPrimaryKey();
      for(int i=0;i<tTable.size();i++) {
        Table table=(Table)tTable.elementAt(i);
        Index index=null;
        while(true) {
          index=table.getNextIndex(index);
          if(index==null) {
            break;
          }
          int cols[]=index.getColumns();
          int len=cols.length;
          // this removes the column that makes every index unique
          if(!index.isUnique()) {
            len--;
          }
          for(int j=0;j<len;j++) {
            Object o[]=t.getNewRow();
            o[2]=table.getName();
            o[3]=new Boolean(!index.isUnique());
            o[5]=index.getName();
            o[6]=new Short(DatabaseMetaData.tableIndexOther);
            o[7]=new Short((short)(j+1));
            o[8]=table.getColumnName(cols[j]);
            o[9]="A";
            t.insert(o,null);
          }
        }
      }
      return t;
    } else if(name.equals("SYSTEM_UDTS")) {
      Table t=createTable(name);
      t.addColumn("TYPE_"+META_CAT,Column.VARCHAR);
      t.addColumn("TYPE_"+META_SCHEM,Column.VARCHAR);
      t.addColumn("TYPE_NAME",Column.VARCHAR);
      t.addColumn("CLASS_NAME",Column.BIT);
      t.addColumn("DATA_TYPE",Column.VARCHAR);
      t.addColumn("REMARKS",Column.VARCHAR);
      t.createPrimaryKey();
      return t;
    } else if(name.equals("SYSTEM_CONNECTIONINFO")) {
      Table t=createTable(name);
      t.addColumn("KEY",Column.VARCHAR);
      t.addColumn("VALUE",Column.VARCHAR);
      t.createPrimaryKey();
      Object o[]=t.getNewRow();
      o[0]="USER";
      o[1]=channel.getUsername();
      t.insert(o,null);
      o=t.getNewRow();
      o[0]="READONLY";
      o[1]=channel.isReadOnly()?"TRUE":"FALSE";
      t.insert(o,null);
      o=t.getNewRow();
      o[0]="MAXROWS";
      o[1]=""+channel.getMaxRows();
      t.insert(o,null);
      o=t.getNewRow();
      o[0]="DATABASE";
      o[1]=""+channel.getDatabase().getName();
      t.insert(o,null);
      o=t.getNewRow();
      o[0]="IDENTITY";
      o[1]=""+channel.getLastIdentity();
      t.insert(o,null);
      return t;
    }
    return null;
  }
  Result getScript(boolean bDrop,boolean bInsert,boolean bCached,
  Channel channel) throws SQLException {
    channel.checkAdmin();
    Result r=new Result(1);
    r.iType[0]=Column.VARCHAR;
    r.sTable[0]="SYSTEM_SCRIPT";
    r.sLabel[0]="COMMAND";
    r.sName[0]="COMMAND";
    StringBuffer a;
    for(int i=0;i<tTable.size();i++) {
      Table t=(Table)tTable.elementAt(i);
      if(bDrop) {
        addRow(r,"DROP TABLE "+t.getName());
      }
      a=new StringBuffer("CREATE ");
      if(t.isCached()) {
        a.append("CACHED ");
      }
      a.append("TABLE ");
      a.append(t.getName());
      a.append('(');
      int columns=t.getColumnCount();
      Index pki=t.getIndex("SYSTEM_PK");
      int pk=(pki==null)?-1:pki.getColumns()[0];
      for(int j=0;j<columns;j++) {
        a.append(t.getColumnName(j));
        a.append(' ');
        a.append(Column.getType(t.getType(j)));
        if(!t.getColumnIsNullable(j)) {
          a.append(" NOT NULL");
        }
        if(j==t.getIdentityColumn()) {
          a.append(" IDENTITY");
        }
        if(j==pk) {
          a.append(" PRIMARY KEY");
        }
        if(j<columns-1) {
          a.append(',');
        }
      }
      Vector v=t.getConstraints();
      for(int j=0;j<v.size();j++) {
        Constraint c=(Constraint)v.elementAt(j);
        if(c.getType()==Constraint.FOREIGN_KEY) {
          a.append(",FOREIGN KEY");
          int col[]=c.getRefColumns();
          a.append(getColumnList(c.getRef(),col,col.length));
          a.append("REFERENCES ");
          a.append(c.getMain().getName());
          col=c.getMainColumns();
          a.append(getColumnList(c.getMain(),col,col.length));
        }
      }
      a.append(')');
      addRow(r,a.toString());
      Index index=null;
      while(true) {
        index=t.getNextIndex(index);
        if(index==null) {
          break;
        }
        if(index.getName().equals("SYSTEM_PK")) {
          continue;
        }
        if(index.getName().startsWith("SYSTEM_FOREIGN_KEY")) {
          // foreign keys where created in the 'create table'
          continue;
        }
        a=new StringBuffer("CREATE ");
        if(index.isUnique()) {
          a.append("UNIQUE ");
        }
        a.append("INDEX ");
        a.append(index.getName());
        a.append(" ON ");
        a.append(t.getName());
        int col[]=index.getColumns();
        int len=col.length;
        if(!index.isUnique()) {
          len--;
        }
        a.append(getColumnList(t,col,len));
        addRow(r,a.toString());
      }
      if(bInsert) {
        Index primary=t.getPrimaryIndex();
        Node x=primary.first();
        boolean integrity=true;
        if(x!=null) {
          integrity=false;
          addRow(r,"SET REFERENTIAL_INTEGRITY FALSE");
        }
        while(x!=null) {
          addRow(r,t.getInsertStatement(x.getData()));
          x=primary.next(x);
        }
        if(!integrity) {
          addRow(r,"SET REFERENTIAL_INTEGRITY TRUE");
        }
      }
      if(bCached && t.isCached()) {
        a=new StringBuffer("SET TABLE ");
        a.append(t.getName());
        a.append(" INDEX '");
        a.append(t.getIndexRoots());
        a.append("'");
        addRow(r,a.toString());
      }
    }
    Vector v=aAccess.getUsers();
    for(int i=0;i<v.size();i++) {
      User u=(User)v.elementAt(i);
      // todo: this is not a nice implementation
      if(u==null) {
        continue;
      }
      String name=u.getName();
      if(!name.equals("PUBLIC")) {
        a=new StringBuffer("CREATE USER ");
        a.append(name);
        a.append(" PASSWORD ");
        a.append("\""+u.getPassword()+"\"");
        if(u.isAdmin()) {
          a.append(" ADMIN");
        }
        addRow(r,a.toString());
      }
      Hashtable rights=u.getRights();
      if(rights==null) {
        continue;
      }
      Enumeration e=rights.keys();
      while(e.hasMoreElements()) {
        String object=(String)e.nextElement();
        int right=((Integer)(rights.get(object))).intValue();
        if(right==0) {
          continue;
        }
        a=new StringBuffer("GRANT ");
        a.append(Access.getRight(right));
        a.append(" ON ");
        a.append(object);
        a.append(" TO ");
        a.append(u.getName());
        addRow(r,a.toString());
      }
    }
    if(dDatabase.isIgnoreCase()) {
      addRow(r,"SET IGNORECASE TRUE");
    }
    Hashtable h=dDatabase.getAlias();
    Enumeration e=h.keys();
    while(e.hasMoreElements()) {
      String alias=(String)e.nextElement();
      String java=(String)h.get(alias);
      addRow(r,"CREATE ALIAS "+alias+" FOR \""+java+"\"");
    }
    return r;
  }
  private String getColumnList(Table t,int col[],int len) {
    StringBuffer a=new StringBuffer("(");
    for(int i=0;i<len;i++) {
      a.append(t.getColumnName(col[i]));
      if(i<len-1) {
        a.append(',');
      }
    }
    return a.append(')').toString();
  }
  private void addRow(Result r,String sql) {
    String s[]=new String[1];
    s[0]=sql;
    r.add(s);
  }
  private Table createTable(String name) {
    return new Table(dDatabase,false,name,false);
  }
}


⌨️ 快捷键说明

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