필자는 광고 된 열에 대해 다양한 SQL 데이터베이스의 기존 테이블에 쿼리를 제출할 수있는 웹 서비스를 작성하고 있습니다. 나는 다음과 같은 자바 코드를 실행 가능한 열 결정된 이름으로SQL 문에서 열 이름을 따옴표로 묶어야하는지 확인하는 방법은 무엇입니까?
CREATE TABLE stpg.test (
test integer,
"Test" integer,
"TEST" integer
);
insert into stpg.test values (1,2,3);
:
나는 그렇게 정의 된 PostgreSQL의 테이블이
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 당신이 정말로 의미를 이해합니다. –
나는 그것을 피할 수 있다면 대소 문자를 구분하는 컬럼 이름을 사용하는 것은 나쁜 생각이라고 제안한다. –