我想在Oracle数据库上运行一个查询,对于结果集中的每一列,我想知道该列来自哪个模式。我尝试了以下方法:
ResultSetMetaData rsMetadata = rs.getMetaData();
String schemaName = rsMetadata.getSchemaName(1)
但是,这将返回空字符串。是否有办法获取架构名称?
编辑以响应OMG小马:
我们正在开发的工具从数据库中获取数据,并对数据进行分析,以找到给定问题的信息量最大的子集。然后我们创建一个查询,该查询只返回针对给定问题提供信息的行。例如,如果我们有一个客户数据库,想知道哪些客户最有可能停止他们的服务,我们的工具可以创建一个查询,返回5%的客户记录,然后可以通过高性能的分析算法运行。这样做的好处是,我们只对数据的一个子集进行分析,这当然会节省时间。事实证明,高性能的分析算法现在工作得更好,因为第一步基本上是从我们的数据中过滤噪声。
因此,为了响应omg-ponies,用户指定数据库连接信息和查询作为工具的输入。因为他们可以指定任何他们喜欢的查询,所以用户可以连接到schema foo,然后运行以下查询:
SELECT* FROM bar.customer;
如果由于某种原因,眼睛颜色和性别是人们停止服务的预测因素,那么我们的系统生成的查询可能如下所示:
SELECT * FROM bar.customer WHERE bar.customer.eye_color='blue'
AND bar.customer.gender='M'
最好知道结果集中每个列的模式,这样我们就可以确保查询正确运行。我们可以假设该模式与数据库连接中使用的模式相同,并且在99%的情况下应该是正确的。我只是担心有1%的时间用户可能会做一些意想不到的事情,比如对另一个模式运行查询。
最佳答案
根据一位老先知的说法:
oracleresultsetmetadata接口没有实现getschemaname()和gettablename()方法,因为底层协议不允许这样做。
这意味着ResultSetMetaData
对于Oracle也不会有这些方法,至少在使用Oracle驱动程序时是这样。(我试着让内控司机看看这是否有什么不同,但显然没有)。
有一个weblogic 8code sample表明它是可以做到的,但是在以后的版本中,type 4驱动程序已经被弃用。因此,您可能仍然能够找到支持针对Oracle的getSchemaName()
的第三方驱动程序,但这似乎不太可能。