建议在Java中使用PreparedStatement.setBoolean(1,Boolean.TRUE)?

问题描述 投票:1回答:2

Hello Guys可以帮助我找出在PreparedStatement.setBoolean(1,Boolean.TRUE)和PreparedStatement.setBoolean(1,true)之间的最佳实践是什么

java jdbc boolean
2个回答
2
投票

因为Boolean.TRUE的类型为Boolean,并且

void setBoolean(int parameterIndex, boolean x) throws SQLException;

需要boolean,使用setBoolean(1, true)更有意义,以避免不必要的拆箱。


0
投票

两者均有效,但请注意setBoolean接受setBoolean,而不接受booleanBooleanTRUETRUE周围的包装对象)。没有理由将包装器与Boolean一起使用,它只是通过true方法自动拆箱到setBoolean


您在评论中说:

我在java doc中发现了此问题,“驱动程序在将其发送到数据库时将其转换为SQL BIT或BOOLEAN值”。因此最好使用Boolean.TRUE

不,驱动程序使用的SQL类型与此无关。它与boolean方法签名所说的有关。方法签名说它接受一个booleanValue,所以这就是它的样子。使用booleanValue起作用的唯一原因是before调用setBoolean,编译器输出代码以在boolean上调用Boolean.TRUE以获取其等效的setBoolean值(booleanValue())。实际上,这:

Boolean.TRUE

和此:

boolean

产生identical字节码,看起来像这样:

21:getstatic#6 //字段java / lang / Boolean.TRUE:Ljava / lang / Boolean;24:invokevirtual#7 //方法java / lang / Boolean.booleanValue :()Z27:invokeinterface#8,3 // InterfaceMethod java / sql / PreparedStatement.setBoolean:(IZ)V
© www.soinside.com 2019 - 2024. All rights reserved.