【问题标题】:Selecting over 500 columns in JDBC?在 JDBC 中选择超过 500 列?
【发布时间】:2017-08-16 07:36:31
【问题描述】:

我想使用 DatabaseMetaData 检索 SQLite .db 文件中特定表中所有列的名称,但是当表的列数超过 500 时,我得到 SQLException

java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (too many terms in compound SELECT)

我的代码如下所示:

metaData = connection.getMetaData();
for(String name : tableNames){
    ResultSet rs = metaData.getColumns(null, null, name, null);
/*Some code here*/
}

这适用于少于 500 列的表。
我的问题是:还有其他方法可以获取某个表中的所有列名吗?
有没有办法从超过 500 列的表(作为 ResultSet)中获取所有列?

【问题讨论】:

  • 请发布整个堆栈跟踪。请注意,这不是严格意义上的 JDBC 或 Java 问题,但您似乎已经达到了 sqlite 驱动程序的实现限制。您可能需要考虑为该驱动程序提交错误。
  • 一个表超过 500 列?天啊。我会将此例外视为重新考虑您的数据库设计的邀请。
  • 感谢Mark指点,这可能确实是驱动的问题。并且数据库有一些巨大的表,但不幸的是我对此无能为力 - 我必须以某种方式处理它们
  • 顺便说一句,你的标题是行
  • 为什么对大量的列无能为力?是因为你不被允许,还是因为你不知道怎么做?

标签: java sql sqlite jdbc


【解决方案1】:

正如其他人所说,在 db 表中有 500 多个列是一个糟糕的设计决定。绑上我的牛仔靴(耶哈!)你可能会这样做

String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

for (char ch : alphabet.toCharArray()) {
   String columnPattern = ch + "%";
   ResultSet rs = metaData.getColumns(null, null, name, columnPattern);
   ...
}

显然,对于列数 500 的表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    相关资源
    最近更新 更多