如何设置Connection的ResultSetMetaDataOptions属性?

ammaxt 2009-01-15 01:14:35
目前的情况是,在tomcat中建立了一个连接Oracle的JNDI,URL为jdbc:oracle:thin:@jiangn:1521:jiangn,DRIVER为oracle.jdbc.driver.OracleDriver,运行以后可以连接,也能正常执行SQL语句。现在遇到的问题是,需要使用ResultSet.getTableName()方法,获取字段的所属表名,一直返回为空,在网上查了很久,说是要把数据库连接的ResultSetMetaDataOptions属性从默认的0改为1,才能正常使用ResultSet.getTableName()方法。试了很久,都不知道该属性在什么地方设置,请各位大侠帮忙
...全文
587 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
user_login 2012-06-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

http://www.coderanch.com/t/455105/JDBC/java/ResultSetMetaData-getTableName-return-empty-String

这哥们的文档可能有点儿用, 火大啊~
[/Quote]

设置了ResultSetMetaDataOptions之后,能获取到表名称了吗?我的设置了还是不行。。。。。。
在几个主流数据库上测试,就Oracle问题多。。。。。。。。
Alexniver 2012-05-29
  • 打赏
  • 举报
回复
http://www.coderanch.com/t/455105/JDBC/java/ResultSetMetaData-getTableName-return-empty-String

这哥们的文档可能有点儿用, 火大啊~
Alexniver 2012-05-29
  • 打赏
  • 举报
回复
我这也是, 查文档文档也不说在哪改, 网上找也找不到, 妹的官方文档也不写个例子, 真次啊!! 网上一帮人回答这类问题直接把官方文档拿上来. 毛用没有啊~~~~~~~~~火大, 屁大个事儿就卡这儿了
ammaxt 2009-01-15
  • 打赏
  • 举报
回复
请问一下,你那边使用getTableName()方法可以正常获取字段所属表名吗?
ammaxt 2009-01-15
  • 打赏
  • 举报
回复
仍然获取的是空
Jacky_Zhu_1983 2009-01-15
  • 打赏
  • 举报
回复
那你试下 select 一个字段 from tablename呢
ammaxt 2009-01-15
  • 打赏
  • 举报
回复
自己给自己顶一下吧
ammaxt 2009-01-15
  • 打赏
  • 举报
回复
返回空时没有抛出异常。
看了网上的其他帖子的介绍,说是需要设置ResultSetMetaDataOptions,就搞不明白在哪儿设置
ammaxt 2009-01-15
  • 打赏
  • 举报
回复
不是这样的哈,我执行的是select * from tablename;这样的SQL语句,不存在哪个字段不属于哪个表的情况。而且我使用循环,把该ResultSet中的所有字段都运行了getTableName()方法,获取的都是空
Jacky_Zhu_1983 2009-01-15
  • 打赏
  • 举报
回复
http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/sql/ResultSetMetaData.html


getTableName
String getTableName(int column)
throws SQLException获取指定列的名称。

参数:
column - 第一列是 1,第二个列是 2,……
返回:
表名称;如果没有可应用的名称,则返回 ""
抛出:
SQLException - 如果发生数据库访问错误


不知道你的是不是这个问题
Jacky_Zhu_1983 2009-01-15
  • 打赏
  • 举报
回复
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); //这个时候表名为""

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧