乌龙事件 以及 SQLException的 nextException getMessage

今天搞了一个乌龙 ,忘记了数据库里已经有一个 order_id为4的值 , 然后我自己这里开始循环 1,2,3 都是对的, 但是到第四条怎么就错了呢 , 然后开始查 它报的错误, 它报的错是
引用


com.ibm.db2.jcc.am.BatchUpdateException: [jcc][t4][102][10040][4.13.127] 批处理出现故障。虽然已经提交了批处理,但是该批处理的某个成员至少发生了一个异常。
使用 getNextException() 来检索已经过批处理的特定元素的异常。 ERRORCODE=-4229, SQLSTATE=null


但实际上, 并非这个错误,这个错误是因为在批处理的时候 一个总的错误,实际上是某个批处理子项报的错误,  然后用了getNextException就得到了具体的错误,
发现是这个
Error for batch element #1: DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=5;MPOS.BAT2_CMP_RESULT, DRIVER=4.13.127

然后才想起来 4 这个值已经被我用过了, 而这个字段是有唯一索引的,然后重新弄就好了


public void batchInsertUserWithDbSwitchKey(int number, int start, Connection conn) throws SQLException{
		conn.setAutoCommit(false);  
		
//	    		"BAT2_CMP_RESULT (BATID, SRC, TRTM, CHANNEL_NO,CHL_ORDER_ID,MY_ORDER_ID,MCH_NO, SEC_MCH_NO," +
//				"TRAM, TRTP, REL_ORDER_ID,MEMO, BRH_ID, MY_MCH_NO,MY_SEC_MCH_NO,TERM_NO," +
//				"COST_RATE,TOTAL_RATE,COST,TOTAL_FEE,RZAMT,CKTURN,CKFG,CKDT,TRADE_TYPE," +
//				"MCH_ORDER_ID,PAYBANK,FZFG,MY_PTMCH_RATE,MY_PTMCH_FEE,D0FG,TRADE_CODE, " +
//				"CLDT,BANK_CODE) " + 
//				" values(?,?,?,?,?,?,?,?,"
//				+ "?,?,?,?,?,?,?,?,"
//				+ "?,?,?,?,?,?,?,?,?,"
//				+ "?,?,?,?,?,?,?,?,?) " );
	    		
		PreparedStatement ps = conn.prepareStatement("insert into " +
				"BAT2_CMP_RESULT (BATID, MY_ORDER_ID, MCH_NO, SEC_MCH_NO," +
				"TRAM, CKTURN, CKFG,  BANK_CODE) " + 
					" values(?,?,?,?,?,?,?,?) " );
	try{	
		for(int i = 1000; i <= 2000; i++){
			
			ps.setLong(1, 802L);
			ps.setString(2, String.valueOf(i));
			ps.setString(3, "1");
			ps.setString(4, "2");
			ps.setDouble(5, 200);
			ps.setInt(6, 1);
			ps.setInt(7, 1);
			ps.setString(8, "303100");
			
			ps.addBatch();
			
		}
		ps.executeBatch();
	}catch(SQLException e){
		SQLException e1 = e.getNextException();
		while(e1 != null){
			System.out.println(e1.getMessage());
			e1 = e1.getNextException();
		}
		
		e.printStackTrace();
		
	}
		conn.commit();
		conn.close();
	}

猜你喜欢

转载自dannyhz.iteye.com/blog/2406808