我在方法中收到NullPointerException。我唯一可疑的部分是我可能没有在我准备好的陈述中添加任何参数。代码如下
try {
String sql = "update myTable set Name = 'valid' where startDate = ?";
myPrepStatement = conn.prepareStatement(sql);
for(Date date : dateList) {
myPrepStatement.setDate(1,date);
myPrepStatement.addBatch();
}
myPrepStatement.executeBatch();
}
catch (Exception e){
}
假设conn设置正确并且所有其他变量都已正确初始化。如果dateList为空,我是否可以收到NullPointerException? 感谢
答案 0 :(得分:1)
如果dateList为空,我是否可以收到
NullPointerException
?
这取决于PreparedStatement
接口的JDBC实现。
但一般来说,如果dateList
为空,则不会向PreparedStatement
添加批处理操作,因此在执行executeBatch
时,它应该不执行任何操作,并且不应该引发异常。
答案 1 :(得分:0)
public interface PreparedStatement extends Statement
如果dateList为空,我是否可以收到 的NullPointerException?
因此,如果您想100%确定,那么您应该深入了解JDBC驱动程序实现代码。
例如,MariaDB JDBC驱动程序实现:
public void addBatch() throws SQLException {
if (this.batchPreparedStatements == null) {
this.batchPreparedStatements = new ArrayList();
}
this.batchPreparedStatements.add(new MySQLPreparedStatement(
this.connection, this.sql, this.dQuery,
this.useFractionalSeconds));
}
MySQL JDBC驱动程序实现:
public synchronized void addBatch()
throws SQLException
{
if (this.batchedArgs == null) {
this.batchedArgs = new ArrayList();
}
for (int i = 0; i < this.parameterValues.length; ++i) {
checkAllParametersSet(this.parameterValues[i], this.parameterStreams[i], i);
}
this.batchedArgs.add(new BatchParams(this.parameterValues, this.parameterStreams, this.isStream, this.streamLengths, this.isNull));
}