hibernate createSqlQuery-日期转义分号



我已经尝试运行以下插入本机查询。

queryInsert = "INSERT INTO abc(id,date1, date2) VALUES(5,"2014-10-20 14:31:01","2014-10-20 14:31:11");";
SQLQuery sqlQuery = session.createSQLQuery(queryInsert);
sqlQuery.executeUpdate();

我得到了以下例外:

org.hibernate.exception.SQLGrammarException: could not execute statement
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    ....
    at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45]
Caused by: java.sql.SQLException: No value specified for parameter 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094) ~[mysql-connector-java-5.1.31.jar:na]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997) ~[mysql-connector-java-5.1.31.jar:na]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983) ~[mysql-connector-java-5.1.31.jar:na]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928) ~[mysql-connector-java-5.1.31.jar:na]
    at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2487) ~[mysql-connector-java-5.1.31.jar:na]
    at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2462) ~[mysql-connector-java-5.1.31.jar:na]
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2311) ~[mysql-connector-java-5.1.31.jar:na]
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2262) ~[mysql-connector-java-5.1.31.jar:na]
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2246) ~[mysql-connector-java-5.1.31.jar:na]
    at com.jolbox.bonecp.PreparedStatementHandle.executeUpdate(PreparedStatementHandle.java:205) ~[bonecp-0.8.0.RELEASE.jar:na]
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    ... 29 common frames omitted

hibernate将日期字符串中的冒号(:)作为查询参数。我该怎么做才能使它不被视为查询参数?我试过用\:和::逃离,但都不起作用。

非常感谢!

更新:

感谢您的回复,不幸的是,我无法对我的案例进行参数化查询。它实际上更像是一个包含INSERT INTO语句的转储文件,所以拆分它们并创建参数化查询只会增加开销,所以我只想运行这些INSERT INTO查询语句。

我刚刚从postgres数据库导出了一些数据(要求它创建insert语句)

垃圾场看起来像

INSERT INTO scenario_collection (id, date_collected, file_name, scenarioid) VALUES (137, '2014-10-16 14:47:00', '20141016134500-eland.log', 11);

因此,请尝试使用单引号

您可以通过参数设置值,因此该值不会被解释为控制代码!你可以在这里找到一个很好的解释

String hql = "from Stock s where s.stockCode = :stockCode";
List result = session.createQuery(hql)
.setParameter("stockCode", "7277")
.list();

我想知道你的日期1&date2是字符串?如果没有,请给出日期参数。

最新更新