Met*_*d89 2 java exception-handling exception try-catch mybatis
我目前面临以下问题:
我编写了一个Java程序来解析XML数据并将数据放入数据库中.因为我使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的DAO类,用于调用MyBatis映射文件的sql语句.如果MyBatis的映射配置正确完成,则插入我的内容(这是一个java bean的实例)会很糟糕.但是想象一下,如果我在数据库中重命名一个表,那么连接就会失败,因为配置错误.现在我想赶上即将发生的错误.当我使用上面的语句时:
catch (Exception e){
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
programm打印正确的异常:###原因:java.sql.SQLSyntaxErrorException:ORA-00942:Tabelle oder查看nicht vorhanden但是我不想捕获所有异常,我只是想捕获SQLSyntaxErrorException,因为我想告诉它用户,他在数据库中的表不可用.但是除了上面看到的正常异常之外,我无法捕获任何其他异常.我希望我能清楚地说出来.有人可以帮我吗?
您的例外已被包含在另一个例外中.抓住其他异常,然后分析其原因.例如:
try {
....
} catch (PersistenceException e) {
try { throw e.getCause(); }
catch (SQLSyntaxException e) {
// handle the exception
}
}
Run Code Online (Sandbox Code Playgroud)
如果这不令人满意,您可以instanceof改为探测原因:
try {
....
} catch (PersistenceException e) {
final Throwable cause = e.getCause();
if (cause instanceof SQLSyntaxException) {
// handle the exception
}
}
Run Code Online (Sandbox Code Playgroud)