我正在编写一个Web服务,它基本上允许用户向各个SQL数据库中的预先存在的表提交对广告列的查询。如何确定colum名称是否必须在SQL语句中用引号括起来?
我有这样的定义的PostgreSQL表:
CREATE TABLE stpg.test (
test integer,
"Test" integer,
"TEST" integer
);
insert into stpg.test values (1,2,3);
要我运行下面的Java代码可用列确定的名字:
ResultSet rs = dbmd.getColumns(null, "stpg", "test", null);
while (rs.next()) {
System.out.println(rs.getString("COLUMN_NAME"));
}
我得到:
test Test TEST
如果用户提交查询,请参考返回的列,如 select test, Test, TEST from stpg.test
他会得到1 1 1而不是预期的1 2 3. 这是一个错误?
我知道做select test, "Test", "TEST" from stpg.test
会正确返回结果。但是,我的用户不知道要获取在引号中定义的“大写”列的值,因为它们需要在查询中使用引号。
有没有一种方法可以确定列名是否区分大小写,以便我可以用引号报告其名称?我需要一般地针对不同的数据库这样做,因此JDBC API方法更可取。我尝试使用ResultSetMetaData
并调用getColumnName
和getColumnLabel
,但它们返回没有引号的名称。调用isCaseSensitive
总是返回false。
你为什么不总是引用列名? – Camilo
这是记录的行为:http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS和其他人我强烈建议**从来没有**报价专栏名称unles你真的了解其含义。 –
如果你可以避免使用大小写敏感的列名,我建议使用这种方法是个不错的主意。 –