所以我有这个程序基本上是在java中重新创建SQL。我有这个“驱动程序”类,可以控制整个事情。它调用并实例化各种类和方法,使其全部工作。在这里,我有这个方法
public void checkCommand(String input) {
for (Command c : commands) {
if (c.matches(input)) {
try {
c.execute();
} catch (MyException e) {
System.out.println(e.getMessage());
}
return;
}
}
System.out.println("That was not a valid command.");
Execute是一个将在输入的每个命令上调用的方法。因此,在某些方面,每件事都会经历这一点。在DefineTableCommand类中,执行contains
database.addTable(tableName, fieldList);
database是我用来存储所有表的Object的单例实例。 addTable命令调用其他一些东西,依此类推。在这些中,我有一些可能出错的方法,比如表名已经存在或者沿着这些行。
public void addTable(String tableName, String fieldList) throws MyException {
Table table;
table = new Table(tableName, fieldList);
if (instance.checkForDuplicates(tableName)) {
throw new MyException(
"There was a table with that name already present.");
} else {
instance.tableCollection.put(tableName, table);
}
}
现在,我想要发生的事情以及我认为会发生的事情是,异常将从addTable抛出,异常将在堆栈中传递给checkCommand中的catch。这似乎并非如此,我不确定我理解为什么。
进一步解释。向用户提供一个提示,在该提示中他们输入各种命令(例如,定义表emp具有字段(名称varchar))如果他们的命令有问题,他们应该看到错误消息,但程序应该继续运行。所以我们说他们输入一个与已经存在的表同名的表,应该给出一个错误消息,程序继续没有新表。而不是打印错误消息,但仍未添加表。
答案 0 :(得分:1)
确保execute()的部分签名是:
execute() throws MyException
并且在其实现中不会捕获MyException,如:
//eg
void execute() throws MyException
{
database.addTable(tableName, fieldList);
//any code
}
如果是这种情况。
答案 1 :(得分:0)
确保在命令类execute()方法
之前没有捕获 MyException