gpt4 book ai didi

java - 如何在不将所有表元数据拉入内存的情况下使用 jOOQ 获取特定表的列?

转载 作者:行者123 更新时间:2023-12-04 10:57:39 25 4
gpt4 key购买 nike

我需要查询实时 MySQL 数据库以检查特定表在特定模式中具有哪些列。以下代码片段是我现在所拥有的:

List<Table<?>> tables = dslContext.meta().getTables();
Set<String> existingFields = null;
for (Table table: tables)
{
if (table.getSchema().getName().equals(schema) && table.getName().equals(tableToCheck.getName()))
{
existingFields = Arrays.stream(table.fields()).map(Field::getName).collect(Collectors.toSet());
break;
}
}

这是可行的,但在针对所有架构中具有约 50,000 个表的数据库实例运行时,它使用了大约 1 GB 的堆空间。将参数传递给 getTables()不会减少最大内存占用,它只会减少返回的元素数量。将参数传递给 meta()在该级别进行过滤不适用于我的用例,因为该方法的这些版本无法获取实时元信息 according to the documentation .使用 jOOQ 有没有更有效的方法来做到这一点?

最佳答案

在撰写本文时,我还没有找到使用 jOOQ 执行此操作的方法,但以下代码片段演示了如何使用 java.sql.DatabaseMetaData 获取特定模式中特定表的列名:

Set<String> existingFields = new HashSet<>();
ResultSet columns = connection.getMetaData().getColumns(null, schema, tableToCheck.getName(), null);
while(columns.next())
{
existingFields.add(columns.getString("COLUMN_NAME"));
}

此方法在查询问题中提到的数据库实例时仅使用几兆字节的堆空间。

关于java - 如何在不将所有表元数据拉入内存的情况下使用 jOOQ 获取特定表的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59080198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com