Cuando uso PostgreSQL, encontré código siguiente:¿Es correcto que "ResultSet.getMetaData.getTableName (col)" del controlador jdbc de postgresql siempre devuelva una cadena vacía?
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from t");
String tableName = rs.getMetaData().getTableName(1);
System.out.println(tableName);
Imprime una cadena vacía.
Comprobé el código fuente y encontré que el método org.postgresql.jdbc2.AbstractJdbc2ResultSetMetaData#getTableName
siempre devuelve una cadena vacía.
El código fuente es:
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 "";
}
}
Se puede ver que sólo devuelve un ""
.
encontré una discusión sobre esto, por favor ver: http://archives.postgresql.org/pgsql-jdbc/2009-12/msg00100.php
Ellos piensan "rs.getMetaData.getTableName (col)" debería devolver el nombre de alias en no consulta el nombre de la tabla subyacente. Pero es difícil de implementar, por lo que es mejor dejarlo vacío.
También se dio un método para obtener el nombre de la tabla, utilice:
PGResultSetMetaData.getBaseTableName()
muestra:
ResultSet rs = stmt.executeQuery("select * from x");
// convert it to PGResultSetMetaData
PGResultSetMetaData meta = (PGResultSetMetaData)rs.getMetaData();
String tableName = meta.getBaseTableName(1);
Ahora se puede imprimir el nombre de la tabla correcta.
No sé si la implementación de postgresql es correcta, pero devolver el nombre de tabla subyacente es mucho más útil que una cadena vacía y la mayoría de las otras bases de datos proporcionan el nombre de tabla subyacente en lugar de una cadena vacía.
Tengo un problema al usar el framework anorm de play2 con postgesql: Play2's anorm can't work on postgresql, pero eso funciona bien en otras bases de datos.
¿Cuál cree usted que es la implementación correcta del controlador jdbc de postgresql? ¿Devuelve una cadena vacía, un nombre de tabla subyacente u otra cosa?