giz*_*gok 0 java sql jdbc mainframe
我能够连接到IMS段并使用where子句和select*查询中的主键执行sql查询.但每当我尝试用另一列进行选择时,我就会出现词汇错误.
Select * from table where column-name='something'
Run Code Online (Sandbox Code Playgroud)
这会给我一个例外'线程中的异常"main"com.ibm.ims.jdbc.TokenMgrError:第1行第42列的词汇错误.遇到:" - "(45),之后:""'.如果我将列名作为名字,那么词汇错误将出现在名字中连字符的位置.我已经尝试通过Prepared Statement这样做,它仍然无法正常工作.
执行以下更改后,我仍然会遇到异常.选择*from table where'column-name'='something' 引起:com.ibm.ims.jdbc.ParseException:遇到""\'column-name \'""在第1行第36列.期待其中一个:......"".
选择*from table where column +' - '+ name ='something'词汇错误的例外与' - '
无效的转义序列(有效转义序列是\ b\t \n\f\r \"\'\),这是我在尝试添加反引号或某些转义序列时得到的消息.
在大多数SQL方言中,-字符不是(无限制)标识符中的合法字符.例如,SQL-92规范说:
<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>
Run Code Online (Sandbox Code Playgroud)
(TL; DR - 字母,数字和下划线)
(我毫不犹豫地说所有的方言,因为SQL语言的动词充斥着与各种标准的偏差.)
这是否也适用于%,_我也可以看到一些允许使用%,_的转义序列的解决方案.提到的解决方案仍然不适用于连字符.参考:myitforum.com/cs2/blogs/jnelson/archive/2008/08/27/121684.aspx
首先,您找到的引用适用于字符串文字中的转义,而不是标识符名称中的转义.它不适用于这个问题.(它适用于您的SQL方言吗?)
其次,根据上面的语法,如果您使用的SQL方言符合标准,则应在标识符中允许使用下划线.
第三,标准谈到"分隔标识符"(使用双引号字符作为分隔符).我不知道这在真正的SQL方言中得到了多大的支持,但我想,即使它存在限制你可以使用哪些字符......以及其他警告.
第四,无论SQL标准说什么,您正在使用的特定方言的文档语法就是您应该关注的内容.(我只用它来说明SQL 的一般属性......在没有你实际使用的方言的任何细节的情况下."大型机"SQL可能有很多东西.)
最后,最好不要在标识符中使用"时髦字符".使用拉丁字母,数字和下划线...如果您的SQL方言甚至不允许,那么坚持它允许的内容.
并阅读供应商的SQL文档!
@Rob我已经尝试了两种,但它没有用.
请仔细阅读供应商SQL文档.它应该告诉你什么会起作用.如果它说你不能这样做......好吧,你做不到.
| 归档时间: |
|
| 查看次数: |
2306 次 |
| 最近记录: |