|
数据库为postgresql 8.0.1, jdbc driver postgresql-8.0-310.jdbc3.jar
表
create table test(field1 varchar(8), field2 varchar(4));
下面代码:
ResultSet rst = stmt.executeQuery("select coalesce(field1, field2) from test");
System.out.println(rst.getMetaData().getColumnDisplaySize(1));
结果:-5
如果接着
CachedRowSetImpl rs = new CachedRowSetImpl();
rs.populate(rst);
导致
java.sql.SQLException: Invalid column display size. Cannot be less than zero
at javax.sql.rowset.RowSetMetaDataImpl.setColumnDisplaySize(RowSetMetaDataImpl.java:267)
at com.sun.rowset.CachedRowSetImpl.initMetaData(CachedRowSetImpl.java:679)
at com.sun.rowset.CachedRowSetImpl.populate(CachedRowSetImpl.java:597)
...
如果在设计表时,将field1和field2的宽度设为相等,例如 varchar(8)
则
System.out.println(rst.getMetaData().getColumnDisplaySize(1));
结果为 8
rs.populate(rst); 也不出错,
类似问题在SQL2000下没有
到底是postgresql的问题还是jdbc驱动的问题 |
|