Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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中生成json文件_Java_Spring_Oracle_Spring Boot_Plsql - Fatal编程技术网

在数据库中而不是在java中生成json文件

在数据库中而不是在java中生成json文件,java,spring,oracle,spring-boot,plsql,Java,Spring,Oracle,Spring Boot,Plsql,我正在使用resultset从数据库中读取一个表。稍后我将使用这些数据生成json文件 我想在数据库中生成json文件,并将该文件返回到java,因为我的java代码将使用POST-API。 代码是这样的 String query="select * from dynamicentitygtt"; PreparedStatement prepstatement=connection.prepareStatement(query); ResultSet

我正在使用
resultset
从数据库中读取一个
。稍后我将使用这些数据生成json文件

我想在数据库中生成
json
文件,并将该文件返回到
java
,因为我的java代码将使用
POST-API。

代码是这样的

    String query="select * from dynamicentitygtt";
    PreparedStatement prepstatement=connection.prepareStatement(query);
    ResultSet rs=prepstatement.executeQuery()
        while rs.next()
        {
          //Load data to POJO
            
        }
      //call method to generate json file.
      //Inject file data to API
我想要什么

String query="select * from dynamicentitygtt";
        PreparedStatement prepstatement=connection.prepareStatement(query);
        ResultSet rs=prepstatement.executeQuery()
        //here I want file from database.
我的数据库应该返回json文件。我可以在数据库中创建过程。我也可以使用callable。我还可以从表中创建json文件。 但我不知道如何从数据库返回文件


如果我的理解不正确,请原谅。

在java中,使用以下方法可以创建地图列表

其中Map的键为columnName,值为该列的值

public List<Map<String, String>> getList(ResultSet resultSet) throws SQLException {
        List<Map<String, String>> mapList = new ArrayList<>();
        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
        int columnNumber = resultSetMetaData.getColumnCount();
        while (resultSet.next()) {
            Map<String, String> map = new HashMap<>();
            int count = 1;
            while (count <= columnNumber) {
                String columnName = resultSetMetaData.getColumnName(count);
                map.put(columnName, resultSet.getString(columnName));
                count++;
            }
            mapList.add(map);
        }
        return mapList;
    }
public List getList(ResultSet ResultSet)抛出SQLException{
List mapList=new ArrayList();
ResultSetMetaData ResultSetMetaData=resultSet.getMetaData();
int columnNumber=resultSetMetaData.getColumnCount();
while(resultSet.next()){
Map Map=newhashmap();
整数计数=1;

虽然(count因为您已经注意到您使用的是Oracle 18c,所以您可以访问SQL函数。使用这些函数,您应该能够通过SQL查询创建所需的JSON结构,而不需要生成文件并将其传递回Java调用。需要注意的一点是,如果您正在生成大型JSON对象,您将我想修改查询中任何JSON函数调用中的RETURNING子句,否则JSON将无效

以下是有关如何使用这些函数的一些示例:

问题#1 结果#1(美化) 问题2 结果#2(美化)
您可以创建一个pl/sql过程来执行查询并返回包含所需json的clob(并从Java调用该过程)。根据您的Oracle版本和偏好,至少有两种方法可供选择。我个人使用,但如果您使用Oracle 18或更高版本,您可能可以使用本机JSON方法进行操作。“我不知道如何从数据库返回文件”完美-确定您需要帮助的真正问题。阅读
UTL_文件
包,或者更一般地说,使用您熟悉的任何方法阅读Oracle数据库中的文件操作。这与文件内容(JSON或其他任何内容)无关@mathguy非常感谢mathguy。我也在讨论同样的问题。你应该在这些问题中包括Oracle版本。数据库的更高版本具有增强的功能。我使用的是Oracle 18c。OP希望在db中生成json,而不是在Java中生成。因此,你建议使用ancode在Java中生成ist?
WITH
    emp (employee_id,
         first_name,
         last_name,
         department_number)
    AS
        (SELECT 1, 'John', 'Doe', 100 FROM DUAL
         UNION ALL
         SELECT 2, 'Jane', 'Smith', 100 FROM DUAL
         UNION ALL
         SELECT 3, 'Robert', 'Jones', 200 FROM DUAL
         UNION ALL
         SELECT 4, 'Alan', 'Carter', 300 FROM DUAL)
SELECT json_arrayagg (json_object (*))
  FROM emp;
[
  {
    "EMPLOYEE_ID": 1,
    "FIRST_NAME": "John",
    "LAST_NAME": "Doe",
    "DEPARTMENT_NUMBER": 100
  },
  {
    "EMPLOYEE_ID": 2,
    "FIRST_NAME": "Jane",
    "LAST_NAME": "Smith",
    "DEPARTMENT_NUMBER": 100
  },
  {
    "EMPLOYEE_ID": 3,
    "FIRST_NAME": "Robert",
    "LAST_NAME": "Jones",
    "DEPARTMENT_NUMBER": 200
  },
  {
    "EMPLOYEE_ID": 4,
    "FIRST_NAME": "Alan",
    "LAST_NAME": "Carter",
    "DEPARTMENT_NUMBER": 300
  }
]
WITH
    emp (employee_id,
         first_name,
         last_name,
         department_number)
    AS
        (SELECT 1, 'John', 'Doe', 100 FROM DUAL
         UNION ALL
         SELECT 2, 'Jane', 'Smith', 100 FROM DUAL
         UNION ALL
         SELECT 3, 'Robert', 'Jones', 200 FROM DUAL
         UNION ALL
         SELECT 4, 'Alan', 'Carter', 300 FROM DUAL)
  SELECT json_arrayagg (
             json_object (
                     'department_number' VALUE department_number,
                     'employees' VALUE
                         json_arrayagg (
                             json_object ('first_name' VALUE first_name, 'last_name' VALUE last_name))))
    FROM emp
GROUP BY department_number;
[
  {
    "department_number": 100,
    "employees": [
      { "first_name": "John", "last_name": "Doe" },
      { "first_name": "Jane", "last_name": "Smith" }
    ]
  },
  {
    "department_number": 200,
    "employees": [{ "first_name": "Robert", "last_name": "Jones" }]
  },
  {
    "department_number": 300,
    "employees": [{ "first_name": "Alan", "last_name": "Carter" }]
  }
]