Java JDBC准备的带有“QUOTE”的报表&引用;在列名中

Java JDBC准备的带有“QUOTE”的报表&引用;在列名中,java,ms-access,jdbc,prepared-statement,Java,Ms Access,Jdbc,Prepared Statement,我使用JDBC连接从Access数据库获取数据。 数据库设计不是我的控制。数据库中有一些列的名称中包含“?”,例如:Open?、Paid?,等等 当我试图用PreparedStatement获取数据时,它会给我一个错误。查询是: 选择打开?从tblJobList,其中WeekEnding=? 我还尝试使用括号,如[Open?],但结果是一样的 我收到的错误是“参数太少…”,因为我只将一个参数推入PreparedStatement 我无法使用普通语句,因为WeekEnding=?,因为该值是时间

我使用JDBC连接从Access数据库获取数据。 数据库设计不是我的控制。数据库中有一些列的名称中包含“?”,例如:
Open?
Paid?
,等等

当我试图用PreparedStatement获取数据时,它会给我一个错误。查询是:

选择打开?从tblJobList,其中WeekEnding=?
我还尝试使用括号,如
[Open?]
,但结果是一样的

我收到的错误是“参数太少…”,因为我只将一个参数推入PreparedStatement

我无法使用普通语句,因为
WeekEnding=?
,因为该值是时间戳,我无法使用该语句。只有事先准备好的声明在这里有效

有谁能告诉我如何在PreparedStatement中使用此类列名吗?

使用“字符”

"SELECT \"Open?\" FROM tblJobList WHERE WeekEnding=?"
对oracle进行了测试,似乎可以与mssqlserver配合使用


我不确定,但您可以尝试
/
来摆脱?的
特殊含义,并将其用作普通字符。例如:

"SELECT Open//? FROM tblJobList WHERE WeekEnding=?"
您可以在此处获得与您的问题类似的信息:

MSSQL中的转义引号是通过双引号完成的,因此一个“”或一个“”将分别产生一个转义的“”和“”。

仅针对当前技术更新此内容:

虽然JDBC-ODBC网桥和Access ODBC无法处理列名中包含问号的PreparedStatement,但JDBC驱动程序可以很好地处理它,如下代码所示:

String connectionUrl=“jdbc:ucanaccess://C:/Users/Public/UCanAccessTest.accdb”;
Connection conn=DriverManager.getConnection(connectionUrl);
String sql=“从tblJobList中选择ID,[打开?],其中WeekEnding=?”;
PreparedStatement ps=conn.prepareStatement(sql);
ps.setDate(1,java.sql.Date.valueOf(“2016-01-01”);
结果集rs=ps.executeQuery();
while(rs.next()){
System.out.printf(“%d:%s%n”、rs.getInt(“ID”)、rs.getBoolean(“打开”);
}
康涅狄格州关闭();
有关UCanAccess的更多信息,请参阅


对此不确定,但您是否尝试将
本身作为第一个参数传递,并将
周末
值作为第二个参数传递?不,我没有。让我试试,它又制造了一个错误。早些时候它说它在1参数上短,现在它在2参数上短,它不给出错误,但不正确返回结果返回列名而不是值我的错误。内部引号变成了一个文字。很好的建议,但不幸的是它不适用于Access ODBC(我刚刚在Eclipse中测试了它,当我尝试
.execute()
准备好的语句时,得到了“参数太少”错误)所以它似乎对@user1614217的问题没有帮助。问题不在于查询,而在于准备好的语句。我还没有找到解决方法。还在挣扎。但根据我的编码经验和知识,我可以判断问题不在于SQL查询,而在于它所取代的PreparedStations机制?在字符串中。不,它不起作用。问题不在于查询,而在于准备好的语句。