【问题标题】:ORA-00933: SQL command not properly ended and ORA-00911: invalid characterORA-00933: SQL 命令未正确结束和 ORA-00911: 无效字符
【发布时间】:2017-11-08 11:19:45
【问题描述】:

我正在尝试读取与类型匹配的 TYPE_ID。我正在使用休眠。

String readType = "SELECT TYPE_ID FROM TYPE_MASTER WHERE TYPE='OS' AND DESCRIPTION LIKE'%"+Type+"%'";
Query osResults = session.createSQLQuery(readType);

对于上面的代码,我收到如下错误,

WARN  [org.hibernate.util.JDBCExceptionReporter] (DefaultQuartzScheduler_Worker-2) SQL Error: 933, SQLState: 42000
ERROR [org.hibernate.util.JDBCExceptionReporter] (DefaultQuartzScheduler_Worker-2) ORA-00933: SQL command not properly ended

[STDERR] (DefaultQuartzScheduler_Worker-2) org.hibernate.SessionException: Session is closed!

[STDERR] (DefaultQuartzScheduler_Worker-2)  at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72)

[STDERR] (DefaultQuartzScheduler_Worker-2)  at org.hibernate.impl.SessionImpl.createSQLQuery(SessionImpl.java:1774)

[STDERR] (DefaultQuartzScheduler_Worker-2)  at com.usm.job.UpdateNodeInfoTable.execute(UpdateNodeInfoTable.java:54)

[STDERR] (DefaultQuartzScheduler_Worker-2)  at org.quartz.core.JobRunShell.run(JobRunShell.java:216)

[STDERR] (DefaultQuartzScheduler_Worker-2)  at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)

如果我添加“;”在 readOsType 的末尾如下,

String readType = "SELECT TYPE_ID FROM TYPE_MASTER WHERE TYPE='OS' AND DESCRIPTION LIKE'%"+Type+"%';";

然后我得到如下错误

WARN  [org.hibernate.util.JDBCExceptionReporter] (DefaultQuartzScheduler_Worker-5) SQL Error: 911, SQLState: 42000
ERROR [org.hibernate.util.JDBCExceptionReporter] (DefaultQuartzScheduler_Worker-5) ORA-00911: invalid character

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5) org.hibernate.exception.SQLGrammarException: could not execute query

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.hibernate.loader.Loader.doList(Loader.java:2536)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.hibernate.loader.Loader.list(Loader.java:2271)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at com.usm.job.UpdateNodeInfoTable.execute(UpdateNodeInfoTable.java:55)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.quartz.core.JobRunShell.run(JobRunShell.java:216)

ERROR [STDERR] (DefaultQuartzScheduler_Worker-5)    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)

【问题讨论】:

  • 对于带有分号的查询 ERROR [org.hibernate.util.JDBCExceptionReporter] (DefaultQuartzScheduler_Worker-5) ORA-00911: 无效字符

标签: java sql hibernate


【解决方案1】:

一旦添加了“;”,就会出现 SQLGrammarException,这意味着您的查询不正确。如果你检查你的查询,你会发现 LIKE 和 ' 之间没有空格,试试这个:

String readType = "SELECT TYPE_ID FROM TYPE_MASTER WHERE TYPE='OS' AND DESCRIPTION LIKE '%"+Type+"%' ";

【讨论】:

    【解决方案2】:
    String readType = "SELECT TYPE_ID FROM TYPE_MASTER WHERE TYPE='OS' AND DESCRIPTION LIKE'%"+Type+"%' ";
    Query osResults = session.createQuery(readType);
    

    用 createQuery 替换 createSQLQuery 解决了异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-09
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多