Java: запрос ResultSet в JSON - PullRequest
       10

Java: запрос ResultSet в JSON

0 голосов
/ 12 июня 2018

Запрос к базе данных Oracle отправляется через следующий код и должен возвращать результат запроса как JSON:

    Connection conn ;
    try {

        Class.forName("oracle.jdbc.driver.OracleDriver"); 
        String url = "jdbc:oracle:thin:@localhost:1521:dbname";     
        conn = DriverManager.getConnection(url,"username","pwd");  

        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM table4 where ID = '5'");


        while (rs.next()) {
            String s = rs.getString("*");
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(s);

        }

        conn.close();


    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

Однако значение String s всегда равно нулю.

Я принимал решение здесь , но оно не работает для выбора * из таблицы.

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Чтобы вывести JSON, вы сначала хотите накапливать свои данные в List<Map<String, Object>>.

Используйте ResultSetMetaData, чтобы получить количество столбцов и имя столбца.

List<Map<String, Object>> rows = new ArrayList<>();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();

while (rs.next()) {
      // Represent a row in DB. Key: Column name, Value: Column value
      Map<String, Object> row = new HashMap<>();
      for (int i = 1; i <= columnCount; i++) {
           // Note that the index is 1-based
           String colName = rsmd.getColumnName(i);
           Object colVal = rs.getObject(i);
           row.put(colName, colVal);
      }
      rows.add(row);
}

// Write the list of rows to output
// Recommend to use jackson-ObjectMapper to streaming json directly to outputstream:
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writeValue(response.getOutputStream(), rows);

Чтобы использовать Jackson ObjectMapper, добавьте зависимость в свой проект:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.4</version>
</dependency>
0 голосов
/ 12 июня 2018

Проблема здесь не в преобразовании в JSON (которое уже решено в этом вопросе , на который вы ссылаетесь в своем посте), а в том, как вы вызываете ResultSet.Просматривая документацию , мы видим, что метод getString может принимать либо индекс столбца , либо метку столбца , но ничего не упоминает о поисках с подстановочными знаками, таких как*.Если вы ничего не знаете о столбцах в базе данных, вы можете использовать метод getMetadata () для получения информации о столбцах (включая имена столбцов).

...