📄 stringmanager.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package stringManager;import database.*;import fileManager.*;import java.util.ArrayList;import javax.swing.JOptionPane;import catalogManager.*;import indexManager.*;import apiManager.*;/** * * @author outlaw */public class StringManager { public StringManager(){ } public static boolean verifyTableName(String tbName) { if(CatalogManager.getTableByName(tbName)==null) return false; return true; } public static boolean verifySemicolon(String instr) throws Exception{ instr=instr.trim(); int count=0,len=instr.length(); for(int i=0;i<len;i++){ if(instr.charAt(i)==';') count+=i; } return count==len-1; } public static boolean verifyBracket(String instr){ int balance=0; for(int i=0;i<instr.length();i++){ if(balance<0) return false; if(instr.charAt(i)=='(') balance++; if(instr.charAt(i)==')') balance--; } return balance==0; } public static boolean verifyCreateTBBracket(String instr) { int left=0,right=0; for(int i=0;i<instr.length();i++) { if(instr.charAt(i)=='(') left++; if(instr.charAt(i)==')') right++; } if(left==2&&right==2) return true; return false; } public static boolean verifyName(String name){ if(name.length()==0) return false; char[] nameChar=name.toCharArray(); char[] validNameChar={'~','!','@','#','$','%','^','&','*','(',')','+','=','\\','|',';',':','?','>','<',' ','\n','.'}; for(int i=0;i<nameChar.length;i++){ for(int j=0;j<validNameChar.length;j++){ if(nameChar[i]==validNameChar[j]) return false; } } return true; } public static boolean verifyAttribName(TableData tb,String name) { ArrayList<Attribute> attribs=tb.getAttributes(); for(int i=0;i<attribs.size();i++) { if(attribs.get(i).getName().equals(name)) return true; } return false; } public static boolean verifyKey(String instr,StringBuilder keyName) throws Exception { if(instr.indexOf("primary")!=-1) { if(instr.substring(0,instr.indexOf("primary")).trim().length()!=0) throw new OperationInfo("Creating table syntax error!The primary key syntax error!\n" + "There can't be anything but white space before 'primary'!"); instr=instr.substring(instr.indexOf("primary")+7).trim(); if(instr.indexOf("key")!=-1) { if(instr.substring(0,instr.indexOf("key")).trim().length()!=0) throw new OperationInfo("Creating table syntax error!The primary key syntax error!\n" + "There can't be anything but white space between 'primary' and 'key'!"); instr=instr.substring(instr.indexOf("key")+3).trim(); if(instr.substring(0,instr.indexOf("(")).trim().length()!=0) throw new OperationInfo("Creating table syntax error!The primary key syntax error!\n" + "There can't be anything but white space between 'key' and '('!"); if(instr.substring(instr.indexOf(")")+1).trim().length()!=0) throw new OperationInfo("Creating table syntax error!The primary key syntax error!\n" + "There can't be anything but white space after ')'!"); keyName.append(instr.substring(instr.indexOf("(")+1,instr.indexOf(")")).trim()); if(!verifyName(keyName.toString())) throw new OperationInfo("Creating table syntax error!The primary key syntax error!\n" + "The keyName:["+keyName.toString()+"]is not valid!"); return true; } throw new OperationInfo("Creating table syntax error!The primary key syntax error!There is no 'key'"); } return false; } public static boolean verifyGetAttribType(String type,String[] assist) throws Exception{ if(!verifyBracket(type)) return false; if(type.indexOf("int")!=-1) { assist[0]="int"; type=type.substring(type.indexOf("int")+3).trim(); if(type.equals("unique")) assist[1]="unique"; else if(type.length()!=0) return false; else assist[1]=""; return true; } else if(type.indexOf("float")!=-1) { assist[0]="float"; type=type.substring(type.indexOf("float")+5).trim(); if(type.equals("unique")) assist[1]="unique"; else if(type.length()!=0) return false; else assist[1]=""; return true; } else if(type.indexOf("char")!=1) { type=type.substring(type.indexOf("char")+4).trim(); int charLen; try { charLen=Integer.parseInt(type.substring(type.indexOf("(")+1,type.indexOf(")"))); }catch(Exception ex) { throw new OperationInfo("Char attribute define error!:["+type+"]"); } //这个地方应该让用户知道是因为长度不对才产生错误的。 if(charLen>255||charLen<1) return false; assist[0]="char"+charLen; type=type.substring(type.indexOf(")")+1).trim(); if(type.equals("unique")) assist[1]="unique"; else if(type.length()!=0) return false; else assist[1]=""; return true; } return false; } public static String[] operCreateDB(String createDBInstr) throws Exception{ //createDBInstr是从表名的第一个字母开始 String[] pathAndName =new String[2]; String temp; //第一个时path,第二个是name if(!verifyBracket(createDBInstr)) throw new OperationInfo("Creating DataBase syntax error!:["+createDBInstr+"]\nBracket " + "not balaced!\n"); pathAndName[1]=createDBInstr.substring(0,createDBInstr.indexOf('(')).trim(); if(!verifyName(pathAndName[1])) throw new OperationInfo("Creating DataBase syntax error!:["+pathAndName[1]+"]\nDB name Not valid " + "DataBase Name!\n"); pathAndName[0]=FileManager.WORKPATH+pathAndName[1]+"/"; return pathAndName; } public static void operCreateTB(String createTBInstr,StringBuilder realTBName,ArrayList attribNames,ArrayList attribTypes,ArrayList features) throws Exception{ //createTBInstr是从table的name开始的,其前面没有没有空格 if(!verifyBracket(createTBInstr)) throw new OperationInfo("Creating table syntax error!:["+createTBInstr+"]\nBracket not balanced!\n"); String tbName; tbName=createTBInstr.substring(0,createTBInstr.indexOf("(")).trim(); if(!verifyName(tbName)) throw new OperationInfo("Creating table syntax error!:["+tbName+"]\nTable name not valid!\n"); realTBName.append(tbName); createTBInstr=createTBInstr.substring(createTBInstr.indexOf("(")+1,createTBInstr.lastIndexOf(")")); String[] temp=createTBInstr.split(","); String name,type; StringBuilder keyName=new StringBuilder(); String[] assist=new String[2]; for(int i=0;i<temp.length;i++) { temp[i]=temp[i].trim(); if(verifyKey(temp[i],keyName)) { int len=attribNames.size(); for(int j=0;j<len;j++) { if(((String)attribNames.get(j)).equals(keyName.toString())) { if(((Integer)features.get(j)).intValue()!=2) features.set(j, 2); else throw new OperationInfo("Creating table syntax error!:["+temp[i]+"]\nRedefine the key!\n"); } else { if(((Integer)features.get(j)).intValue()==2) throw new OperationInfo("Creating table syntax error!["+temp[i]+"]\nDefine more than one key!\n"); } } } else { //JOptionPane.showMessageDialog(null, name+"\n"+type); if(temp[i].indexOf("int")!=-1) { name=temp[i].substring(0,temp[i].indexOf("int")).trim(); type=temp[i].substring(temp[i].indexOf("int")).trim(); } else if(temp[i].indexOf("float")!=-1) { name=temp[i].substring(0,temp[i].indexOf("float")).trim(); type=temp[i].substring(temp[i].indexOf("float")).trim(); } else if(temp[i].indexOf("char")!=-1) { name=temp[i].substring(0,temp[i].indexOf("char")).trim(); type=temp[i].substring(temp[i].indexOf("char")).trim(); } else throw new OperationInfo("Creating table error!:"+ "["+temp[i]+"]is not valid!"); if(!verifyName(name)) throw new OperationInfo("Attribute name(or type) error!:["+temp[i]+"]"+"\n"); if(!verifyGetAttribType(type,assist)) throw new OperationInfo("Attribute define error!\n["+temp[i]+"]"); else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -