如何将SQL查询转换为JSON数组

时间:2014-07-15 22:45:52

标签: java sql arrays typeconverter jsonobject

我需要转换这样的查询结果:

SELECT * FROM table WHERE column1=X

到java中的JSONArray。 在我的表中,我有以下列

  1. id:int PRIMARY KEY AUTO_INCREMENT
  2. 字符串
  3. 字符串
  4. 字符串
  5. 字符串
  6. 字符串
  7. INT
  8. timeStamp CURRENT_TIMESTAMP
  9. 我需要保持相同的结构,除了我不需要的id字段。

    public static ArrayList<Ticket> lookForATicket(String fermataDiscesa) throws Exception {
        Connection dbConn = null;
        ArrayList<Ticket> list = null;
        try {
            try {
                dbConn = DBConnection.createConnection();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Statement stmt = dbConn.createStatement();
            String query = "SELECT * FROM offer WHERE fermataDiscesa = '" + fermataDiscesa
                    + "'";
            //test
            System.out.println(query);
            ResultSet rs = stmt.executeQuery(query);
            list = new ArrayList<Ticket>();
            Ticket tickets = null;
            while (rs.next()) {
                //per test
                System.out.println(rs.getString(1) + rs.getString(2) + rs.getString(3) + rs.getString(4) + rs.getString(5) + rs.getString(6) + rs.getInt(7));
                tickets = new Ticket();
                //setto i campi
                tickets.setIdGooglePlus(rs.getString("IDGOOGLEPLUS"));
                tickets.setIdFacebook(rs.getString("IDFACEBOOK"));
                tickets.setFermataSalita(rs.getString("FERMATASALITA"));
                tickets.setFermataDiscesa(rs.getString("FERMATADISCESA"));
                tickets.setBus(rs.getString("BUS"));
                tickets.setTempoRimasto(rs.getInt("TEMPORIMASTO"));
                tickets.setTimeStamp(rs.getTimestamp("TIMESTAMP"));
                //aggiungo alla lista
                list.add(tickets);
            }
        } catch (SQLException sqle) {
            throw sqle;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            if (dbConn != null) {
                dbConn.close();
            }
            throw e;
        } finally {
            if (dbConn != null) {
                dbConn.close();
            }
        }
        return list;
    }
    

    Ticket是我的自定义类。 这就是&#34;打印&#34;的代码。我的JSON对象:

        //Path: http://localhost:8080/RESTscambio/search
    @Path("/search")
    public class Search {
        // HTTP Get Method
        @GET 
        // Path: http://localhost:8080/RESTscambio/search/dosearch
        @Path("/dosearch")
        // Produces JSON as response
        @Produces(MediaType.APPLICATION_JSON) 
    
    public String doSearch(@QueryParam("fermataDiscesa") String fermataDiscesa) throws Exception{
        System.out.println("Cerco biglietti..");
        ArrayList<Ticket> list = null;
        String response = null;
    
        list = DBConnection.lookForATicket(fermataDiscesa);
        JSONArray jArray = new JSONArray(list);
    
        if(list != null){
            //System.out.println(jObj.put("list_of_ticket", list).toString());
            //jObj.put("list_of_ticket", list);
            response = Utility.constructJSON("Biglietti disponibili", true);
        }else{
            response = Utility.constructJSON("Nessun biglietto disponibile", false);
        }
    return response;        
    }
    

    我需要使用回复。我可以定义一个新的打印功能。有人能帮我吗? 谢谢

1 个答案:

答案 0 :(得分:1)

假设您已经能够检索查询结果,那么您将不得不编写一些代码而不是太多代码。我发现Json-lib易于使用 - 创建和填充JSON对象或转换为Java对象(自定义或集合和映射)非常简单。

链接网站上有很多例子可以指导您。

根据你的更新问题(你最初没有说你有豆)我建议使用杰克逊。 This example显示了如何使用Jackson将bean输出到文件和String。

我已回答了有关将查询输出转换为JSON的初始问题。有关其他主题(如响应)的问题的答案,您需要提出一个新的StackOverflow问题。