📄 statementexecutor.java
字号:
package org.kdb.impl;
import org.kdb.DatabaseManager;
import org.kdb.KdbException;
import org.kdb.parser.BaseToken;
import org.kdb.parser.Tokenizer;
import org.kdb.struct.Database;
import org.kdb.struct.Table;
import org.kdb.struct.BaseField;
import org.kdb.struct.FieldType;
import java.util.List;
import java.util.Date;
/**
* User: lijunzhuang
* Date: 2007-11-21
* Time: 15:11:37
*/
public class StatementExecutor {
private Tokenizer tokenizer = null;
public Tokenizer getTokenizer() {
return tokenizer;
}
public void setTokenizer(Tokenizer tokenizer) {
this.tokenizer = tokenizer;
}
public DatabaseManager getManager() {
return manager;
}
public void setManager(DatabaseManager manager) {
this.manager = manager;
}
private DatabaseManager manager = null;
public StatementExecutor(Tokenizer tokenizer, DatabaseManager dm) {
this.tokenizer = tokenizer;
this.manager = dm;
}
public List executeQuery(){
try {
String str = tokenizer.getName();
if(str.equals("*")){
str = tokenizer.getName();
if(str.equals("FROM")){
str = tokenizer.getName();
}else{
System.out.println("非法语句");
return null;
}
Table table = manager.getDatabase().getTable(str);
if(table==null){
System.out.println("该表不存在,确认该表存在于数据库中");
return null;
}
return table.getRecords();
}else{
}
} catch (KdbException e) {
e.printStackTrace();
}
return null;
}
public int executeInsert() {
try {
Table table = null;
String str = tokenizer.getName();
if (str.equals("INTO")) {
str = tokenizer.getName();
table = manager.getDatabase().getTable(str);
}
while (!str.equals("(")) {
str = tokenizer.getName();
}
str = tokenizer.getName();
List<BaseField> baseFields = table.getBaseFields();
Object[] records = new Object[baseFields.size()];
int count = 0;
while (!str.equals(")")) {
if (str.equals(",")) {
str = tokenizer.getName();
} else {
BaseField field = baseFields.get(count);
FieldType type = field.getType();
switch (type.getIndex()) {
case 0:
//代表得到的是一个整型
records[count++] = Integer.parseInt(str);
str = tokenizer.getName();
continue;
case 1:
records[count++] = str;
str = tokenizer.getName();
continue;
//代表的是一个String
case 2:
//代表的是一个Date
records[count++] = Date.parse(str);
str = tokenizer.getName();
continue;
case 3:
//代表的是Long
records[count++] = Long.parseLong(str);
str = tokenizer.getName();
continue;
default:
throw new IllegalArgumentException("非法的插入");
}
}
}
table.addRecord(records);
} catch (KdbException e) {
e.printStackTrace();
}
return 0;
}
public void executeCreate() {
try {
int cmd = BaseToken.getKey(tokenizer.getName());
switch (cmd) {
case 6:
//todo 创建database
manager.createDatabase(tokenizer.getName());
return;
case 7:
//todo 创建表
Database database = manager.getDatabase();
if (database == null) {
//todo 此处需要改进
System.out.println("Database is not created or is not setlected!");
return;
} else {
database.createTable(tokenizer.getName(), tokenizer);
// return database.addTable(tokenizer.getName());
return;
}
default:
throw new KdbException("非法的关键字");
}
} catch (KdbException e) {
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -