对于一个给定ResultSet,如何能求得它提取数据的表的名称?? 你是说想知道这个记录集的数据源吗?也就是想知道这些数据是从哪个表select出来的,对不对? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可是如果只给一个Result,没别的信息,想要得到数据表名几乎是不可能的呀比如说,如果我的result是从两个表做连接select出来的呢,或者是从更多的表中select出来的,光是只有一个result是不可能会知道这些的 对呀,我就是这个意思,不管Result是从几个表中取得的数据,我现在就是已经有了一个Result,向知道某一列的数据是从什么表中来的,难道没有办法吗?? 我想这个问题应该不可能有办法解决再打个比方,如果你的Result里有一列数据叫做“test"吧,但我的数据库中可能A表中有这个字段,B表中也有,C表中也有那么怎么去确定是哪个表来的呢?不可能确定得了呀 你的ResultSet怎么来的噢,很奇怪的需求 别的对象传过来的,要想做一个通用地方法,你就不应该去考虑数据源的问题,而应该去求这个数据源是什么,数据源当然是有的,但是我想重用这个处理数据的方法,当然不能将它绑定到具体的数据源上了。我现在的传入参数只是一个ResultSet to jo_yoko(jo_yoko) :但是在javadoc中有写的,一个getTablename方法,说的好像就是你这个想法吧,但是我试验没有成功,所以出来问呀 ResultSetMetaData metaData = rs.getMetaData() String tableName = metaData.getTableName(int column);column是指字段,因为你的sql语句可能是联合查询。 假如你已经得到结果集为:rsResultSetMetaData rsmd = rs.getMetaData();String tableName = rsmd.getTableName(columnIndex); 呵呵,两位,这个方法好像是不行呀,写这个帖子之前我就知道这个方法了,这样吧,我把我的代码贴出来,你们看看,不过很可惜的是,我调用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; } 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; }呵呵,刚才把测试代码贴上了,错了,这个应该是没有什么问题吧 既然ResultSet能作为参数传,为什么不把表的名称也作为一个参数,一起传过来呢? 我收回开始的看法,因为我以前还没有用过这些,所以我以为不能你的那个方法我试了一下,的确可以得出表名大概原理是这样的: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); //这个时候表名为AString tablename =rm.getTableName(2); //这个时候表名为BString tablename =rm.getTableName(3); //这个时候表名为C但如果是:select null as ID,A.a,B.b,C.c from A,B,C那么String tablename =rm.getTableName(1); //这个时候表名为""后面依此类推 to jo_yoko(jo_yoko) :很抱歉今天这么晚才看到你的回复,你说的我也知道,但是你知道我测试用ResultSet的SQL语句是怎么写的吗?select ID from test我想着不会是你说的那种情况,而且,我有想是不是因为我的语句写的不完整呢?我写成了select test.ID from test,可还是不行,于是我就想会不会是JDBC的原因呢? 如何在JTree中将"我的电脑"设置成根目录 一个java的应用程序,在windows下打开正常,但是在linux下打开,却没有title 一个高中生编写和讲解的贪吃蛇游戏视频教程 菜鸟求救!!高手快来! 关于使用drawImage贴PNG图片的问题 面向对象设计UML实践(第二版PDF中文版) Java中Socket以及TCP包分析的问题。 如何快速学习JAVA? 怎样用java来读BMP文件? 有大佬能详细讲解下这个java代码吗 一个关于stringbuffer的问题 几个简单问题,但是我不会,请指点......
比如说,如果我的result是从两个表做连接select出来的呢,或者是从更多的表中select出来的,光是只有一个result是不可能会知道这些的
再打个比方,如果你的Result里有一列数据叫做“test"吧,
但我的数据库中可能A表中有这个字段,B表中也有,C表中也有
那么怎么去确定是哪个表来的呢?不可能确定得了呀
String tableName = metaData.getTableName(int column);
column是指字段,因为你的sql语句可能是联合查询。
ResultSetMetaData rsmd = rs.getMetaData();
String tableName = rsmd.getTableName(columnIndex);
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;
}
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;
}呵呵,刚才把测试代码贴上了,错了,这个应该是没有什么问题吧
你的那个方法我试了一下,的确可以得出表名
大概原理是这样的:
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); //这个时候表名为""
后面依此类推
很抱歉今天这么晚才看到你的回复,你说的我也知道,但是你知道我测试用ResultSet的SQL语句是怎么写的吗?select ID from test
我想着不会是你说的那种情况,而且,我有想是不是因为我的语句写的不完整呢?我写成了select test.ID from test,可还是不行,于是我就想会不会是JDBC的原因呢?