java - 在数据库中查找特定表时,为什么“显示表”比 DatabaseMetaData.getTables() 更好?

标签 java mysql jdbc

目前,我的 Java 程序中有一个方法,使用 JDBC 检查 MySQL 数据库中是否存在特定表。我遇到了一个逻辑错误,DatabaseMetaData.getTables() 方法从不同的数据库返回同名的表,现在我已经通过在语句中指定目录来解决这个问题,如下所示(表代表表名 I'我正在寻找)。

    ResultSet tables = connectionToDatabase().getMetaData().getTables("snakeandladder", null, table, null);

但是,经过一些研究后,我看到很多人建议使用 Show Tables 来代替,但实际上并没有解释为什么要使用上面的 Show Tables。
有人可以向我解释使用上述语句的局限性以及为什么显示表格是更好的选择吗? 谢谢!

最佳答案

DatabaseMetaData.getTables() 更加可移植,大多数数据库(不仅是 MySQL)应该能够通过定义的 API 提供信息。

另一方面,使用 MySQL 特定查询“显示表;”可能弊大于利:

  • 您引入了一个可以被攻击者利用的查询字符串,而且代码现在包含一个静态编译的查询字符串。

  • 如果数据库提供程序发生变化,则必须更新代码(再次可移植性)

关于java - 在数据库中查找特定表时,为什么“显示表”比 DatabaseMetaData.getTables() 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61727058/

相关文章:

java - 删除使用复杂布局的容器

java - 服务器上用于序列化的 Hazelcast 类定义

php - 编辑具有特定 ID 的数据

python - sqlalchemy 无法识别我的 mysql 数据库

php - 需要有关 mysql/php 输出数据的帮助

java - 如何使用 SQL 查询转义用户提供的参数?

java - 如何在android中将单个字符串转换为JsonArray?

jdbc - 应用程序脚本 : remote database password security

java - JDBC重新读取ResultSet中的数据

java - 获取 23 :00 of the previous day when converting LocalDate to Timestamp