Khi tôi sử dụng postgresql, tôi thấy đoạn mã sau:Có đúng là "ResultSet.getMetaData.getTableName (col)" của trình điều khiển jdbc của postgresql luôn trả về một chuỗi rỗng không?
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from t");
String tableName = rs.getMetaData().getTableName(1);
System.out.println(tableName);
It in một chuỗi rỗng.
Vì vậy, tôi đã kiểm tra mã nguồn và tìm thấy phương thức org.postgresql.jdbc2.AbstractJdbc2ResultSetMetaData#getTableName
luôn trả về một chuỗi trống.
Mã nguồn là:
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 "";
}
}
Bạn có thể thấy nó chỉ trả về một ""
.
Tôi tìm thấy một cuộc thảo luận về vấn đề này, vui lòng xem: http://archives.postgresql.org/pgsql-jdbc/2009-12/msg00100.php
Họ nghĩ "rs.getMetaData.getTableName (col)" nên trả lại tên bí danh trong truy vấn không phải là tên bảng bên dưới. Nhưng rất khó để thực hiện, vì vậy tốt hơn là để trống.
Ngoài ra họ đã đưa ra một phương pháp để có được tên bảng, sử dụng:
PGResultSetMetaData.getBaseTableName()
mẫu:
ResultSet rs = stmt.executeQuery("select * from x");
// convert it to PGResultSetMetaData
PGResultSetMetaData meta = (PGResultSetMetaData)rs.getMetaData();
String tableName = meta.getBaseTableName(1);
Bây giờ nó có thể in các tên bảng chính xác.
Tôi không biết việc thực hiện postgresql là chính xác, nhưng trả về tên bảng cơ bản hữu ích hơn nhiều so với một chuỗi rỗng, và, hầu hết các cơ sở dữ liệu khác cung cấp tên bảng bên dưới thay vì một chuỗi rỗng.
Tôi gặp sự cố khi sử dụng khung anorm của play2 với postgesql: Play2's anorm can't work on postgresql, nhưng hoạt động tốt trên cơ sở dữ liệu khác.
Bạn nghĩ gì khi triển khai đúng trình điều khiển jdbc của postgresql? Trả về một chuỗi rỗng, tên bảng cơ bản, hoặc cái gì khác?