Maison > base de données > tutoriel mysql > Quel est le moyen le plus efficace de convertir un ResultSet en JSON en Java ?

Quel est le moyen le plus efficace de convertir un ResultSet en JSON en Java ?

Barbara Streisand
Libérer: 2025-01-04 08:40:34
original
998 Les gens l'ont consulté

What's the Most Efficient Way to Convert a ResultSet to JSON in Java?

Conversion la plus efficace de ResultSet en JSON ?

Le code suivant utilise des tableaux et des objets JSON pour convertir un ensemble de résultats en chaîne JSON :

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONException;

import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

public class ResultSetConverter {
  public static JSONArray convert( ResultSet rs )
    throws SQLException, JSONException
  {
    JSONArray json = new JSONArray();
    ResultSetMetaData rsmd = rs.getMetaData();

    while(rs.next()) {
      int numColumns = rsmd.getColumnCount();
      JSONObject obj = new JSONObject();

      for (int i=1; i<numColumns+1; i++) {
        String column_name = rsmd.getColumnName(i);

        // Determine the SQL data type of the column
        switch(rsmd.getColumnType(i)) {
          case java.sql.Types.ARRAY:
            obj.put(column_name, rs.getArray(column_name));
            break;
          case java.sql.Types.BIGINT:
            obj.put(column_name, rs.getInt(column_name));
            break;
          case java.sql.Types.BOOLEAN:
            obj.put(column_name, rs.getBoolean(column_name));
            break;
          case java.sql.Types.BLOB:
            obj.put(column_name, rs.getBlob(column_name));
            break;
          case java.sql.Types.DOUBLE:
            obj.put(column_name, rs.getDouble(column_name));
            break;
          case java.sql.Types.FLOAT:
            obj.put(column_name, rs.getFloat(column_name));
            break;
          case java.sql.Types.INTEGER:
            obj.put(column_name, rs.getInt(column_name));
            break;
          case java.sql.Types.NVARCHAR:
            obj.put(column_name, rs.getNString(column_name));
            break;
          case java.sql.Types.VARCHAR:
            obj.put(column_name, rs.getString(column_name));
            break;
          case java.sql.Types.TINYINT:
            obj.put(column_name, rs.getInt(column_name));
            break;
          case java.sql.Types.SMALLINT:
            obj.put(column_name, rs.getInt(column_name));
            break;
          case java.sql.Types.DATE:
            obj.put(column_name, rs.getDate(column_name));
            break;
          case java.sql.Types.TIMESTAMP:
            obj.put(column_name, rs.getTimestamp(column_name));
            break;
          default:
            obj.put(column_name, rs.getObject(column_name));
            break;
        }
      }

      json.put(obj);
    }

    return json;
  }
}
Copier après la connexion

Alternative Solution :

Une approche alternative, qui peut être plus simple et plus économe en mémoire, consiste à utiliser directement la méthode getObject() :

JSONArray json = new JSONArray();
ResultSetMetaData rsmd = rs.getMetaData();
while(rs.next()) {
  int numColumns = rsmd.getColumnCount();
  JSONObject obj = new JSONObject();
  for (int i=1; i<=numColumns; i++) {
    String column_name = rsmd.getColumnName(i);
    obj.put(column_name, rs.getObject(column_name));
  }
  json.put(obj);
}
return json;
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal