【问题标题】:SQL syntax error on WHERE clause using apache Derby使用 apache Derby 的 WHERE 子句上的 SQL 语法错误
【发布时间】:2014-03-17 15:23:38
【问题描述】:

对于下面的 SQL 选择语句; -

resultSet = statement.executeQuery("SELECT SS100.ORDERS.ORDER_ID, SS100.ORDERS.ORDER_NUMBER," +" SS100.ORDERS.PERSON_ID, SS100.PERSON.FIRST_NAME"+
"FROM  PERSON, ORDERS " +
"WHERE SS100.PERSON.PERSON_ID = SS100.ORDERS.PERSON_ID " );

我在 WHERE 关键字上遇到语法错误 - 转储如下:-

 java.sql.SQLSyntaxErrorException: Syntax error: Encountered "WHERE" at line 1, column 126.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedStatement.executeQuery(Unknown Source)
    at Database.orderQuery(Database.java:146)
    at MainApp.main(MainApp.java:19)

Caused by: java.sql.SQLException: Syntax error: Encountered "WHERE" at line 1, column 126.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)... 10 more

我尝试过使用 alias 语句,但在 '.' 上出现错误。点运算符。我显然在做一些根本错误的事情,但我现在看不到,有人可以帮忙吗?

【问题讨论】:

  • 检查您在此处生成的 SQL。如果将其打印到控制台,您会注意到,FROM 之前缺少一个空格。
  • 你在FROM之前少了一个空格
  • 谢谢大家,你说的很对,问题已经解决了,现在我要解决剩下的问题了!!

标签: java sql derby


【解决方案1】:

看这里:

resultSet = statement.executeQuery("SELECT ..." +... + " SS100.ORDERS.PERSON_ID, SS100.PERSON.FIRST_NAME"+
    "FROM  PERSON, ORDERS " +

"SS100.PERSON.FIRST_NAME""FROM" 之间没有空格。

这可以通过始终以空格开头来轻松解决:

resultSet = statement.executeQuery("SELECT ..." +... + " SS100.ORDERS.PERSON_ID, SS100.PERSON.FIRST_NAME"+
    " FROM  PERSON, ORDERS " +
    " WHERE ..."

【讨论】:

  • 嗨 Luiggi,按照上面的方法,问题已经解决了,感谢您对以空格开头的部分提出的极好的建议,我将从现在开始这样做!
  • @MartinClifford 不客气。如果您发现此答案对您的问题最有用,请在代表下方标记绿色复选标记 :)。
  • 嗨 Luiggi,对不起,我不明白“下面的绿色检查”是什么意思?
  • @MartinClifford 请参考How does accepting an answer work?
【解决方案2】:

这个字符串的串联会变成

"SELECT SS100.ORDERS.ORDER_ID, SS100.ORDERS.ORDER_NUMBER," +" SS100.ORDERS.PERSON_ID, SS100.PERSON.FIRST_NAME"+

"来自人,订单" + "哪里 SS100.PERSON.PERSON_ID = SS100.ORDERS.PERSON_ID "

SELECT SS100.ORDERS.ORDER_ID, SS100.ORDERS.ORDER_NUMBER, SS100.ORDERS.PERSON_ID,
SS100.PERSON.FIRST_NAMEFROM  PERSON, ORDERS WHERE SS100.PERSON.PERSON_ID =
SS100.ORDERS.PERSON_ID

问题在于FIRST_NAMEFROM 加入的位置。在FIRST_NAME后面加一个空格,sql应该可以正常运行了。

但是,您真的应该问自己为什么要这样做。如果您知道要连接的值,为什么不从一个字符串开始。

【讨论】:

  • 嗨,Ash,空间是问题所在,我现在已经整理好了,谢谢。但是我不明白你关于连接和一个字符串的最后评论,你能解释一下吗?
猜你喜欢
  • 2020-04-14
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多