2010-01-08 52 views
-1

我對所有數據庫操作都使用hibernate。如何在數據庫中插入'使用休眠

我的問題是,我想在表中插入一個字符串,其中包含'rea9'ea/rea9'ea。 雖然插入它我得到以下異常

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ea/rea9','6a8b2622d3b8ab7de31c0e2496cef2bd',5840,'')' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.Util.getInstance(Util.java:381) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3515) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2046) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949) 
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) 
    at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:165) 
    ... 8 more 

如何解決問題?

+0

將有助於看到的代碼做插入。好像你的字符串沒有被轉義,但是Hibernate應該自動爲你處理。事實並非如此,這讓我覺得你必須在代碼中做一些有趣的事情。 – 2010-01-08 15:43:31

+0

請顯示您使用的代碼! – 2010-01-08 15:45:36

+0

我正在爲它寫hql。我只是創建了hql並激發了查詢。 沒什麼好玩的。我想這就像在表中插入unicode字符串。 – Rites 2010-01-08 15:46:45

回答

2

首先,您是否將您的表映射到POJO?這當然是Hibernate如此強大的核心。如果你有,然後將所有的字符串很簡單:

MyPOJO m = new MyPOJO(); 
m.setName("asdf'[email protected]#$%^&*()\"1234567890"); 
HibernateUtil.currentSession().save(m); 

如果你需要在一個HQL語句中的任何字符串,那麼它應該是一個參數:

HibernateUtil.currentSession().createQuery("from MyTable where Name=:name") 
      .setParameter("name","asdf'[email protected]#$%^&*()\"1234567890") 
      .list();