1

データベースからの結果を JSONObject に保存しています。私は基本的に、JSONObject に personId を持たせ、各 personId に対して、その人が購入した車のすべての ID (車の ID) のリストと、これらの車のそれぞれの購入日を含めたいと考えています。以下のコードがありますが、1 行の結果しか得られません。私はループがひどいです。明らかにここでポイントがありません。ここで何が間違っているのか、なぜ結果が返ってこないのかを教えてください。出力のイメージを示すために、各 personId に対して 15 以上の carId があり、これらの carId のそれぞれに購入日があります。

public static JSONObject fetchPersonCarInfo(String person) throws SQLException
    {       
        JSONObject personCarInfoObj =  new JSONObject();
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet rs = null;        
        try {
            connection = DriverManager.getConnection("jdbc:myDriver:myDatabase",username,password);
            statement = connection.prepareStatement("SELECT personId, carId, purchase_date FROM carz WHERE person = ?");
            statement.setString(1, person);
            rs = statement.executeQuery();          
            while(rs.next()) {                  
                if(personCarInfoObj.containsKey(rs.getString("personId")) {
                    personCarInfoObj.get(rs.getString("personId"));
                    personCarInfoObj.get(rs.getString("carId"));
                    personCarInfoObj.get(rs.getString("purchaseDate"));
                    } else {
                    personCarInfoObj = new JSONObject();
                    personCarInfoObj.put("personId",(new String(rs.getString("personId"))));
                    personCarInfoObj.put("deviceId",(new String(rs.getString("carId"))));
                    personCarInfoObj.put("deviceCheckinTime",(new Date(rs.getTimestamp("purchaseDate")).getTime())); //not sure how to get timestamp column
                }
            }           
        } finally{
            statement.close();
            rs.close();
            connection.close();
        }       
        return personCarInfoObj;
    }
4

1 に答える 1

1

コードに追加したコメントを読んで、ロジックに加えた変更を理解してください。分からない部分があれば遠慮なく聞いてください。

public static JSONObject fetchPersonCarInfo(String person) throws SQLException {

    JSONObject personCarInfoObj = new JSONObject();
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet rs = null;
    try {
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "username", "password");
        statement = connection.prepareStatement("SELECT personId, carId, purchaseDate FROM person WHERE person = ?");
        statement.setString(1, person);
        rs = statement.executeQuery();
        JSONArray carsArray = null;
        while (rs.next()) {
            // lookup if we have an entry for personId already in personCarInfoObj
            if (personCarInfoObj.containsKey(rs.getString("personId"))) {
                // build a new object for car info                
                JSONObject personCarObj = new JSONObject();
                carsArray = (JSONArray) personCarInfoObj.get(rs.getString("personId"));
                personCarObj.put("deviceId", (new String(rs.getString("carId"))));
                personCarObj.put("deviceCheckinTime", new Date(rs.getTimestamp("purchaseDate").getTime())); //not sure how to get timestamp column
                // this will append new car info object to the array with key rs.getString("personId"))
                carsArray.add(personCarObj);
                personCarInfoObj.put(rs.getString("personId"), carsArray);
            } else {                    
                carsArray = new JSONArray();
                JSONObject personCarObj = new JSONObject();
                personCarObj.put("deviceId", (new String(rs.getString("carId"))));
                personCarObj.put("deviceCheckinTime", new Date(rs.getTimestamp("purchaseDate").getTime())); //not sure how to get timestamp column
                carsArray.add(personCarObj);
                // store all the cars purchased against that personId in personCarInfoObj
                personCarInfoObj.put(new String(rs.getString("personId")), carsArray);
            }
        }
    } finally {
        statement.close();            
        connection.close();
    }
    return personCarInfoObj;
}

また、JSON オブジェクトの構築について読むことをお勧めします。

乾杯!

于 2013-11-05T07:39:51.903 に答える