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

📄 database.java

📁 一个可以在applet窗体上持行sql语句并显示返回结果的程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    t2.addConstraint(new Constraint(Constraint.MAIN,t2,t,col2,col));
  }
  private void addIndexOn(Tokenizer c,Channel channel,String name,
  Table t,boolean unique) throws SQLException {
    int col[]=processColumnList(c,t);
    createIndex(channel,t,col,name,unique);
  }
  private void processCreateTable(Tokenizer c,Channel channel,
  boolean cached) throws SQLException {
    Table t;
    String sToken=c.getName();
    if(cached && lLog!=null) {
      t=new Table(this,true,sToken,true);
    } else {
      t=new Table(this,true,sToken,false);
    }
    c.getThis("(");
    int primarykeycolumn=-1;
    int column=0;
    boolean constraint=false;
    while(true) {
      boolean identity=false;
      sToken=c.getString();
      if(sToken.equals("CONSTRAINT")
      || sToken.equals("PRIMARY")
      || sToken.equals("FOREIGN")) {
        c.back();
        constraint=true;
        break;
      }
      String sColumn=sToken;
      int iType=Column.getTypeNr(c.getString());
      if(iType==Column.VARCHAR && bIgnoreCase) {
        iType=Column.VARCHAR_IGNORECASE;
      }
      sToken=c.getString();
      if(iType==Column.DOUBLE && sToken.equals("PRECISION")) {
        sToken=c.getString();
      }
      if(sToken.equals("(")) {
        // overread length
        do {
          sToken=c.getString();
        } while(!sToken.equals(")"));
        sToken=c.getString();
      }
      boolean nullable=true;
      if(sToken.equals("NULL")) {
        sToken=c.getString();
      } else if(sToken.equals("NOT")) {
        c.getThis("NULL");
        nullable=false;
        sToken=c.getString();
      }
      if(sToken.equals("IDENTITY")) {
        identity=true;
        Trace.check(primarykeycolumn==-1,Trace.SECOND_PRIMARY_KEY,sColumn);
        sToken=c.getString();
        primarykeycolumn=column;
      }
      if(sToken.equals("PRIMARY")) {
        c.getThis("KEY");
        Trace.check(identity || primarykeycolumn==-1,
        Trace.SECOND_PRIMARY_KEY,sColumn);
        primarykeycolumn=column;
        sToken=c.getString();
      }
      t.addColumn(sColumn,iType,nullable,identity);
      if(sToken.equals(")")) {
        break;
      }
      if(!sToken.equals(",")) {
        throw Trace.error(Trace.UNEXPECTED_TOKEN,sToken);
      }
      column++;
    }
    if(primarykeycolumn!=-1) {
      t.createPrimaryKey(primarykeycolumn);
    } else {
      t.createPrimaryKey();
    }
    if(constraint) {
      int i=0;
      while(true) {
        sToken=c.getString();
        String name="SYSTEM_CONSTRAINT"+i;
        i++;
        if(sToken.equals("CONSTRAINT")) {
          name=c.getString();
          sToken=c.getString();
        }
        if(sToken.equals("PRIMARY")) {
          c.getThis("KEY");
          addIndexOn(c,channel,name,t,true);
        } else if(sToken.equals("FOREIGN")) {
          c.getThis("KEY");
          addForeignKeyOn(c,channel,name,t);
        }
        sToken=c.getString();
        if(sToken.equals(")")) {
          break;
        }
        if(!sToken.equals(",")) {
          throw Trace.error(Trace.UNEXPECTED_TOKEN,sToken);
        }
      }
    }
    channel.commit();
    linkTable(t);
  }
  private Result processDrop(Tokenizer c,Channel channel)
  throws SQLException {
    channel.checkReadWrite();
    channel.checkAdmin();
    String sToken=c.getString();
    if(sToken.equals("TABLE")) {
      dropTable(c.getString());
      channel.commit();
    } else if(sToken.equals("USER")) {
      aAccess.dropUser(c.getStringToken());
    } else if(sToken.equals("INDEX")) {
      sToken=c.getString();
      if(!c.wasLongName()) {
        throw Trace.error(Trace.UNEXPECTED_TOKEN,sToken);
      }
      String table=c.getLongNameFirst();
      String index=c.getLongNameLast();
      Table t=getTable(table,channel);
      t.checkDropIndex(index);
      Table tn=t.moveDefinition(index);
      tn.moveData(t);
      dropTable(table);
      linkTable(tn);
      channel.commit();
    } else {
      throw Trace.error(Trace.UNEXPECTED_TOKEN,sToken);
    }
    return new Result();
  }
  private Result processGrantOrRevoke(Tokenizer c,Channel channel,
  boolean grant) throws SQLException {
    channel.checkReadWrite();
    channel.checkAdmin();
    int right=0;
    String sToken;
    do {
      String sRight=c.getString();
      right|=Access.getRight(sRight);
      sToken=c.getString();
    } while(sToken.equals(","));
    if(!sToken.equals("ON")) {
      throw Trace.error(Trace.UNEXPECTED_TOKEN,sToken);
    }
    String table=c.getString();
    if(table.equals("CLASS")) {
      // object is saved as 'CLASS "java.lang.Math"'
      // tables like 'CLASS "xy"' should not be created
      table+=" \""+c.getString()+"\"";
    } else {
      getTable(table,channel); // to make sure the table exists
    }
    c.getThis("TO");
    String user=c.getStringToken();
    String command;
    if(grant) {
      aAccess.grant(user,table,right);
      command="GRANT";
    } else {
      aAccess.revoke(user,table,right);
      command="REVOKE";
    }
    return new Result();
  }
  private Result processConnect(Tokenizer c,Channel channel)
  throws SQLException {
    c.getThis("USER");
    String username=c.getStringToken();
    c.getThis("PASSWORD");
    String password=c.getStringToken();
    User user=aAccess.getUser(username,password);
    channel.commit();
    channel.setUser(user);
    return new Result();
  }
  private Result processSet(Tokenizer c,Channel channel)
  throws SQLException {
    String sToken=c.getString();
    if(sToken.equals("PASSWORD")) {
      channel.checkReadWrite();
      channel.setPassword(c.getStringToken());
    } else if(sToken.equals("READONLY")) {
      channel.commit();
      channel.setReadOnly(processTrueOrFalse(c));
    } else if(sToken.equals("LOGSIZE")) {
      channel.checkAdmin();
      int i=Integer.parseInt(c.getString());
      if(lLog!=null) {
        lLog.setLogSize(i);
      }
    } else if(sToken.equals("IGNORECASE")) {
      channel.checkAdmin();
      bIgnoreCase=processTrueOrFalse(c);
    } else if(sToken.equals("MAXROWS")) {
      int i=Integer.parseInt(c.getString());
      channel.setMaxRows(i);
    } else if(sToken.equals("AUTOCOMMIT")) {
      channel.setAutoCommit(processTrueOrFalse(c));
    } else if(sToken.equals("TABLE")) {
      channel.checkReadWrite();
      channel.checkAdmin();
      Table t=getTable(c.getString(),channel);
      c.getThis("INDEX");
      c.getString();
      t.setIndexRoots((String)c.getAsValue());
    } else if(sToken.equals("REFERENCIAL_INTEGRITY")
           || sToken.equals("REFERENTIAL_INTEGRITY")) {
      channel.checkAdmin();
      bReferentialIntegrity=processTrueOrFalse(c);
    } else if(sToken.equals("WRITE_DELAY")) {
      channel.checkAdmin();
      boolean delay=processTrueOrFalse(c);
      if(lLog!=null) {
        lLog.setWriteDelay(delay);
      }
    } else {
      throw Trace.error(Trace.UNEXPECTED_TOKEN,sToken);
    }
    return new Result();
  }
  private boolean processTrueOrFalse(Tokenizer c) throws SQLException {
    String sToken=c.getString();
    if(sToken.equals("TRUE")) {
      return true;
    } else if(sToken.equals("FALSE")) {
      return false;
    } else {
      throw Trace.error(Trace.UNEXPECTED_TOKEN,sToken);
    }
  }
  private Result processCommit(Tokenizer c,Channel channel)
  throws SQLException {
    String sToken=c.getString();
    if(!sToken.equals("WORK")) {
      c.back();
    }
    channel.commit();
    return new Result();
  }
  private Result processRollback(Tokenizer c,Channel channel)
  throws SQLException {
    String sToken=c.getString();
    if(!sToken.equals("WORK")) {
      c.back();
    }
    channel.rollback();
    return new Result();
  }
  public void finalize() {
    try {
      close(0);
    } catch(SQLException e) {
      // it's too late now
    }
  }
  private void close(int type) throws SQLException {
    if(lLog==null) {
      return;
    }
    lLog.stop();
    if(type==-1) {
      lLog.shutdown();
    } else if(type==0) {
      lLog.close(false);
    } else if(type==1) {
      lLog.close(true);
    }
    lLog=null;
    bShutdown=true;
  }
  private Result processShutdown(Tokenizer c,Channel channel)
  throws SQLException {
    channel.checkAdmin();
    String token=c.getString();
    if(token.equals("IMMEDIATELY")) {
      close(-1);
    } else if(token.equals("COMPACT")) {
      close(1);
    } else {
      c.back();
      close(0);
    }
    return new Result();
  }
  private Result processCheckpoint(Channel channel) throws SQLException {
    channel.checkAdmin();
    if(lLog!=null) {
      lLog.checkpoint();
    }
    return new Result();
  }
  private void dropTable(String name) throws SQLException {
    for(int i=0;i<tTable.size();i++) {
      Table o=(Table)tTable.elementAt(i);
      if(o.getName().equals(name)) {
        tTable.removeElementAt(i);
        return;
      }
    }
    throw Trace.error(Trace.TABLE_NOT_FOUND,name);
  }
}

⌨️ 快捷键说明

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