我想適應春季JDBC,但是什麼錯誤我使用這些匿名類,我們不能通過任何局部變量,除非他們是最後的,可能很容易安排,但如果我需要循環數組或集合呢? 我不能聲明「FedModel fm」是最終的,因爲它在循環中被重新初始化,但我需要調用execute方法100次。這是我遇到問題的具體場景,因爲我不知道如何將BLOB插入到數據庫中。辛苦與春天匿名/回調類的數據持久
for (int i = 0; i < fedModels.size(); i++) {
FedModel fm = fedModels.get(i);
jdbcTemplate.execute("INSERT INTO items (name, video_blob) VALUES (?, ?)",
new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
protected void setValues(PreparedStatement ps, LobCreator lobCreator)
throws SQLException {
ps.setString(1, fm.getName());
ps.setString(2, fm.getDifficultyLevel());
ps.setString(3, fm.getEquipment());
lobCreator.setBlobAsBinaryStream(ps, paramIndex, contentStream, contentLength);
}
});
}
我能想到的唯一的事情,是創建一個擴展AbstractLobCreatingPreparedStatementCallback並添加構造函數fedModels這樣我就可以做內環路的靜態嵌套類。但僅使用JDBC會更容易。
如果一個最終變量被分配了一個對象的引用,它將始終引用同一個對象。如果它被分配了一個原始值,它可能只做一次,並且該值不能被改變。你如何認爲我可以宣佈「FedModel fm」變量和「我」變量final,如果他們都分配了100次? – lisak 2010-09-25 10:13:41
對不起,我認爲在for循環中聲明的變量會被重新分配100次,但我只是試過了,因爲它在for循環的1個循環中被初始化了一次,但在第二個循環中被重新創建,對吧? – lisak 2010-09-25 10:40:42
@lisak - 這是正確的。 – 2010-09-25 12:26:42