带“”的java JDBC PreparedStatement在列名中
我使用JDBC连接从Access数据库获取数据。
数据库设计不是我的控制。数据库中有包含“”的列包括在他们的名字中,例如:Open?
、Paid?
等等
当我试图用PreparedStatement获取数据时,它会给我一个错误。查询是:
SELECT Open? FROM tblJobList WHERE WeekEnding=?
我还尝试使用[Open?]
之类的括号,但结果是一样的
我收到的错误是“参数太少…”因为我只在PreparedStatement中输入一个参数
我不能使用普通语句,因为WeekEnding=?
这个值是一个时间戳,我无法处理它。只有事先准备好的声明在这里有效
有人能告诉我如何在PreparedStatement中使用这种列名吗
# 1 楼答案
我不确定,但您可以尝试
//
来转义special meaning of ?
,并将其用作普通字符。比如:你可以在这里得到与你的问题类似的东西: Round bracket in string with JDBC prepared statement
# 2 楼答案
MSSQL中的转义引号是由双引号完成的,因此一个“”或一个“”将分别产生一个转义的“”和“”
# 3 楼答案
为了更新当前的技术:
虽然JDBC-ODBC网桥和Access ODBC无法处理列名中包含问号的PreparedStatement,但UCanAccessJDBC驱动程序可以很好地处理它,如下代码所示:
有关UCanAccess的更多信息,请参阅
Manipulating an Access database from Java without ODBC
# 4 楼答案
使用“角色”
对oracle进行了测试,似乎与mssqlserver配合使用
How to select a column in SQL Server with a special character in the column name?