使用 ODBC 转义包含问号的访问表名称

Posted

技术标签:

【中文标题】使用 ODBC 转义包含问号的访问表名称【英文标题】:Escape an access table name containing a question mark with ODBC 【发布时间】:2013-09-03 13:19:26 【问题描述】:

我有一个 Access 数据库要查询如下:

id - name - Print? 
1  - one  - Yes
2  - two  - No

现在我在 java 中的查询,使用带有 ODBC 连接器的 PreparedStatement,如下所示:

select * from table where [Print?] = Yes

我找不到绕过这个问题的方法。我知道无论谁创建数据库,这都是一个糟糕的设计选择,但它与已经改变它的应用程序紧密相连,这不是一种选择。

PS。我读过How to query for a MS Access column whose name has a question mark, via ODBC?,但这并没有回答我的问题。

【问题讨论】:

你试过Statement.executeQuery("select * from table where [Print?] = Yes")而不是使用PreparedStatement吗? 我现在试过了 - 出现以下错误。 “[Microsoft][ODBC Text Driver]COUNT 字段不正确”,微软表示可以通过以下方式解决: 1. 要解决此问题,您必须删除“?”源文件中列名字段中的字符。让我想知道为什么他们允许您在访问表名中使用问号而不是在 ODBC 中使用问号... 微软逻辑...您有权在数据库上创建视图吗?正如这里所建议的***.com/questions/1409610/… 我决定创建另一个查询:qry_print 只选择 id 和 Print?从表和名称打印? “打印”栏。正如另一个答案中所建议的那样,几乎提出了一个观点。希望有另一种方法,但我想有时一个混乱的问题需要一个混乱的解决方案。谢谢 【参考方案1】:

正如问题的 cmets 所建议的那样,显然唯一的解决方法是要么

重命名 Access 表中的列以删除问号,或

在 Access 中创建保存的查询以返回具有不同名称的列,然后针对查询而不是表运行 JDBC 操作。

【讨论】:

以上是关于使用 ODBC 转义包含问号的访问表名称的主要内容,如果未能解决你的问题,请参考以下文章

如何避免问号字符的 ODBC 参数化?在文字和评论中?

.htaccess 不会转义 RewriteRule 上的问号

java插入中文到oracle变问号

linux sed命令中的正则表达式问号加号圆括号等需要转义

htmlget传参中值有问号怎么办

Mysql 显示 UTF-8 字符的问号? [复制]