2011-07-03 9 views
6

Tengo un ResultSet después de activar una consulta. Amablemente déjame saber cómo puedo convertirlo a una salida JSON en JSP.Cómo convertir un objeto ResultSet a una salida de formato JSON

En la segunda etapa, supongamos que tenemos una salida JSON como en este enlace>http://inknpost.com/eshopping/json.jsp

El archivo de arriba se accede por una .getJSON $(); en otro archivo.

Dejeme saber cómo puedo mostrar los "nombres" y los "departamentos" en diferentes filas en una página.

Respuesta

15

Cree una clase Javabean reutilizable que represente una fila, una sola entidad.

public class Category { 
    private Long id; 
    private String name; 
    private String department; 

    // Add/generate getters/setters/c'tors/equals/hashcode and other boilerplate. 
} 

crear una clase DAO reutilizable que mapea la ResultSet a una colección de esos Javabeans la forma habitual JDBC.

public class CategoryDAO { 
    private static final String SQL_LIST = "SELECT id, name, department FROM category"; 
    // ... 

    public List<Category> list() throws SQLException { 
     List<Category> categories = new ArrayList<Category>(); 

     try (
      Connection connection = database.getConnection(); 
      PreparedStatement statement = connection.prepareStatement(SQL_LIST); 
      ResultSet resultSet = statement.executeQuery(); 
     ) { 
      while (resultSet.next()) { 
       Category category = new Category(); 
       category.setId(resultSet.getLong("id")); 
       category.setName(resultSet.getString("name")); 
       category.setDepartment(resultSet.getString("department")); 
       categories.add(category); 
      } 
     } 

     return categories; 
    } 

    // ... 
} 

crear una clase servlet que utiliza un JSON serializador/deserializador que es capaz de convertir entre una colección arbirary de Javabeans y una cadena JSON, como Google Gson.

@WebServlet("/categories.json") 
public class CategoriesJsonServlet extends HttpServlet { 

    @Override 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     try { 
      List<Category> categories = categoryDAO.list(); 
      String categoriesJson = new Gson().toJson(categories); 
      response.setContentType("application/json"); 
      response.setCharacterEncoding("UTF-8"); 
      response.getWriter().write(categoriesJson); 
     } catch (SQLException e) { 
      throw new ServletException("DB error", e); 
     } 
    } 

} 

Invocarlo por http://localhost:8080/contextname/categories.json. No, no hay JSP involucrado. No debe usar JSP para formatos de salida que no sean HTML.

Finalmente, en jQuery, solo acceda a la forma habitual $.getJSON().

$('#somebutton').click(function() { 
    $.getJSON('categories.json', function(categoriesJson) { 
     var $table = $('<table>').appendTo($('#somediv')); 
     $.each(categoriesJson, function(index, category) { 
      $('<tr>').appendTo($table) 
       .append($('<td>').text(category.id)) 
       .append($('<td>').text(category.name)) 
       .append($('<td>').text(category.department)); 
     }); 
    }); 
}); 
+2

Muchas gracias código limpio y organizado – skystar7

+3

@BalusC gran solución, stackoverflow no sería lo mismo sin ti! :) –

3

para crear su JSON, puede utilizar la biblioteca google-gson.

Entonces, para procesar su JSON en jQuery, que depende de sus necesidades, pero suponiendo que desea mostrar en una tabla, que podría hacerlo de la siguiente manera:

HTML:

<table id="mytable"> 
    <tr> <th> Name </th> <th> Department </th> </tr> 
</table> 

Javascript:

$.getJSON("your_url", function(categories){ 
    for(var i=0; i<categories.length; i++){ 
     var name = categories[i].name; 
     var department = categories[i].department; 
     $("#mytable").append('<tr><td>'+ name +'</td><td>'+department+'</td></tr>'); 
    } 
}); 

Espero que esto ayude. Cheers