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

📄 tablestructure.java

📁 一个用JAVA语言实现的SQL编译器。能够迅速实现对SQL语言的解析。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:


import java.text.DecimalFormat;
import java.util.*;

public class TableStructure {

	private String tableName;

	private String primary_key= null;

	private String foreign_key;

	private ArrayList linePoint = new ArrayList();

	private TableColumns[] tc;
    private TableColumnsList tcl;
    
    private int columnCount;
	//private int tableLine;

	public TableStructure() {
	}
	public boolean createTable(String tableName, TableColumns[] tc,
			String primary_key, String foreign_key) {
		boolean result = false;

		this.tableName = tableName;
		this.tc = tc;
		this.primary_key = primary_key;
		this.foreign_key = foreign_key;
		columnCount = tc.length;
		// tableLine=0;
		result = true;
		return result;

	}

	public ArrayList getLinePoint() {
		return linePoint;
	}
	public void setLinePoint(ArrayList linePoint) {
		this.linePoint = linePoint;
	}
	public boolean insertRecord(String[] str){
		
		if (checkColumn(str) == false)
			return false;
		tcl = new TableColumnsList();
		tcl.insertRecord(tc.length, str);
		linePoint.add(tcl);
		return true;
		// tableLine++;
	}
	public String updateRecord(UpSet set, Where where) {
		
		int set_temp;
		for (int i = 0; i < set.getColumn().size(); i++) {// 判断set中的属性是否存在
			set_temp = getColumnNumber((String)set.getColumn().get(i));
			if (set_temp == -1)
				return "Can't find column!\n";
		}
		if (where == null) {// 更新所有列记录
			Iterator it = linePoint.iterator();
			while (it.hasNext()) {
				TableColumnsList tcl_temp = (TableColumnsList) it.next();
				for (int i = 0; i < set.getColumn().size(); i++) {
					set_temp = getColumnNumber((String)set.getColumn().get(i));
					tcl_temp.getColumn()[set_temp]=(String)set.getOperator().get(i);
				}
			}
		} 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;
			}
			if(posi.length()>0)
			{
				int pos;
				String[] p=posi.split(" ");
				for(int j=0;j<p.length;j++)
				{
					pos=(Integer.parseInt(p[j]));
					TableColumnsList tcl_temp =(TableColumnsList)linePoint.get(pos);
					for (int i = 0; i < set.getColumn().size(); i++) {
						if(primary_key.equals((String)set.getColumn().get(i)))
						{
							int keyCount=getColumnNumber((String)set.getColumn().get(i));
							Iterator its = linePoint.iterator();
							while (its.hasNext()) {
								tcl = (TableColumnsList) its.next();
								if (((String)set.getOperator().get(i)).equals(tcl.getColumn()[keyCount]))
									return "The value of PK has exist!";
							}
						}
						set_temp = getColumnNumber((String)set.getColumn().get(i));
						tcl_temp.getColumn()[set_temp]=(String)set.getOperator().get(i);
					}
				}
			}			
		}
		return "suc";
	}
	public String selectRecord(Vector column1,Where where,Vector function,Vector othername, String by, boolean order) {
		int []s2;
		if((String)column1.get(0)=="" && column1.size()==1 )
			if(function.size()==0){
			s2=new int[tc.length];
			for(int i=0;i<s2.length;i++)
				s2[i]=i;		
			}
			else s2=new int[function.size()]; 
		else{
			boolean f;
			s2=new int[column1.size()];
			for(int j=0;j<s2.length;j++)
				s2[j]=-1;
			for(int k=0;k<s2.length;k++)
			{
				f=true;
				for(int j=0;j<tc.length;j++)
				{
					if(tc[j].getColumn().equals((String)column1.get(k)))
					{
						s2[k]=j;f=false;break;
					}
					if((String)column1.get(k)=="")
					{
						f=false;break;
					}
				}
				if(f) {
					return "Can't find column!\n";
				}
			}
			
		}
		if(where.getOperator1().size()!=0)
		{
			String posi="";
			boolean flag;
			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\n";}		
				}
				if(flag)posi=posi+position+" ";
			}
			if(function.size()!=0){
				String s1="";
				for (int i = 0; i < s2.length; i++)
					s1+=(String)othername.get(i) + "\t";
				s1+="\n";
				for(int i=0;i<function.size();i++)
					switch(((String)function.get(i)).charAt(1)){
					case 'a':s1+=max(posi,s2[i])+"\t";break;
					case 'i':s1+=min(posi,s2[i])+"\t";break;
					case 'v':s1+=avg(posi,s2[i])+"\t";break;
					case 'u':s1+=sum(posi,s2[i])+"\t";break;
					case 'o':s1+=count(posi,s2[i])+"\t";break;
					}
				return s1+"\n";
			}
			else{
				String s1="";
				for (int i = 0; i < s2.length; i++)
					s1+=tc[s2[i]].getColumn() + "\t";
				s1+="\n";
				TableColumnsList temp;
				String[] column,p;
				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++)
				{
					temp = (TableColumnsList)linePoint.get(Integer.parseInt(p[i]));
					column = temp.getColumn();
					for (int j = 0; j < s2.length; j++)
					{
						s1+=column[s2[j]] + "\t";
					}
					s1+="\n";
				}
				return s1;
			}
		}else if(function.size()!=0){
			String s1="";
			String posi="";
			for(int i=0;i<linePoint.size();i++)
				posi+=i+" ";
			for (int i = 0; i < s2.length; i++)
				s1+=(String)othername.get(i) + "\t";
			s1+="\n";
			for(int i=0;i<function.size();i++)
				switch(((String)function.get(i)).charAt(1)){
				case 'a':s1+=max(posi,s2[i])+"\t";break;
				case 'i':s1+=min(posi,s2[i])+"\t";break;
				case 'v':s1+=avg(posi,s2[i])+"\t";break;
				case 'u':s1+=sum(posi,s2[i])+"\t";break;
				case 'o':s1+=count(posi,s2[i])+"\t";break;
				}
			return s1+"\n";

⌨️ 快捷键说明

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