所以我有这个程序,它基本上是在 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 类中,执行包含
database.addTable(tableName, fieldList);
数据库是我用来存储所有表的对象的单例实例。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。情况似乎并非如此,我不确定我理解为什么。
进一步解释。如果他们的命令有问题,他们会看到一条错误消息,但程序应该继续运行。所以假设他们输入了一个与已经存在的表同名的表,应该给他们一个错误消息并且程序继续没有新表。相反,没有打印错误消息,但仍然没有添加表。