Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定ResultSet中的列是否包含所有行中的值_Java_Jdbc - Fatal编程技术网

Java 确定ResultSet中的列是否包含所有行中的值

Java 确定ResultSet中的列是否包含所有行中的值,java,jdbc,Java,Jdbc,在我的应用程序中,我执行一个代价高昂的查询,生成报告需要几分钟的时间。我正在尝试创建一个泛型类,将ResultSet转换为Excel电子表格,如果某列只包含空值,则该列将从电子表格中排除。事后我可以很容易地从Excel工作表中删除这些列,但是当有太多的列时,在我已经拆分工作表之后,很难将它们“粘合”在一起 我可以做一个查询来检查每一列是否为空,但这将需要重新运行代价高昂的查询,可能需要多次,这将使电子表格的生成花费太长时间 有没有一种方法可以查询我已经拥有的ResultSet对象(有点像Cold

在我的应用程序中,我执行一个代价高昂的查询,生成报告需要几分钟的时间。我正在尝试创建一个泛型类,将ResultSet转换为Excel电子表格,如果某列只包含空值,则该列将从电子表格中排除。事后我可以很容易地从Excel工作表中删除这些列,但是当有太多的列时,在我已经拆分工作表之后,很难将它们“粘合”在一起

我可以做一个查询来检查每一列是否为空,但这将需要重新运行代价高昂的查询,可能需要多次,这将使电子表格的生成花费太长时间

有没有一种方法可以查询我已经拥有的ResultSet对象(有点像ColdFusion)并从中删除列

编辑
最后,我添加了一个预处理步骤,在该步骤中,我将所用列的列号添加到列表中,然后迭代该集合,而不是结果集中的所有列的集合。在创建工作表之前,是否可以先从结果集中提取数据并将其存储在内存中,还是太大?如果是这样,那么当您提取它时,您可以记住是否在每个列中都看到了非null值。一旦完成提取,就可以准确地知道哪些列可以省略。当然,如果数据量太大,以至于您不想将其存储在内存中,那么这种方法就不能很好地工作

另一种解决方案是将代价高昂的查询结果存储在数据库的“results”表中。给定查询执行的每一行都会标记一个从数据库序列中获取的“查询id”。一旦数据加载到此表中,检查“X列中的所有值是否为null”的后续查询应该非常快速

注意:如果要采用第二种方法,请在将所有查询数据存储回结果表之前,不要将其向上拉到应用程序中。重写原始的“昂贵”查询以执行插入。“插入查询结果(列…)选择{昂贵查询}”

我可以做一个查询来检查每个 列为空

更好的是,您可以通过计数等方式将该检查合并到原始查询中。这将比编写具有相同效果的Java代码快几英里