如下测试代码:
public class Test {
public static void main(String[] args){
PreparedStatement st=null;
try{
String strConn = "jdbc
racle:thin:@127.0.0.1:1521:sdh";
Class.forName("oracle.jdbc.driver.OracleDriver"
;
Connection connSrcNM=DriverManager.getConnection(strConn,"zz","zz"
;
connSrcNM.setAutoCommit(false);
st = connSrcNM.prepareStatement("INSERT INTO abc " +
"VALUES ( ?,?,?,?,?)"
;
st.setString(1, "2CECDDE23DBD0086E04386AF06070086"
;
st.setString(2, " 40- 0- 2- 4"
;
st.setString(3, "2CECDDE221D90086E04386AF06070086"
;
st.setLong(4, 1);
st.setString(5, "2CECDDB8D5280086E04386AF06070086"
;
st.addBatch();
st.setString(1, "2CECDDE245B10086E04386AF06070086"
;
st.setString(2, "013-12-072"
;
st.setString(3, "2CECDDE2227D0086E04386AF06070086"
;
st.setLong(4, 1);
st.setObject(5, null,Types.CHAR);
st.addBatch();
st.executeBatch();
connSrcNM.commit();
}catch (Exception e){
e.printStackTrace();
}finally{
try{
st.close();
}
catch(Exception ex)
{}
}
}
}
出现报空指针,如下:
java.lang.NullPointerException
at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
at oracle.jdbc.driver.OraclePreparedStatement.checkBindTypes(OraclePreparedStatement.java:3271)
at oracle.jdbc.driver.OraclePreparedStatement.setNull(OraclePreparedStatement.java:1322)
at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:2746)
at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:2905)
at Test.main(Test.java:27)
但是如果只插入空值,就不报错,如果在插入空值,ADDBATCH后,再插个别的值就报错,或者先插入一个值,再插入空值同样报错,请问这是什么原因
|