背景:我正在尝试在应用程序中使用小型内存数据库。表名和列在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在调用堆栈中传播异常时,需要在调用位置处理异常。