java - 具有 Progress MongoDB JDBC 驱动程序的 ROW_NUMBER 函数

标签 java mongodb jdbc progress

当我使用 Progress DataDirect MongoDB JDBC 驱动程序在 Java 程序中运行以下查询并在数据库中有一个大表(4000 万条记录)时遇到内存问题:

String query = "SELECT * FROM (SELECT tablename.*, ROW_NUMBER() OVER() AS rowid FROM tablename)";

如果数据库中有一个小表,上面的查询工作得很好。

如果我只是运行“SELECT ROW_NUMBER() OVER() AS rowid FROM tablename”,那么该列的名称将变为空。语句中的AS好像没有作用:

Column Name: null class java.lang.Integer

Exception in thread "main" java.lang.NullPointerException

如果我只运行“SELECT * FROM tablename”,取回 ResultSet 对象的速度非常快,我可以在不到几分钟的时间内轻松读取 4000 万条记录。

那我错过了什么?我不知道如何正确使用 ROW_NUMBER 函数。任何想法?谢谢。

最佳答案

在您的查询中,row_number() 没有列名,它只有一个标签(as 子句)。

幸运的是,JDBC 规范(第 15.2.3 节)要求您按标签而不是按名称检索列。 JDBC 中的列标签可以是 as 子句的值(如果已指定),或者是原始列名称。

您可以使用ResultSetMetaData.getColumnLabel()获取列标签。

关于java - 具有 Progress MongoDB JDBC 驱动程序的 ROW_NUMBER 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40556485/

相关文章:

java - 如何在java中学习 "separation of concern"

java - 如何让 "Goodbye Window"出现在 Java 中?

java - 带有 jdbc 的 Spring Security 3.0

java - SQL Server 2005 在 Linux 环境中的汉字问题

java - 将 String 属性连接到另一个 bean 的方法的最像 Spring 的方法是什么?

java - 使用 jar 在 Windows 调度程序中运行批处理脚本

MongoDB:数据分区上的磁盘I/O利用率已消失

javascript - Mongoose - 版本错误 : No matching document found for id

node.js - 如何使用 mongodb 存储/显示段落?

java - JDBC架构子系统