Java 在传输JSON数据时,数据被最后所赋值的内容覆盖

在用java传输json数据时,map类型的变量里的数据会被最后一次赋值的内容所覆盖:

package MicrosoftImageCup;

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
//import java.util.StringTokenizer;

import net.sf.json.JSONObject;

public class GetRecord {
    public static void handleGetRecord(JSONObject jsonObject, Connection cn, PrintWriter pr) throws SQLException{
        JSONObject resultJsonObject = new JSONObject();
        @SuppressWarnings("rawtypes")
        List<Map> recordBooks = new ArrayList<Map>();

        //Book book = null;
        Set<String> bookId = new HashSet<String>();
        String userName = jsonObject.getString("username");
        //Get user's id, *** IMPORTANT  ***
        PreparedStatement ps = cn.prepareStatement("SELECT id FROM user WHERE userName=?");
        ps.setString(1, userName);
        ResultSet rs = ps.executeQuery();
        int userId  = 0;
        if(rs.next()){
            userId = Integer.parseInt(rs.getString(1));
            //Get Book's id
            ps = cn.prepareStatement("SELECT bookid FROM HaveRead WHERE userid=?");
            ps.setString(1, userId+"");
            rs = ps.executeQuery();
            if(rs.next()){
                bookId.add(rs.getString(1));

                resultJsonObject.put("result", "true");

                while(rs.next()){
                    bookId.add(rs.getString(1));
                }

                //Get Book's info
                for(String each : bookId){
                    ps = cn.prepareStatement("SELECT bookname,author,imgurl,doubanrate from Book "
                            + "WHERE id=?");
                    ps.setString(1, each);
                    rs = ps.executeQuery();
                    while(rs.next()){
                        Map<String, String> eachRecordBookAttr = new HashMap<String, String>();
                        //book name
                        eachRecordBookAttr.put("bookname", rs.getString(1));

                        //author
                        eachRecordBookAttr.put("author", rs.getString(2));
                        //imgurl
                        eachRecordBookAttr.put("imgurl", rs.getString(3));
                        //douban rate
                        if(rs.getString(4).equals("")){
                            eachRecordBookAttr.put("doubanrate", "0.0");
                        }else{
                            eachRecordBookAttr.put("doubanrate", rs.getString(4));
                        }

                        recordBooks.add(eachRecordBookAttr);

                    }
                }

                resultJsonObject.put("record", recordBooks);
                // {"result":"true","record":[{"bookname":"XX","author":"XX","imgurl":"XX","doubanrate":"XX"},{......},{......}]}
                //send
                System.out.println("Send To Client: " + resultJsonObject.toString());
                pr.println(resultJsonObject.toString());
                pr.flush();
            }else{
                resultJsonObject.put("result", "false");
                //send
                pr.println(resultJsonObject.toString());
                pr.flush();
            }


        }

    }
}

在一开始的时候,我把

Map<String, String> eachRecordBookAttr = new HashMap<String, String>();

放在了循环外边儿,导致最后发送给客户端的数据

//
{“result”:”true”,”record”:[{“bookname”:”XX”,”author”:”XX”,”imgurl”:”XX”,”doubanrate”:”XX”},{……},{……}]}

里面的每一本书都是最后一次赋值的内容。

= =把这段初始化的代码放到循环里,每次循环都重新初始化一次就行了~

Map<String, String> eachRecordBookAttr = new HashMap<String, String>();
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值