你是说想知道这个记录集的数据源吗?也就是想知道这些数据是从哪个表select出来的,对不对?

解决方案 »

  1.   

    可是如果只给一个Result,没别的信息,想要得到数据表名几乎是不可能的呀
    比如说,如果我的result是从两个表做连接select出来的呢,或者是从更多的表中select出来的,光是只有一个result是不可能会知道这些的
      

  2.   

    对呀,我就是这个意思,不管Result是从几个表中取得的数据,我现在就是已经有了一个Result,向知道某一列的数据是从什么表中来的,难道没有办法吗??
      

  3.   

    我想这个问题应该不可能有办法解决
    再打个比方,如果你的Result里有一列数据叫做“test"吧,
    但我的数据库中可能A表中有这个字段,B表中也有,C表中也有
    那么怎么去确定是哪个表来的呢?不可能确定得了呀
      

  4.   

    你的ResultSet怎么来的噢,很奇怪的需求
      

  5.   

    别的对象传过来的,要想做一个通用地方法,你就不应该去考虑数据源的问题,而应该去求这个数据源是什么,数据源当然是有的,但是我想重用这个处理数据的方法,当然不能将它绑定到具体的数据源上了。我现在的传入参数只是一个ResultSet
      

  6.   

    to jo_yoko(jo_yoko) :但是在javadoc中有写的,一个getTablename方法,说的好像就是你这个想法吧,但是我试验没有成功,所以出来问呀
      

  7.   

    ResultSetMetaData  metaData = rs.getMetaData() 
    String tableName = metaData.getTableName(int column);
    column是指字段,因为你的sql语句可能是联合查询。
      

  8.   

    假如你已经得到结果集为:rs
    ResultSetMetaData rsmd = rs.getMetaData();
    String tableName = rsmd.getTableName(columnIndex);
      

  9.   

    呵呵,两位,这个方法好像是不行呀,写这个帖子之前我就知道这个方法了,这样吧,我把我的代码贴出来,你们看看,不过很可惜的是,我调用getTableName方法返回的是""。private static String getPrimaryKey(ResultSet rs) throws Exception{
    String primaryKeyName=null;
    try{
    ResultSet rsPrimarykey =null;
    DatabaseMetaData dm=rs.getStatement().getConnection().getMetaData();
    ResultSetMetaData rm=rs.getMetaData(); String tablename =rm.getColumnName(1);
    log.printLog(tablename);//打印方法
    rsPrimarykey =dm.getPrimaryKeys(null,null,tablename);
    if (rsPrimarykey.next()){
    primaryKeyName=rsPrimarykey.getString("KEY_SEQ"); }
    rsPrimarykey.close();
    }catch (Exception se){
    throw new DBException(se.getMessage());
    }
    return primaryKeyName;
    }
      

  10.   

    private static String getPrimaryKey(ResultSet rs) throws Exception{
    String primaryKeyName=null;
    try{
    ResultSet rsPrimarykey =null;
    DatabaseMetaData dm=rs.getStatement().getConnection().getMetaData();
    ResultSetMetaData rm=rs.getMetaData(); String tablename =rm.getTableName(1);
    log.printLog(tablename);//打印方法
    rsPrimarykey =dm.getPrimaryKeys(null,null,tablename);
    if (rsPrimarykey.next()){
    primaryKeyName=rsPrimarykey.getString("PK_NAME"); }
    rsPrimarykey.close();
    }catch (Exception se){
    throw new DBException(se.getMessage());
    }
    return primaryKeyName;
    }呵呵,刚才把测试代码贴上了,错了,这个应该是没有什么问题吧
      

  11.   

    既然ResultSet能作为参数传,为什么不把表的名称也作为一个参数,一起传过来呢?
      

  12.   

    我收回开始的看法,因为我以前还没有用过这些,所以我以为不能
    你的那个方法我试了一下,的确可以得出表名
    大概原理是这样的:
    ResultSetMetaData rm=rs.getMetaData();
    String tablename =rm.getTableName(1);
    那个getTableName()方法带的整型参数是选择字段的,如果你写1,那就是求出第一个字段是从哪个表中来的,如果你的第一个字段不是从哪个表中得来的,而是select的时候生成的,那么表名会为空
    所以你说用你的那种办法得出的表名为"",我估计就是因为那个记录集的第一个字段不是属于任何一个表的
    你可以把那个参数改为别的,例如2,3,最好是做个循环,这样就可以知道所有的字段是从哪里来的了给你举个例子:
    假如你的记录集是这么一句话来的:
    select A.a,B.b,C.c from A,B,C
    那么
    String tablename =rm.getTableName(1);  //这个时候表名为A
    String tablename =rm.getTableName(2);  //这个时候表名为B
    String tablename =rm.getTableName(3);  //这个时候表名为C但如果是:select null as ID,A.a,B.b,C.c from A,B,C
    那么
    String tablename =rm.getTableName(1);  //这个时候表名为""
    后面依此类推
      

  13.   

    to jo_yoko(jo_yoko) :
    很抱歉今天这么晚才看到你的回复,你说的我也知道,但是你知道我测试用ResultSet的SQL语句是怎么写的吗?select ID from test
    我想着不会是你说的那种情况,而且,我有想是不是因为我的语句写的不完整呢?我写成了select test.ID from test,可还是不行,于是我就想会不会是JDBC的原因呢?