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

10-02 04:21
查看更多