SSH應用中要進行批量添加的操作。比如用戶在頁面選擇了某個項目,並且填寫其他的相關信息,點擊添加后,我后台拿到用戶所選擇的項目ID,然后通過這個項目ID去數據庫的表里面查詢得到該項目下的所有客戶信息(這個信息可能會有幾千條甚至幾萬條)。最后,將用戶輸入的相關信息和查詢得到的客戶信息組合然后插入到另一個表中。
這種情況必然會涉及到批量添加的問題,請問各位大蝦,怎么做呢?
19 个解决方案
想怎么做就怎么做,看需求,再定用哪種技術
一般來說,就循環insert into
要么用hibernate的批量更新,我碰到這玩意一般都扔給數據庫做,寫存儲過程
直接為添加一個項目的操作寫存儲過程,
批量插入利用insert into select語句一次性解決。
存儲過程比較好 如果非要程序寫可以
for (int i;i<size;i++) {
session.save(obj);
if (i % 20 == 0) {
session.flush();
session.clear();
}
}
jdbc層面的話,用preparestatment可以批量操作
至於你這樣的情況可以用這樣的方式比較簡單點
insert into table1
select field1,field2,... from table2
where ...
就是用查詢插入語句來實現。。。
LZ的數據是從什么地方來的?如果是沖A表到B表的話直接用存儲過程,如果說是手動錄入,就 用for 了....
建議jdbc直接操作,存儲過程對數據庫依賴過強,不便系統移植
首先不建議用Hibernate,它的insert效率實在不搞,不過最新版本的Hibernate似乎已經在批量處理的時候做過優化了,設置一些參數如batch_size,不過性能我沒有測試過,聽說是這樣。我記得以前在做大批量數據轉移的時候我們測試過Hibernate,很慢,直接Pass,當時我們的系統由於用多個數據庫,所以用的jdbc,如果不考慮移植還是可以用存儲過程的。
使用PreparedStatement的addBatch(),然后executeBatch()去做性能比較高。
比如11000條數據,分10次執行,每次插入1000條,然后不足1000條的在插入。我們之前就是這樣用的。
// 批量更新
public void UpdateBatch(String carid, String thetime, String carstatus) {
Query q = getSession().createQuery(
"from TCarsList where carId in (" + carid + ")");
List l = q.list();
Iterator i = l.iterator();
int count = 1;
while (i.hasNext()) {
TCarsList s = (TCarsList) i.next();
if (carstatus.equals("2")) {
s.setPayTime(inputtime);
} else if (carstatus.equals("1")) {
s.setPortOffline(inputtime);
} else if (carstatus.equals("3")) {
s.setReachTime(inputtime);
}
TCarStatus cs = new TCarStatus();
cs.setCarStatusId(Integer.parseInt(carstatus));
s.setTCarStatus(cs);
attachDirty(s);
if (count % 20 == 0) { // 每修改20個清理一次緩存
getSession().flush(); // 提交修改內容
getSession().clear(); // 清空緩存
}
count = count + 1;
}
}
垂直搜索引擎站長版
專門針對個人站長推出的搜索引擎,現在推出的搜索內容包括:網頁、求職、旅游、車票、音樂、電影、視頻等搜索,會陸續推出其他內容的搜索。
無須獨立的服務器,索引數據全部存儲在達夢公司的搜索服務器,提供給站長相應的接口,從達夢公司搜索服務器返回xml方式的數據給web程序。Web程序可以是php或java,顯示的樣式由站長自己定義。要抓取的數據源由達夢公司統一配置,站長發現有新的數據源,匯報給達夢公司客服。達夢公司會每隔2小時從互聯網上抓取。全部傻瓜式操作,點擊采集、選擇站點、點擊推送到數據庫,三步完成操作。
該版本無需獨立的服務器主機。為個人站長定制一個小酷訊。
垂直搜索引擎站長版只賣服務,按年收取服務費,提供php或java的調用接口,不出售產品。
聯系電話:020-22174900,傳真:020-28315847 聯系QQ:46244150 聯系網址:達夢科技
暈,忘記結貼了,這個很早就解決了。采用的是存儲過程的方法,還用到了游標。速度還不錯。
結貼!
用 insert into。。。 select 比游標好點