简体   繁体   English

为什么java.util.list会添加以前的数据,而在添加新数据时会清除这些数据

[英]why does java.util.list adds previous data which were cleared when adding new data

I created a spider program . 我创建了一个蜘蛛程序。

There is a problem that some data are repeated when inserting data into MySQL database. 将数据插入MySQL数据库时,存在重复某些数据的问题。

For example,when the program have inserted the data of A,it firstly inserts some values of A's field into database before inserting the data of B,then inserting B. 例如,程序插入了A的数据后,首先在插入B的数据之前先将A的某些字段值插入数据库,然后再插入B。

in database>>>>> 在数据库>>>>>

please click to check the exmple 请点击查看示例

B does not have the red data but still inserted . B没有红色数据,但仍插入。 I cleared list before inserting B ,however it does not work. 我在插入B之前清除了列表,但是它不起作用。

When I debuging: 当我调试时:

inserting A_list [A.size is 45,list.size=45] 插入A_list [A.size为45,list.size = 45]

list.clear() [list=null] list.clear()[list = null]

list=getB() list = getB()

inserting B_list [list.size=45+49=94][B.size is 49] 插入B_list [list.size = 45 + 49 = 94] [B.size是49]

why is the size of list at this time 94? 为什么此时列表的大小为94? It should be 49.list added data of A again . 应该再次是49.list添加A的数据。

Here are my codes: 这是我的代码:

private static void Insert(List<User> rootusers) throws Exception{
    String sql="insert into t_userlist(userid,username,rootuserid,rootusername,visited) values(?,?,?,?,?)";
    String sqlupdate="update t_userlist set visited=1 where userid=?";
    String sqlvisited="SELECT * from t_userlist where visited=1 and userid=";
    Connection conn=null;
    PreparedStatement psmt = null;
    PreparedStatement ps;
    for(int i=0;i<rootusers.size();i++){
        User user=rootusers.get(i);

        List<User> userlist=htmlParser.parseUserlist(user);

        if(userlist!=null){
            conn=DbUtil.getConn();
            conn.setAutoCommit(false);
            try {
                for(int j=0;j<userlist.size();j++){


                        int visitedUser=selectUserID(sqlvisited+"'"+userlist.get(j).getUserid()+"'").size();

                        psmt=conn.prepareStatement(sql);
                        psmt.setString(1, userlist.get(j).getUserid());
                        psmt.setString(2, userlist.get(j).getUsername());
                        psmt.setString(3, user.getUserid());
                        psmt.setString(4, user.getUsername());
                        if(visitedUser!=0){
                            psmt.setInt(5, 1);
                        }
                        else {
                            psmt.setInt(5, 0);
                        }
                        psmt.executeUpdate();
                        psmt.close();
                }


                ps=conn.prepareStatement(sqlupdate);
                ps.setString(1,user.getUserid());
                ps.executeUpdate();
                conn.commit();
                ps.close();
                DbUtil.closeConn(conn);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }catch (Exception e) {
                try {
                    if(conn!=null)
                    {
                          conn.rollback(); 
                         // conn.setAutoCommit( true);
                    }
                } catch (Exception e1) {

                    e1.printStackTrace();
                }
            }

            **userlist.clear();**
            System.out.println("insert"+user.getUsername()+"successfully");
        }else {
            continue;
        }

    }

}

the htmlParser.parseUserlist(user) codes: htmlParser.parseUserlist(user)代码:

public static ArrayList<User> parseUserlist(User user) throws Exception{
    String userlist=GetUserlist.getUserList(user.getUserid());//just return html 
    ArrayList<User> list=new ArrayList<User>();
    if(userlist!=null){
        Document doc=Jsoup.parse(userlist);
        Elements users=doc.select("a[usercard]");

        for(Element nodeuser:users){
            //System.out.println(nodeuser.toString());
            User u=new User();
            u.setUserid(nodeuser.attr("usercard").substring(3,13));
            u.setUsername(nodeuser.text());
            u.setRootuserid(user.getUserid());
            list.add(u);
            //System.out.println(u.getUserid()+" "+u.getUsername());
        }
    }else {
        System.out.println(user.getUsername()+"没有关注任何人");
    }

    //System.out.println(users.toString());
    //System.out.println(list.get(1).getUsername());
    return list;
}

please help me ! 请帮我 !

I don't see anything wrong that would be a cause of your problem in the code you have provided. 我没有发现任何错误会导致您提供的代码出现问题。 One thing to know is that list.Clear() is not the same as list = null; 要知道的一件事是list.Clear()与list = null不同; because an empty list is a list that contains no elements and clear() empties the list. 因为空列表是一个不包含任何元素的列表,而clear()会清空该列表。 In your insert method you would do better with !userList.isEmpty() (seeing how you are always creating a list and at worst returning an empty list from parseUserList. 在您的插入方法中,您最好使用!userList.isEmpty()(了解如何始终创建列表,最糟糕的是从parseUserList返回空列表)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用Spring-data在Java.util.List中插入$ currentDate - Insert $currentDate in java.util.List using Spring-data 当我已导入java.util时,为什么必须导入java.util.List。*? - Why do I have to import java.util.List when I already imported java.util.*? 不会发生java.util.List到scala List的隐式转换 - Implicit conversion of java.util.List to scala List does not occur java.util.List 是可变的吗? - Is java.util.List mutable? java.util.List 的降序迭代器 - descendingIterator for java.util.List JSTL-在JSP中动态创建下拉菜单/下拉菜单,从列表中提取数据(java.util.List) - JSTL - Dynamic dropdown/dropright menu creation in JSP, extracting data from a list (java.util.List) ORMLite不知道如何存储接口java.util.List - ORMLite does not know how to store interface java.util.List Spring-data-mongo 无法使用构造函数实例化 java.util.List - Spring-data-mongo unable to instantiate java.util.List using Constructor JRBeanCollectionDataSource:如何从 JavaBean 显示来自 java.util.List 的数据? - JRBeanCollectionDataSource: How to show data from the java.util.List from JavaBean? 为什么java.util.List不能实现Serializable? - Why doesn't java.util.List implement Serializable?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM