Справочная информация: я пытаюсь использовать небольшую базу данных в памяти в приложении. Имена таблиц и столбцы указываются на карте, и является ли столбец целым числом в списке (если нет в списке, то это текст). Я могу создать связь в порядке. При попытке вызвать методы соединения «createStatement ()» и «execute ()», они работают нормально, если заключены в структуру try / catch. Однако, если я попытаюсь распространить исключение SQLEx вверх по иерархии вызовов, затмение жалуется на «необработанное исключение 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 ();
}