我建立了一个数据库连接。然后,我尝试建立连接,如果出现异常,则返回。在代码的下面,我有一个Finally块,我打算用它作为一个catch all来关闭连接。
Connection con = null;
try{
try{
con = connectDB();
}
catch{
return;
}
...code
catch{
return;
}
finally{
con.close();
}
然而,如果初始连接失败,它将跳转到我的con所在的最后一个块。close()引发空指针异常。最好的办法是什么?有没有办法测试con是否为null?我试过if(con.isValid(0))和con。等于(null)和con==null,它们都不起作用。
您可以使用con!=空
或对象。nonNull(con)检查连接对象是否不为null,然后在最后关闭它,如下图所示:
Connection con = null;
try{
con = connectDB();
//add your code
catch{
//log exception
return;
} finally {
if(Objects.nonNull(con)) { //or use con != null
con.close();
}
}
或者也可以使用try with resources(因为连接实现了自动关闭),如下所示:
try(Connection con = connectDB()) {
//code
catch {
return;
}
if (con.isValid(0))
如果con为null,则无法工作。您将调用null变量的一个成员,导致null点异常。
这同样适用于
con.equals(null)
现在
if ( con == null )
确实有效,但您希望进行负面比较:
if ( con != null )
相反
Connection
实现了AutoClosable
,因此您可以使用try with资源语句。
try (Connection con = connectDB()) {
[some code]
}
所以,场景是我正在做一些数据库操作,最后提交/回滚,然后连接关闭。但是连接关闭也会抛出SQLException。 在这种情况下,最好的方法是什么? 捕获并记录它。 捕获并抛出异常,以便调用函数可以处理它 在#1的情况下,调用函数永远不会知道出了问题。
我刚刚意识到,当任何参数为null时,JPQL where子句都不能像我预期的那样工作。例如,这个简单的JPQL查询 当参数为null时不返回任何结果,即使数据库中存在名称设置为null的实体。 在这种情况下,Hibernate使用WHERE实体执行SQL。名称=空。显然,这不是由数据库处理的,因为对于空比较,标准定义为NULL(请参见SQL is NULL and=NULL)。JPQL还有一个
我使用从我的mysql数据库添加节点到。 我的问题是记录中的某些列值可能为null。我如何在cypher查询中处理它们,因为对于mysql表中的null值,它没有创建任何节点。 下面是我使用neo4j java驱动程序创建节点的代码 在neo4j浏览器控制台中,当我在cypher下面运行查询时,没有形成任何节点。 更新:我能够在Java处理空值。但是对于另一张桌子,我有一些奇怪的行为。 在Neo4
null
如果我有下面这样的事务方法,在事务提交和回滚的情况下,最后一个块是什么时候执行的?例如,如果“使用hibernate在数据库中持久化某个实体”引发了一些hibernate异常,这是真的吗? 1) 事务回滚2)最后执行块 或者 1)最后执行块2)事务回滚
本文向大家介绍详解Java异常处理中finally子句的运用,包括了详解Java异常处理中finally子句的运用的使用技巧和注意事项,需要的朋友参考一下 当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向。依赖于方法是怎样编码的,异常甚至可以导致方法过早返回。这在一些方法中是一个问题。例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文件的代码被异常处理机制旁路。finally关