java - Java中sqlite3的异常树
问题描述
背景:我正在尝试在应用程序中使用小型内存数据库。在 Map 中指定表名和列,以及该列是否为 List 中的整数(如果不在列表中,则为文本)。我可以创建连接。在尝试调用 Connection 的“createStatement()”和“execute()”方法时,如果包装在 try/catch 结构中,它们可以正常工作。但是,如果我尝试将 SQLException 向上传播到调用层次结构,则 eclipse 会抱怨“未处理的异常 SQLException”。一定是我使用地图的方式。有人可以帮我理解这两种方法有什么区别吗?谢谢你。
private void createTables () throws SQLException {
tableColumns.forEach((tableName, columnNames) -> {
StringJoiner sj = new StringJoiner(",\n");
for (String colName : columnNames) {
if (iColNames.contains(colName)) {
sj.add ("\t" + colName + " integer");
} else {
sj.add ("\t" + colName + " text not null");
}
}
String sql = "create table " + tableName + "(\n" + sj.toString() + "\n);";
System.out.println (sql);
Statement stmt;
// try {
stmt = conn.createStatement();
stmt.execute(sql);
// } catch (SQLException e) {
// e.printStackTrace();
// }
});
}
这是调用该方法的内容:
public RunIdMap (String dbFileName) throws SQLException, ClassNotFoundException {
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:" + dbFileName);
createTables ();
}
解决方案
因此,当您在调用堆栈中传播异常时,您是否在那里处理异常?
异常需要在某个地方处理,因此当您使用 throws 将异常传播到调用堆栈时,您需要在调用位置处理异常。