gpt4 book ai didi

java - 通过jdbc访问主机时如何克服词法错误?

转载 作者:行者123 更新时间:2023-12-01 07:36:48 25 4
gpt4 key购买 nike

我能够连接到 IMS 段并使用 where 子句中的主键和 select * 查询执行 SQL 查询。但是每当我尝试对另一列进行选择时,我都会遇到词汇错误。

Select * from table where column-name='something'

这会给我异常'线程“main”com.ibm.ims.jdbc.TokenMgrError中的异常:第1行第42列的词法错误。遇到:“-”(45),之后:““'。如果我将列名作为名字,那么词法错误将发生在名字中连字符的位置。我尝试通过准备好的声明来做到这一点,但它仍然不起作用。

进行以下更改后,我仍然遇到异常。从表中选择 *,其中 'column-name'='something'原因:com.ibm.ims.jdbc.ParseException:在第 1 行第 36 列遇到“”\'column-name\'“”。期待其中之一: ... “(”...

从表中选择*,其中列+'-'+名称='某事''-' 词法错误异常

无效的转义序列(有效的是\b\t\n\f\r\"\'\),这是我在尝试添加反引号或一些转义序列时收到的消息。

最佳答案

在大多数 SQL 方言中,- 字符不是(无分隔)标识符中的合法字符。例如,SQL-92 spec说:

     <identifier> ::=
[ <introducer><character set specification> ] <actual identifier>

<actual identifier> ::=
<regular identifier>
| <delimited identifier>

<SQL language identifier> ::=
<SQL language identifier start>
[ { <underscore> | <SQL language identifier part> }... ]

<SQL language identifier start> ::= <simple Latin letter>

<SQL language identifier part> ::=
<simple Latin letter>
| <digit>

(TL;DR - 字母、数字和下划线)

(我犹豫是否要说所有方言,因为 SQL 语言的寓言充满了与各种标准的偏差。)

<小时/>

Does this apply to %,_ too, I can see some solutions which are allowing escape sequence with %,_. The solutions mentioned still don't work for hyphen. Reference: myitforum.com/cs2/blogs/jnelson/archive/2008/08/27/121684.aspx

首先,您找到的引用适用于字符串文字中的转义,而不是标识符名称中的转义。它不适用于这个问题。 (它适用于您的 SQL 方言吗?)

其次,根据上面的语法,如果您使用的 SQL 方言符合标准,则标识符中应该允许使用下划线。

第三,该标准讨论了“分隔标识符”(使用双引号字符作为分隔符)。我不知道这在真正的 SQL 方言中得到了多么广泛的支持,但我想即使是这样,您可以使用的字符也会受到限制......以及其他警告。

第四,无论 SQL 标准如何规定,您所使用的特定方言的文档语法才是您应该查看的内容。 (我只是用它来说明 SQL 的一般属性......在没有您实际使用的方言的任何细节的情况下。“大型机”SQL 可能有很多东西。)

最后,最好不要尝试在标识符中使用“时髦字符”。使用拉丁字母、数字和下划线……如果您的 SQL 方言甚至不允许这样做,那么就坚持使用它所允许的内容。

并阅读供应商 SQL 文档!!!

@Rob I've tried both and it did not work.

请仔细阅读供应商 SQL 文档。它应该告诉你什么会起作用。如果它说你不能这样做......好吧,你不能。

关于java - 通过jdbc访问主机时如何克服词法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10914552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com