【问题标题】:How to insert ' in DB using Hibernate如何使用 Hibernate 在 DB 中插入 '
【发布时间】:2010-01-08 15:35:44
【问题描述】:

我正在对所有数据库操作使用休眠。

我的问题是,我想在包含' 的表中插入一个字符串,例如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

如何解决问题?

【问题讨论】:

  • 有助于查看执行插入的代码。似乎您的字符串没有被转义,但 Hibernate 应该自动为您处理。事实并非如此,这让我觉得你一定在代码中做了一些有趣的事情。
  • 请出示您使用的代码!
  • 我正在为它写 hql。我只是创建 hql 并触发查询。没什么好玩的。我想这就像在表中插入 unicode 字符串。
  • 现在我们都知道 OP 的密码了... ;-)
  • 看起来您正在手动生成查询。

标签: java mysql hibernate


【解决方案1】:

首先,您是否已将表映射到 POJO?当然,这也是 Hibernate 如此强大的核心所在。如果你有,那么插入任何字符串都很容易:

MyPOJO m = new MyPOJO();
m.setName("asdf'!@#$%^&*()\"1234567890");
HibernateUtil.currentSession().save(m);

如果你需要在 HQL 语句中包含任何字符串,那么它应该是一个参数:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2012-05-22
    • 1970-01-01
    • 2011-03-30
    • 2015-10-18
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多