我试着运行以下插入本机查询。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查询语句。
使用参数和setParameter – 2014-10-20 08:24:14
@ScaryWombat我更新了我的文章。谢谢! – lorraine 2014-10-20 09:21:46