、私は次のコードを見つけました:postgresqlのjdbcドライバの "ResultSet.getMetaData.getTableName(col)"は常に空文字列を返していますか?私は、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の実装が正しいかどうかわかりませんが、基になるテーブル名を返すことは、空の文字列よりもはるかに便利で、他のほとんどのデータベースは空の文字列ではなく、基礎となるテーブル名を提供します。
私はplay2のanormフレームワークをpostgesql:Play2's anorm can't work on postgresqlで使用していますが、それは他のデータベースでうまく機能します。
postgresqlのjdbcドライバの正しい実装についてどう思いますか?空の文字列、基になるテーブル名などを返しますか?