JDBC:获取SQL查询涉及的表名

2023-12-26

有没有办法知道通过 JDBC 执行的 SQL 查询所涉及的表的名称?

例如:

SELECT r.roleId FROM User u, UserRole r where r.userId = u.userId and u.name = "Jonh Smith"

我不仅想要此查询的结果集,还想要实际的表名称(“用户”和“角色”)。我不关心视图名称,但如果无法获取视图中使用的基础表,那不是一个大问题,但这必须与嵌套查询一起使用。

至于我为什么需要这些信息,是因为我正在制作一个平台,让其他开发人员可以在其上构建应用程序。在我的平台中,我让其他开发人员注册他们自己的查询,并将它们存储在数据库中。我不希望开发人员必须费心实际手动注册表名以及查询本身。因此,当我执行查询时,我并不真正知道该查询在做什么。


我还没有找到如何准确地完成您需要的操作,但无论如何我都会发布此内容,因为评论太长了。我发现的最接近的是结果集元数据 http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSetMetaData.html.

这是有关如何获取它的教程。 http://www.roseindia.net/jdbc/jdbc-meta-data-get-tables.shtml但该教程没有展示如何获取表名称。执行此操作的方法称为getTableName.

/**
 * Gets the designated column's table name. 
 *
 * @param column the first column is 1, the second is 2, ...
 * @return table name or "" if not applicable
 * @exception SQLException if a database access error occurs
 */
String getTableName(int column) throws SQLException;

我认为您必须遍历所有列并将表名称放入Set。结果应该是使用的所有表,但是...问题是,如果该列未在选择中公开,那么您将无法发现该表。我一直无法找到解决这个问题的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC:获取SQL查询涉及的表名 的相关文章

  • onclick 监听器(this)是什么意思?

    btn Login setOnClickListener this 在安卓工作室 我在无数地方见过这种情况 这是什么意思 我知道该怎样this运行 但是监听者叫什么 这个例子来自 Link https stackoverflow com q
  • JSONObject 文本必须以“{”开头错误

    我有来自我们的 REST 服务之一的 JSON category name Industry Components categoryId 1 category name Business Components categoryId 2 ca
  • Java Stream 相当于 ReactiveX Observable#scan

    ReactiveX 有一个非常简洁的运算符 称为Scan http reactivex io documentation operators scan html 这类似于reduce 只不过它发出每个中间累加器 我如何使用 Java Str
  • Signal R Native Android 应用程序协商失败

    我正在尝试创建一个可以连接到我的基本 SignalR Hub 的 Android 应用程序 它只是一个基本的集线器文件 我想用它来测试一些东西 但到目前为止我还没有运气 有人可以看看我做错的事情吗 每次我尝试运行它时 我都会收到以下堆栈竞赛
  • JSON GSON.fromJson Java 对象

    我正在尝试将 Json 加载到我的班级中 public User this fbId 0 this email this name this thumb this gender this location this relationship
  • 如何将 YYYY-MM-DDTHH:mm:ss.SSSZ 格式的时间转换为默认时区? [复制]

    这个问题在这里已经有答案了 我得到的时间格式为 2011 07 31T08 16 37 733Z 实际上Z应该是时区 然后将该时间转换为本地时区 我现在如何实际将此时间转换为默认时区 RFC 3339 描述了一个特定的ISO 8601 ht
  • 为什么 SequenceFile 被截断?

    我在学习Hadoop这个问题困扰了我一段时间 基本上我正在写一个SequenceFile到磁盘然后读回 然而 每次我收到EOFException阅读时 深入观察发现 在写入序列文件时 它被过早截断 并且总是发生在写入索引962之后 并且文件
  • 始终保持 TreeSet 中可变对象的排序

    我注意到 如果稍后更改对象属性值 TreeSet 不会按排序顺序保留可变对象 例如 public class Wrap static TreeSet
  • 如何在没有JDK的情况下运行jcmd?

    我正在尝试弄清楚如何将 jcmd exe 删除到安装在客户端站点的 Windows 服务器上 以便我们可以解决堆和线程问题 不太想安装完整的 JDK 因为它会使环境变得复杂 jcmd exe 肯定需要运行 JDK 中的某些组件 但我无法确定
  • Java 的类加载器与 jars-with-jars

    我们有一个可执行的 JAR 文件有时包含其他 JAR 文件 整个事情依赖于另外四个下载的 JAR 骑在太空中一只巨大的部署乌龟的背上 在运行时 我们动态加载嵌套的 JAR 文件 执行以下操作 wearyingly verbose error
  • 删除连接中不存在的记录

    想象两个表 A 和 B A B 1 2 2 3 6 5 4 7 9 11 13 23 9 现在我想从 A 中删除 B 中不存在的记录 例如从 A 中删除 1 6 和 4 我最初的想法是您可以 否定 联接的结果 DELETE FROM A W
  • 打破java中的递归

    递归有点像 分而治之 的风格 它在变得更小的同时分裂 树数据结构 我希望它在发现违规时完全中断 这意味着打破所有递归路径 并返回 true 这可能吗 无论你做什么 你都必须释放堆栈 这留下了两个选择 魔法返回值 正如汤姆之一所描述的 抛出异
  • SQL 按 IN 子句中的元素排序

    我有一个ITEM表 我想返回按 IN 子句中通知的相同顺序排序的结果 这些 ID 由用户告知 今天我有这个 SELECT FROM ITEM WHERE ITEM ID IN 45 2 671 6 ORDER BY CASE ITEM ID
  • 在屏幕上随机生成一个圆圈并将其设为绿色或红色

    所以我一直在尝试制作一个游戏应用程序 它可以在 Android 屏幕上随机显示带有文本的红色按钮或带有文本的绿色按钮 如果有人可以帮助我 我将不胜感激 另外 如果有人知道如何做到这一点 我想慢慢地产生更快的酷优势 谢谢 SuppressLi
  • Spring 表单处理,将实体映射到表单输入

    只是查看 petclinic 示例应用程序 并尝试学习表单处理 看起来形式与实体是 1 1 映射的 正确吗 是否还有任何其他配置需要完成 或者 Spring 只知道所有表单输入都映射到实体 因为这是在 GET 请求中添加到模型中的内容 Co
  • 从Asynctask返回结果

    如果我的 Android 应用程序中有这个后台工作文件 并且它从我的数据库获取数据 我如何将字符串 结果 传递给另一个类 后台工作人员连接到我的服务器 然后使用 php 连接到数据库 public class BackgroundWorke
  • 光学标记阅读器的开源库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想要一个用于光学标记读取 OMR 的开源库 有这样的库吗 我想在我的 java 应用程序中使用这个库 zxing 可能对你有用 http
  • 检索和设置 IntelliJ IDEA 插件开发的拆分窗口设置

    我正在编写一个 IntelliJ IDEA 插件 用于保存打开选项卡的会话 称为选项卡会话 https github com alp82 idea tabsession 这个问题是后续问题IntelliJ IDEA 插件开发 保存选项卡组
  • Java 多头中的斐波那契计算显示负值

    我的斐波那契计算器工作正常 但当数字增加时 结果会出现负值 就像它是一个Integer超过其最大值 它正在使用缓存java util Map
  • 如何获取日期时间字段的 UTC?

    我正在使用 MySQL 5 并且正在尝试将日期时间字段转换为 UTC TIMESTAMP 这是我所拥有的 但它不起作用 并且不确定我是否可以做到这一点 但有人可以告诉我我做错了什么吗 谢谢 我已经尝试过这个 SELECT UTC TIMES

随机推荐