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

📄 tablestructure.java

📁 一个用JAVA语言实现的SQL编译器。能够迅速实现对SQL语言的解析。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		}else {
			String s="";String posi="";String []p;
			for(int i=0;i<linePoint.size();i++)
				posi+=i+" ";
			for (int i = 0; i < s2.length; i++)
				s+=tc[s2[i]].getColumn() + "\t";
			s+="\n";
			if(by=="")
				p=posi.split(" ");
			else{
				String[] p1=posi.split(" ");
				p=orderby(p1,by,order);
			}
			if(p==null) return "the order by column isn't comparable";
			for(int i=0;i<p.length;i++)
			{
				TableColumnsList temp = (TableColumnsList) linePoint.get(Integer.parseInt(p[i]));
				String[] column = temp.getColumn();
				for (int j = 0; j < s2.length; j++)
				{
					s+=column[s2[j]] + "\t";
				}
				s+="\n";
			}
			return s;
		}
		
	}
	private String[] orderby(String[] p1, String by, boolean order) {
		int[]pos=new int[p1.length];
		int tmp=0;
		for(int i=0;i<p1.length;i++)
			pos[i]=Integer.parseInt(p1[i]);
		try{
			tmp=Integer.parseInt(by)-1;
		}catch(Exception e){
			tmp=getColumnNumber(by);
			System.out.println(tmp);
		}
		double tmp1,tmp2;
		for(int i=0;i<pos.length-1;i++)
		{
			for(int j=i+1;j<pos.length;j++)
			{
				TableColumnsList temp = (TableColumnsList) linePoint.get(pos[i]);
				String[] column = temp.getColumn();
				try{
					tmp1=Double.parseDouble(column[tmp]);
				}catch(Exception e){
					return null;
				}
				TableColumnsList temp1 = (TableColumnsList) linePoint.get(pos[j]);
				String[] column1 = temp1.getColumn();
				tmp2=Double.parseDouble(column1[tmp]);
				if(order)
				{
					if(tmp1>tmp2)
					{
						pos[i]=pos[i]+pos[j];
						pos[j]=pos[i]-pos[j];
						pos[i]=pos[i]-pos[j];
					}
				}
				else {
					if(tmp1<tmp2)
					{
						pos[i]=pos[i]+pos[j];
						pos[j]=pos[i]-pos[j];
						pos[i]=pos[i]-pos[j];
					}
				}
			}
		}
		for(int i=0;i<p1.length;i++)
			p1[i]=pos[i]+"";
		return p1;
	}
	private String max(String posi, int k) {
		int max=0;
		TableColumnsList temp;
		String[] column;
		String[] p=posi.split(" ");
		temp = (TableColumnsList)linePoint.get(Integer.parseInt(p[p.length-1]));
		column = temp.getColumn();
		max=Integer.parseInt(column[k]);
		if(p.length>1){
			for(int i=p.length-2;i>=0;i--)
			{
				temp = (TableColumnsList)linePoint.get(Integer.parseInt(p[i]));
				column = temp.getColumn();
				if(Integer.parseInt(column[k])>max)max=Integer.parseInt(column[k]);
			}
		}
		return max+"";
	}
	private String min(String posi, int k) {
		int min=0;
		TableColumnsList temp;
		String[] column;
		String[] p=posi.split(" ");
		temp = (TableColumnsList)linePoint.get(Integer.parseInt(p[p.length-1]));
		column = temp.getColumn();
		min=Integer.parseInt(column[k]);
		if(p.length>1){
			for(int i=p.length-2;i>=0;i--)
			{
				temp = (TableColumnsList)linePoint.get(Integer.parseInt(p[i]));
				column = temp.getColumn();
				if(Integer.parseInt(column[k])<min)min=Integer.parseInt(column[k]);
			}
		}
		return min+"";
	}
	private String avg(String posi, int k) {
		double avg=0;
		TableColumnsList temp;
		String[] column;
		String[] p=posi.split(" ");
		for(int i=p.length-1;i>=0;i--)
		{
			temp = (TableColumnsList)linePoint.get(Integer.parseInt(p[i]));
			column = temp.getColumn();
			avg+=Integer.parseInt(column[k]);
		}
		DecimalFormat a=new DecimalFormat();
		a.setMaximumFractionDigits(2);
		return a.format(avg/p.length)+"";
	}
	private String sum(String posi, int k) {
		double sum=0;
		TableColumnsList temp;
		String[] column;
		String[] p=posi.split(" ");
		for(int i=p.length-1;i>=0;i--)
		{
			temp = (TableColumnsList)linePoint.get(Integer.parseInt(p[i]));
			column = temp.getColumn();
			sum+=Integer.parseInt(column[k]);
		}
		return sum+"";
	}
	private String count(String posi, int i) {
		String[] p=posi.split(" ");
		return p.length+"";
	}
	public String deleteRecord(Where where) {
		if (where.getOperator1().size() == 0) { // 删除所有记录
			Iterator it = linePoint.iterator();
			while (it.hasNext()) {
				TableColumnsList temp = (TableColumnsList) it.next();
				temp = null;
			}
			linePoint = new ArrayList();
			System.gc();
		} else {
			boolean flag;
			String posi="";
			int position=-1;
			int []s=new int[where.getOperator1().size()];
			for(int j=0;j<s.length;j++)
				s[j]=-1;
			for(int k=0;k<s.length;k++)
			{
				for(int j=0;j<tc.length;j++)
					if(tc[j].getColumn().equals((String)where.getOperator1().get(k)))
					{
						s[k]=j;
					}
			}
			if(s[s.length-1]==-1) {
				return "Can't find column!\n";
			}
			Iterator it = linePoint.iterator();
			while(it.hasNext()){
				flag=true;
				position++;
				TableColumnsList temp = (TableColumnsList)it.next();
				String []column =temp.getColumn();
				for(int j=0;j<s.length;j++)
				{
					if(((String)where.getConj().get(j)).equals("or"))
						if(flag)break;
						else flag=true;
					else if(!flag) continue;
					if(((String)where.getOper().get(j)).equals("="))
						if(!(column[s[j]].equals((String)where.getOperator2().get(j))))
						{
							flag=false;
							continue;
						}
					if(!((String)where.getOper().get(j)).equals("="))
					try{
						int v=Integer.parseInt((String)where.getOperator2().get(j));
						if(((String)where.getOper().get(j)).equals("<="))
							if(!(Integer.parseInt(column[s[j]])<=v))
							{
								flag=false;
								continue;
							}
						if(((String)where.getOper().get(j)).equals(">="))
							if(!(Integer.parseInt(column[s[j]])>=v))
							{
								flag=false;
								continue;
							}
						if(((String)where.getOper().get(j)).equals("<"))
							if(!(Integer.parseInt(column[s[j]])<v))
							{
								flag=false;
								continue;
							}
						if(((String)where.getOper().get(j)).equals(">"))
							if(!(Integer.parseInt(column[s[j]])>v))
							{
								flag=false;
								continue;
							}
						}catch(Exception e){return "Value is not illegal";}		
				}
				if(flag)posi=position+" "+posi;
			}
			removeRecord(posi);		
		}
		return "suc";
	}
	public boolean checkColumn(String[] str) {
		int keyCount = -1;
		if (columnCount != str.length)// column数量是否相等
			return false;
		if (primary_key != null) {
			for (int i = 0; i < tc.length; i++)
				// 主键是否唯一
				if (tc != null && primary_key.equals(tc[i].getColumn())) {
					keyCount = i;
					break;
				}

			Iterator it = linePoint.iterator();
			while (it.hasNext()) {
				tcl = (TableColumnsList) it.next();
				if (str[keyCount].equals(tcl.getColumn()[keyCount]))
					return false;
			}
		}
		// 判断是否为空
		for (int i = 0; i < str.length; i++) {
			if (str[i].equals("null") && tc[i].getIsEmpty() == 1)
				return false;
		}
		// *********************************还差类型匹配验证
		// for(int i=0;i<str.length;i++){
		// if(tc[i].getType().equals("int"))
		// str[i] = new int();;

		// }

		return true;

	}
	public int getColumnNumber(String column) {// 确定属性在tc中的位置,-1表示没有属性存在
		int temp = -1;
		for (int i = 0; i < tc.length; i++)
			
			if (tc != null && column.equals(tc[i].getColumn())) {
				temp = i;
				break;
			}
		return temp;
	}
	public boolean removeRecord(String pos){
		if(pos.length()>0)
		{
			String[] p=pos.split(" ");
			for(int i=0;i<p.length;i++)
				linePoint.remove(Integer.parseInt(p[i]));
		}
		
		return true;
	//	tableLine++;
	}
	public String showTable() {
		String s="";
		s="表" + tableName + "信息: 主键" + primary_key + " 外键"
				+ foreign_key+"\n";
		for (int i = 0; i < tc.length; i++)
			s+=tc[i].getColumn() + "\t";
		s+="\n";
		Iterator it = linePoint.iterator();
		while (it.hasNext()) {
			TableColumnsList temp = (TableColumnsList) it.next();
			String[] column = temp.getColumn();
			for (int i = 0; i < column.length; i++)
				s+=column[i] + "\t";
			s+="\n";
		}
		return s;
	}
	public String getForeign_key() {
		return foreign_key;
	}

	public void setForeign_key(String foreign_key) {
		this.foreign_key = foreign_key;
	}

	public String getPrimary_key() {
		return primary_key;
	}

	public TableColumns[] getTc() {
		return tc;
	}

	public TableColumnsList getTcl() {
		return tcl;
	}

	public void setPrimary_key(String primary_key) {
		this.primary_key = primary_key;
	}
	public String getTableName(){
		return tableName;
	}
}

⌨️ 快捷键说明

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