0

私はハッシュマップを持っています。そこには、人が所有する名前で車のリストを保存しています。

Map<String,List<String>> personCarMap = new HashMap<String,List<String>>();

キーは個人ID、値は車名のリストです。値には、購入日も格納したいと思います。これらはすべてデータベースから取得されています。データベース内の 2 つの異なる列へのキー マップを取得するにはどうすればよいですか?

これは私がこれまでに持っているコードです。

public static JSONObject fetchPersonCarInfo(String person) throws SQLException
{
    Map<String,List<String>> personCarMap = new HashMap<String,List<String>>();
    JSONObject jObj = 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,car,purchase_date from carz where person = ?");
        rs = statement.executeQuery();          
        while(rs.next()) {  
            List<String> carIds;
            if(personCarMap.containsKey(rs.getString(carId))) {
                carIds = personCarMap.get(rs.getString(personId));
            } else {
                carIds = new ArrayList<String>();
            }               
            carIds.add(rs.getString(carId));
            carIds.add(rs.getTimestamp(purchase_date).toString()); //This is where I have a doubt.
            personCarMap.put(rs.getString(carId),carIds);           
        }
        for(Map.Entry<String, List<String>> personCarMapEntry:personCarMap.entrySet())
        {
            jObj.put("personID", personCarMapEntry.getKey());
            jObj.put("carID", personCarMapEntry.getValue());                
        }
    } finally{
        DatabaseFunctions.closeDBResources(null, statement, rs);
    }       
    return jObj;
}   
}

JSON オブジェクトに {personId, [carId,purchasedate]} を表示させたい。JSON配列に購入日も出力させる方法を教えてください。personId と carId の出力は明確に表示されますが、購入日を追加する方法がわかりません。専門家のアドバイスが必要です。

4

2 に答える 2

2

carId と purchaseDate の 2 つのプロパティを持つカスタム オブジェクトのリストを使用する必要があります。

Map<String,List<ClassNameOfCustomObject>> personCarMap = new HashMap<String,List<ClassNameOfCustomObject>>();

このようにして、購入日を carId とともに personCarMap に保存できます。

于 2013-11-04T04:50:31.797 に答える
1

を直接使用することをお勧めしJSONObjectます。いくつかの便利なメソッドがあります。

public static JSONObject fetchPersonCarInfo(String person) throws SQLException
{
    JSONObject jObj = new JSONObject();
    PreparedStatement statement = null;
    ResultSet rs = null;        
    try {
        Connection connection = DriverManager.getConnection("jdbc:myDriver:myDatabase",username,password);
        statement = connection.prepareStatement("SELECT personId, car, purchase_date FROM carz WHERE person = ?");
        statement.setString(1, person);
        rs = statement.executeQuery();
        while(rs.next()) {
            jObject.put("personId", rs.getString("personId");

            JSONObject purchase = new JSONObject();
            // there is no column with name carId in above query.
            purchase.put("carId", rs.getString("car");
            purchase.put("purchasedate", rs.getTimestamp("purchase_date").toString());  
            jObject.append("purchases", purchase);
        }
    } finally{
        DatabaseFunctions.closeDBResources(null, statement, rs);
    }       
    return jObj;
}

これにより、次のような JSON が生成されます。

{
    "personId": "ABC123",
    "purchases": [
        {"carId": "abc123", "purchasedate": "2013-01-01 00:00:00"},
        {"carId": "def456", "purchasedate": "2013-01-02 00:00:00"}
    ]
}

JSON をどのように表示したいかを理解するのは少し難しかったですが、これで十分だと思います。いずれにせよ、この JSON 構造はデータに適しています。

于 2013-11-04T05:00:15.233 に答える