hibernate插入數(shù)據(jù)時(shí)沒有一點(diǎn)問題,但更新數(shù)據(jù)的時(shí)候出現(xiàn)亂碼的問題,
找了好久,后來發(fā)現(xiàn)是這個(gè)問題。
hibernate3使用了新的hsql解釋器,使用了antlr。如果在hsql正文中直接使用中
文的話,會(huì)出現(xiàn)亂碼,例如:
String s = "張三";
String hsql = "from User where username='"+s+"'";
List list = session.createQuery(hsql).list;
這種查詢不會(huì)出結(jié)果。因?yàn)檎麄€(gè)語句在被antlr解釋后會(huì)有亂碼。
好的寫法是:
String s = "張三";
String hsql = "from User where username=?"
List list = session.createQuery(hsql).setString(0,s).list;
這就不會(huì)有問題。
原因:第二種方式,是hibernate在antlr解釋完了以后,再把參數(shù)傳入,這個(gè)時(shí)候
就不會(huì)有亂碼了。
即使沒有這個(gè)問題,也最好不要在sql語句中帶上很多的變量參數(shù)。hibernate這種
思想是對(duì)的:sql和變量分離開來,不要把兩者混在一起。
另外,如果使用hibernate2則不會(huì)有上面的問題,因?yàn)閔ibernate2使用的是舊版的
hsql解釋器。但hibernate2的語法不如hibernate3豐富。
posted on 2007-05-11 21:44
EricWong 閱讀(976)
評(píng)論(1) 編輯 收藏 所屬分類:
Java