隨筆-208  評論-469  文章-30  trackbacks-0

          hibernate插入數(shù)據(jù)時沒有一點問題,但更新數(shù)據(jù)的時候出現(xiàn)亂碼的問題,
          找了好久,后來發(fā)現(xiàn)是這個問題。

          hibernate3使用了新的hsql解釋器,使用了antlr。如果在hsql正文中直接使用中
          文的話,會出現(xiàn)亂碼,例如:

          String s = "張三";
          String hsql = "from User where username='"+s+"'";
          List list = session.createQuery(hsql).list;
          這種查詢不會出結(jié)果。因為整個語句在被antlr解釋后會有亂碼。

          好的寫法是:
          String s = "張三";
          String hsql = "from User where username=?"
          List list = session.createQuery(hsql).setString(0,s).list;
          這就不會有問題。

          原因:第二種方式,是hibernate在antlr解釋完了以后,再把參數(shù)傳入,這個時候
          就不會有亂碼了。


          即使沒有這個問題,也最好不要在sql語句中帶上很多的變量參數(shù)。hibernate這種
          思想是對的:sql和變量分離開來,不要把兩者混在一起。


          另外,如果使用hibernate2則不會有上面的問題,因為hibernate2使用的是舊版的
          hsql解釋器。但hibernate2的語法不如hibernate3豐富。

          posted on 2007-05-11 21:44 EricWong 閱讀(977) 評論(1)  編輯  收藏 所屬分類: Java

          評論:
          # re: hibernate更新數(shù)據(jù)出現(xiàn)亂碼的問題 2008-01-10 09:49 | bike
          這不算是更新出現(xiàn)的亂碼吧,應(yīng)該是查詢傳參不對造成的
            回復(fù)  更多評論
            
          主站蜘蛛池模板: 福建省| 文成县| 阿荣旗| 南昌县| 黎城县| 灌阳县| 加查县| 油尖旺区| 普兰店市| 洪泽县| 两当县| 临潭县| 明星| 屯昌县| 荆门市| 勃利县| 沙田区| 监利县| 顺义区| 疏勒县| 贵溪市| 姜堰市| 保亭| 通榆县| 噶尔县| 偏关县| 湘乡市| 海原县| 南汇区| 兴文县| 塔城市| 大同市| 芜湖市| 绍兴县| 南召县| 鹤山市| 耒阳市| 巨野县| 洛宁县| 龙游县| 嵊州市|