2012-09-19 24 views
1

我想從mysql表中刪除數據,如果它與當前日期。使用休眠刪除SQL表中的數據

這是我寫的代碼,並呈現出在線路的異常「錯誤」:

什麼是從那裏應用條件與表中刪除數據的過程?

    Date date=new Date(); 

        SimpleDateFormat myFormat=new SimpleDateFormat("dd-MM-yyyy"); 

        String todayDate=myFormat.format(date); 

        String query="delete * from today_list where today_date="+"'"+todayDate+"'";  
     Transaction t1=session.beginTransaction(); 
     session.createQuery(query).executeUpate();//ERROR 
        t1.commit(); 
+0

你得到的例外是什麼? – Averroes

回答

3

根據SQL語法,你不應該寫*delete後,即改變你的語句來

delete from ...

雖然它與任何ORM包括Hibernate打交道時,是不正確的做法。這種方式繞過緩存(如果你有緩存)。更好的方法是使用會話API方法刪除實體。

+0

yaa ...我已經完成了...像...從TodayList_model中刪除_todaydate = 20-09-2012 .....還有,...從TodayList_model中刪除todayList_Obj WHERE _todaydate = '20 -09-2012'....但沒有用 –

3

請勿將實際參數值連接到查詢字符串中。改爲使用setParameter

Query query = session.createQuery("delete from todayList where todayDate = :date "); 
query.setParameter("date", date); 
query.executeUpate(); 

這很容易弄清楚,但下次請發佈錯誤信息。

編輯請注意查詢字符串中的表名。它不是數據庫中的實際表名,而是Hibernate實體名稱。

+0

yaa ...我已經做到了...像....從TodayList_model中刪除_todaydate = 20-09-2012 .....並且還喜歡,。 ...從今天刪除TodayList_model todayList_Obj WHERE _todaydate = '20-09-2012'....但沒用... –

+0

錯誤就像....無法執行更新queryorg.hibernate.exception.SQLGrammarException:無法執行更新查詢......由...引發:java.sql.SQLException:來自服務器的語法錯誤或訪問衝突消息:「您的SQL語法有錯誤;請查看與您的MySQL服務器版本對應的手冊,以獲取正確的語法在'todaylist_0_ where'(_today = '20'09-2012'')在第1行使用「 –

+0

幾件事情。 1)你可以讓Hibernate記錄完整的SQL語句並將其添加到原始文章中嗎? 2)你可以添加實際的表名和列名到原始文章嗎? 3)你還可以添加代表這個表的Hibernate實體類的源代碼(或者是hbm.xml的相關部分)嗎? 4)**不要將實際參數值連接到查詢字符串中。請改用'setParameter' **你試過這個嗎?你的第一個評論表明你沒有。 – bpgergo

0

他們是兩件事情可以拋出異常:

1 - 你應該寫「從刪除」不帶「*」

2 - 揣摩你所需要的數據格式,這也可以使如果你把錯誤的格式扔了一次。

+0

我也試過後刪除但也是錯誤是一樣的...我讀了saome那裏的hibernate 3.0更新時遇到問題,因爲該方法被聲明爲execute.upate()而不是execute.update()..它的修改錯誤在下一個版本中它似乎..我必須現在嘗試下一個版本 –

+0

是的。 Hibernate在update()方面有問題。很多人喜歡使用saveOrUpdater()。有時它更好,但並非總是如此。 – grachol

+0

謝謝@grachol ...明白了...... –