PostgreSQLのResultSetMetaData#getColumnName
地味な話ですが。
PostgreSQLのJDBCは、ResultSetMetaData#getColumnNameの挙動が他のDBのJDBCと違う。
selectするときにカラム名に別名をつけた場合、getColumnNameは元のカラム名、getColumnLabelは別名をとってくるんですが、PostgreSQLは、どっちも別名を返します。
以下、PostgreSQL, H2, hsqldbで試したコード。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class Main { private static final String SQL = "select column as alias from table"; /** * @param args */ public static void main(String[] args) throws Exception { Class.forName("org.postgresql.Driver"); Connection conn = DriverManager.getConnection("jdbc:postgresql://省略", "user", "pass"); printMeta("postgresql: ", conn); conn.close(); Class.forName("org.h2.Driver"); conn = DriverManager.getConnection("jdbc:h2:tcp://localhost/省略", "user", "pass"); printMeta("h2: ", conn); conn.close(); Class.forName("org.hsqldb.jdbcDriver"); conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/省略", "user", "pass"); printMeta("hsqldb: ", conn); conn.close(); } private static void printMeta(String dbms, Connection conn) throws SQLException { ResultSetMetaData meta = conn.createStatement().executeQuery(SQL).getMetaData(); System.out.println(dbms); System.out.println(" columnName: " + meta.getColumnName(1)); System.out.println(" columnLabel: " + meta.getColumnLabel(1)); } }
出力
postgresql: columnName: alias columnLabel: alias h2: columnName: COLUMN columnLabel: ALIAS hsqldb: columnName: COLUMN columnLabel: ALIAS
Oracle, MySQLもh2やhsqdbと同じだったはず。
別なこと調査してたら、なぜかここに辿り着いた。。
以上