首页 > 解决方案 > 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 ();
}

标签: javasqlite

解决方案


因此,当您在调用堆栈中传播异常时,您是否在那里处理异常?

异常需要在某个地方处理,因此当您使用 throws 将异常传播到调用堆栈时,您需要在调用位置处理异常。


推荐阅读