SQLite - 当数据库不存在时,executeUpdate异常未被捕获?(Java)

5

我有意尝试破坏我的程序,最终成功了。

在程序已经创建连接后,我删除了程序所用的SQLite数据库,并尝试更新以下数据库。

Statement stmt;
try
{
    stmt = Foo.con.createStatement();
    stmt.executeUpdate("INSERT INTO "+table+" VALUES (\'" + itemToAdd + "\')");
}
catch(SQLException e)
{
    System.out.println("Error: " + e.toString());
}

问题在于它没有捕获异常,并继续运行,就好像数据库已经成功更新了一样。与此同时,由于我已经删除了数据库,因此此时数据库甚至不存在。

  • 难道在更新时它不会检查数据库是否仍然存在吗?
  • 每次更新时,我是否需要手动检查数据库连接,以确保数据库未被损坏/删除?
  • 这是通常的做法吗,还是有更简单/更可靠的方法?

谢谢。


在进一步分析之前,1)我会打印出连接字符串并确保它指向你下载的任何数据库。2)确保数据库真的已经关闭。 - kosa
你在哪个平台上运行?Windows,Linux,Mac? - Devon_C_Miller
2个回答

1
有趣的是,我发现如果我在使用数据库时将其删除,然后尝试更新它,它会在新位置(垃圾桶中)更新数据库。只要你通过程序访问它,就无法永久删除它。

0

看起来这不是抛出的SQLException...

尝试捕获每种异常类型,看看是否会出现错误:

Statement stmt;
try
{
    stmt = Foo.con.createStatement();
    stmt.executeUpdate("INSERT INTO "+table+" VALUES (\'" + itemToAdd + "\')");
}
catch(Exception e)
{
    System.out.println("Error: " + e.toString());
}

或者

Statement stmt;
try
{
    stmt = Foo.con.createStatement();
    stmt.executeUpdate("INSERT INTO "+table+" VALUES (\'" + itemToAdd + "\')");
}
catch(Throwable e)
{
    System.out.println("Error: " + e.toString());
}

我尝试了ExceptionThrowable,但仍然遇到相同的问题。 - giant91
你使用事务吗?如果是这样,你已经提交了删除数据库的事务了吗? - Simon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接