[英]JDBC PreparedStatement with “?” in the column name
我正在使用JDBC连接从Access数据库中获取数据。 数据库设计不是我的控制。 数据库中有带有“?”的列。 包括在他们的名字中,例如: Open?
, Paid?
,还有更多。
当我尝试使用PreparedStatement获取数据时,它给我一个错误。 查询是:
SELECT Open? FROM tblJobList WHERE WeekEnding=?
我也尝试使用[Open?]
类的括号,但结果是相同的。
我收到的错误是“参数太少...”,因为我仅将一个参数推入PreparedStatement。
由于WeekEnding=?
我无法使用普通语句WeekEnding=?
因为此值为时间戳,所以我无法使用Statement。 只有准备好的语句在这里起作用。
谁能告诉我如何在PreparedStatement中使用这类列名?
使用“字符
"SELECT \"Open?\" FROM tblJobList WHERE WeekEnding=?"
针对oracle测试了这一点,似乎可以与mssqlserver一起使用
只是为了针对当前技术进行更新:
虽然JDBC-ODBC Bridge和Access ODBC无法处理带有包含问号的列名的PreparedStatement,但UCanAccess JDBC驱动程序可以很好地处理它,可以通过以下代码确认:
String connectionUrl = "jdbc:ucanaccess://C:/Users/Public/UCanAccessTest.accdb";
Connection conn = DriverManager.getConnection(connectionUrl);
String sql = "SELECT ID, [Open?] FROM tblJobList WHERE WeekEnding=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setDate(1, java.sql.Date.valueOf("2016-01-01"));
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.printf("%d: %s%n", rs.getInt("ID"), rs.getBoolean("Open?"));
}
conn.close();
有关UCanAccess的更多信息,请参见
我不确定,但是您可以尝试//
逃避special meaning of ?
的special meaning of ?
并将其用作常规字符。 喜欢:
"SELECT Open//? FROM tblJobList WHERE WeekEnding=?"
您可以在此处获得与您的问题类似的内容: 带有JDBC准备语句的字符串中的圆括号
在MSSQL中,转义引号是通过双引号来完成的,因此“”或“”将分别产生一个转义的'和'。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.