問題怎樣得以解決了,暈了差不多一天。java.lang.ArrayIndexOutOfBoundsException//數(shù)組越界? 都是它惹的禍。因在程序中我是引用了了一個數(shù)組,但也不至于會出差吧,:(。那么問題到在那呢?是這樣的,在我第系統(tǒng)中要訪問兩個不同的數(shù)據(jù)庫,一個是當(dāng)前開發(fā)的系統(tǒng)的數(shù)據(jù)庫,另一個是用來攻取某些數(shù)據(jù)。我只把第一個數(shù)據(jù)庫用spring+hibernate來管理,另一個用jdbc業(yè)處理。“org.springframework.transaction.TransactionSystemException: Could not roll back
Hibernate transaction; nested exception is org.hibernate.TransactionException: J
DBC rollback failed
org.hibernate.TransactionException: JDBC rollback failed
WARN - DefaultActionInvocation.executeResult(260) | No result defined for action
com.legend.shipment.web.Shipment2Action and result null
”從這個看來,我猜想是不是不能在DAO中引用另一個數(shù)據(jù)庫的Connection,這樣會造成spring事務(wù)管理的混亂。于是我就改寫。把用jdbc處理的東東,也采用spring+hibernate的模式。問題依舊。這可就暈了,眼看系統(tǒng)就要上線了。到了關(guān)鍵時候怎么出問題呢?心里有點(diǎn)緊張,一絲不安。一直有信心把問題解決。沒有辦法了,我只得在整個程序中添加了很多l(xiāng)og.debug()來測試。測試出,當(dāng)我不用另一個(獲取數(shù)據(jù)的數(shù)據(jù)庫)時,問題就不會產(chǎn)生,只要一加上就會產(chǎn)生上述問題。這可就奇怪了。還有就是有些數(shù)據(jù)可以,有數(shù)據(jù)數(shù)據(jù)不可以。那么問題應(yīng)該出錯在數(shù)據(jù)據(jù)格式(轉(zhuǎn)化)上。我把要從獲取數(shù)據(jù)庫的數(shù)據(jù)手動硬寫在程序中,程序通過。我原來從數(shù)據(jù)庫獲取的數(shù)據(jù)仔細(xì)看過。原來,數(shù)據(jù)庫的數(shù)據(jù)為81.6的數(shù)據(jù)輸出來的時候變成了81.599999999999994315658113919198513031005859375。這樣我就想是不是就會產(chǎn)生數(shù)組溢出呢?原后我就把數(shù)據(jù)改成81.6這樣子就沒有問題了。讓我們仔細(xì)看一下源碼
sql = "select b.labourCost,b.epibolyCost from TworkCost as b where b.jscostId = :jscostId";
session = getSession();
query = session.createQuery(sql);
query.setInteger("jscostId",jscostId.intValue());
list = query.list();
iterator = list.iterator();
Object[] rows = null;
while(iterator.hasNext()) {
rows= (Object[]) iterator.next();
// System.out.println((BigDecimal)rows[0]+" "+rows[1]);
}
"rows"數(shù)組中的內(nèi)容是BigDecimal的,我可把它強(qiáng)制轉(zhuǎn)換成了double型的,就在這個轉(zhuǎn)換過程中,小數(shù)位增加了很多,當(dāng)添加到數(shù)據(jù)庫中時就發(fā)出了數(shù)組溢出的error!
所以,搞技術(shù)工作的一定要嚴(yán)謹(jǐn),細(xì)心
回復(fù) 更多評論