最近在project里碰到了ResultSet转DefaultTableModel问题,当ResultSet取出数据后,转DefaultTableModel,而该死的ResultSet,取数据的方式是getString,getInt,getDoule等等,我当然可以用ResultSetMetaData去获取字段类型,但是每个数据库的字段类型总有细微差别,而且字段类型众多,一一判断确实是令人头痛的问题;当然如果用getObject,然后再instanceof判断大概也可以,不过总觉得不是很正统的路子;不知道ResultSet转DefaultTableModel的时候,有什么比较巧妙的方法,可以不丢失字段类型又很高效地转换?
之所以提出这个问题是因为JTable在jdk1.6下加了排序装饰器,本来偷懒在ResultSet转DefaultTableModel的时候无论是date,int,double还是varchar都用了getString方法,显示当然是没问题的,但是本应该按照double数值排序的列,由于现在被转换成了String,排序器只会按照String的顺序排列。
欢迎大家来讨论一下。
附上一段ResultSet转DefaultTableModel的代码:   DefaultTableModel dtm = new DefaultTableModel();
   ResultSetMetaData rsmd  = rs.getMetaData();
   int cloumncout =cloumncout=rsmd.getColumnCount();
   String[] str=new String[cloumncout];                                                                                                        //加入列名
   for(int n=0;n<cloumncout;n++){
str[n]=rsmd.getColumnName(n+1);
dtm.addColumn(str[n]);
}
   rs.last();
   int all=rs.getRow();
   rs.beforeFirst();
   while(rs.next()){        //向表中加入内容,先用Vector容器提取一行的内容.
 Vector v=new Vector();                                           
 for(int k=0;k<cloumncout;k++){
 v.addElement(rs.getString(k+1));      
 }
 dtm.addRow(v);     
   }