gpt4 book ai didi

java - 无法使用 MyBatis 在 Java 中捕获 SQLSyntaxErrorException

转载 作者:行者123 更新时间:2023-11-30 06:29:16 26 4
gpt4 key购买 nike

我目前面临以下问题:

我编写了一个解析 XML 数据并将数据放入数据库的 Java 程序。因为我使用 MyBatis,数据库几乎可以是所有已经存在的数据库。我将只向您展示一段代码,然后我将解释问题。

public void insert(SourceContent content){    
SqlSession session = sqlSessionFactory.openSession();
try {
session.insert("SourceDocument.insert", content);
session.commit();
} catch (Exception e){
e.printStackTrace();
} finally {
session.close();
}
}

这是我的 DAO 类,用于调用 MyBatis 映射器文件的 sql 语句。如果 MyBatis 的映射配置正确完成,插入我的内容(它是一个 java bean 的实例)工作正常。但是想象一下,如果我重命名我数据库中的一个表,那么连接会因为配置错误而失败。现在我想捕捉即将到来的错误。当我使用上面的语句时:

catch (Exception e){
e.printStackTrace();
}

程序打印出正确的异常:### Cause: java.sql.SQLSyntaxErrorException: ORA-00942: Tabelle oder View nicht vorhanden但我不想捕获所有异常,我只想捕获 SQLSyntaxErrorException,因为我想告诉用户,他在数据库中的表不可用。但是除了上面看到的正常异常之外,我无法捕获任何其他异常。我希望我已经说清楚了。谁能帮帮我?

最佳答案

您的异常已被包装到另一个异常中。捕获其他异常,然后分析其原因。例如:

try {
....
} catch (PersistenceException e) {
try { throw e.getCause(); }
catch (SQLSyntaxException e) {
// handle the exception
}
}

如果这不令人满意,您可以使用 instanceof 来查找原因:

try {
....
} catch (PersistenceException e) {
final Throwable cause = e.getCause();
if (cause instanceof SQLSyntaxException) {
// handle the exception
}
}

关于java - 无法使用 MyBatis 在 Java 中捕获 SQLSyntaxErrorException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11669770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com