Верно ли, что «ResultSet.getMetaData.getTableName (col)» драйвера jdbc postgresql всегда возвращает пустую строку?

Когда я использую postgresql, я обнаружил следующий код:

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from t");

String tableName = rs.getMetaData().getTableName(1);
System.out.println(tableName);

Он печатает пустую строку.

Я проверил исходный код и обнаружил, что метод org.postgresql.jdbc2.AbstractJdbc2ResultSetMetaData # getTableName всегда возвращает пустую строку.

Исходный код:

public abstract class AbstractJdbc2ResultSetMetaData implements PGResultSetMetaData {

    /*
     * @param column the first column is 1, the second is 2...
     * @return column name, or "" if not applicable
     * @exception SQLException if a database access error occurs
     */
    public String getTableName(int column) throws SQLException
    {
        return "";
    }
}

Вы можете видеть, что он просто возвращает "" .

Я нашел обсуждение этого вопроса, см. http://archives.postgresql.org/pgsql-jdbc/2009-12/msg00100.php

Они думают "rs.getMetaData.getTableName (col)" должен возвращать имя псевдонима в запросить не имя базовой таблицы. Но это сложно реализовать, поэтому лучше оставить его пустым.

Также они предоставили метод для получения имени таблицы, используйте:

PGResultSetMetaData.getBaseTableName() 

Пример:

ResultSet rs = stmt.executeQuery("select * from x");
// convert it to PGResultSetMetaData 
PGResultSetMetaData meta = (PGResultSetMetaData)rs.getMetaData(); 
String tableName = meta.getBaseTableName(1);

Теперь он может печатать правильное имя таблицы.

Я не знаю, что реализация postgresql правильная, но возвращение имени базовой таблицы гораздо полезнее, чем пустая строка, и большинство других баз данных предоставляют имя базовой таблицы вместо пустой строки.

У меня проблема с использованием структуры anorm play2 с postgesql: Anorm Play2 не может работать с postgresql , но это хорошо работает с другими базами данных.

Как вы думаете, правильная реализация драйвера jdbc postgresql? Вернуть пустую строку, имя базовой таблицы или что-то еще?

7
задан Community 23 May 2017 в 12:24
поделиться