2014-10-20 56 views
0

我试着运行以下插入本机查询。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查询语句。

+0

使用参数和setParameter – 2014-10-20 08:24:14

+0

@ScaryWombat我更新了我的文章。谢谢! – lorraine 2014-10-20 09:21:46

回答

1

我刚才导出的Postgres数据库的一些数据(要求它创建insert语句)

转储看起来像

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

所以尽量使用单报价

+0

这个工程!谢谢! – lorraine 2014-10-21 07:16:16

-1

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

0

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

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

我已更新我的帖子。谢谢! – lorraine 2014-10-20 09:22:33