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

📄 statementexecutor.java

📁 用JAVA实现了,将DB装入内存,内存由DBMS控制,实现简单数据库的创建、数据表的创建、记录插入、查询以及表的删除。
💻 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 + -