【发布时间】:2014-02-22 01:57:55
【问题描述】:
我正在编写一个 Web 服务,该服务本质上允许用户针对广告列向各种 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"));
}
我明白了:
测试 测试 测试如果用户提交查询,在返回时引用列,例如
select test, Test, TEST from stpg.test 他会得到 1 1 1 而不是预期的 1 2 3。
这是一个错误吗?
我知道执行select test, "Test", "TEST" from stpg.testreturn 会正确返回结果。但是我的用户不知道要获取在引号中定义的“大写”列的值,他们需要在查询中使用引号。
有没有一种方法可以确定列名区分大小写,以便我可以用引号报告它的名称?我需要针对不同的数据库进行一般性的操作,因此 JDBC api 方法更可取。我尝试使用 ResultSetMetaData 并调用 getColumnName 和 getColumnLabel 但它们返回的名称不带引号。调用 isCaseSensitive 总是返回 false。
【问题讨论】:
-
为什么不总是引用列名?
-
这是记录在案的行为:postgresql.org/docs/current/static/… 与其他人相反,我强烈建议您从不引用列名,除非您真正了解其中的含义。
-
如果可以避免的话,我建议使用区分大小写的列名是个坏主意。
标签: java postgresql jdbc