需要一种更有效的方式将JDBC结果集转换为JSON数组

时间:2019-06-26 20:17:37

标签: java oracle backend resultset

当前,我有以下代码将结果集转换为JSONObject,然后附加到JSONArry,但是对于大型数据集,处理时间太长。我正在寻找一种替代方法或库来改善当前的计算时间。

当前处理Oracle数据库中的14k记录需要16到17秒

            int total_rows = rs.getMetaData().getColumnCount();

            while (rs.next()) {
                JSONObject obj = new JSONObject();
                for (int i = 0; i < total_rows; i++) {

                    obj.put(rs.getMetaData().getColumnLabel(i + 1)
                            .toLowerCase(), rs.getObject(i + 1));

                }
                jsonArray.put(obj);

            }

2 个答案:

答案 0 :(得分:2)

如果使用的是Oracle 12cR2,则可以利用Oracle提供的功能(JSON_OBJECT,JSON_ARRAY,JSON_OBJECTAGG等)直接从数据库生成JSON,以供读取。它将大大更快,更容易编码。

您尚未发布有关数据模型的其他详细信息,因此我们可以帮助您解决更具体的问题,但是请随时浏览以下文档。

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/adjsn/generation.html

我在下面创建了一个简单的示例,以展示其工作原理:

FSITJA@db01 2019-06-26 14:15:02> select json_object('name'         value username,
  2                     'default_ts'   value default_tablespace,
  3                     'temp_ts'      value temporary_tablespace,
  4                     'common'       value case when common = 'Y' then 'YES' else 'NO' end,
  5                     'oracle_maint' value case when oracle_maintained = 'Y' then 'YES' else 'NO' end
  6                     format json) as json_obj
  7    from dba_users u
  8   where oracle_maintained = 'Y'
  9         and rownum <= 5;

JSON_OBJ
-----------------------------------------------------------------------------------------------------------
{"name":"SYS","default_ts":"SYSTEM","temp_ts":"TEMP","common":"NO","oracle_maint":"YES"}
{"name":"SYSTEM","default_ts":"SYSTEM","temp_ts":"TEMP","common":"NO","oracle_maint":"YES"}
{"name":"GSMCATUSER","default_ts":"SYSTEM","temp_ts":"TEMP","common":"NO","oracle_maint":"YES"}
{"name":"XS$NULL","default_ts":"SYSTEM","temp_ts":"TEMP","common":"NO","oracle_maint":"YES"}
{"name":"MDDATA","default_ts":"SYSTEM","temp_ts":"TEMP","common":"NO","oracle_maint":"YES"}

答案 1 :(得分:1)

我将进行以下测试:F:=从数据库中获取所需的时间; J:=从预取序列化JSON所需的时间。我怀疑您的F >> J,这表明您需要的不是其他JSON库,而是从数据库中读取速度更快。这可以溶解或不溶解。但是,如果F << J,请考虑并行化序列化以利用额外的内核(如果有)。