Java 结果集数据不完整 评论; ArrayList commentList=null; 试一试{ ConnectionFactory myFactory=ConnectionFactory.getFactory(); 连接conn=myFactory.getConnection(); int i=1;int j=1;int k=1; PreparedStatement pstmt=conn.prepareStatement(“从注释中选择*,其中deletestatus=0,workid=?”; PreparedStatement pstmtLName=conn.prepareStatement(“从LEADER中选择*,其中leaderid=?”; PreparedStatement pstmtname=conn.prepareStatement(“从memberid=?”的成员中选择*”; pstmt.setInt(i++,Integer.parseInt(projid)); 结果集rs=pstmt.executeQuery(); 系统输出打印(rs); commentList=新的ArrayList(); while(rs.next()) { 注释=新注释(); comment.setDetails(rs.getString(“details”); 注释.setDateadded(rs.getTimestamp(“dateadded”); 注释:设置紧急状态(rs.getInt(“紧急状态”); 如果(rs.getInt(“leaderid”)!=0){ 注释.setLeaderid(rs.getInt(“leaderid”); pstmtLName.setInt(j++,rs.getInt(“leaderid”); ResultSet rs2=pstmtLName.executeQuery(); if(rs2.next()){ comment.setFullname(rs2.getString(“firstname”)+“”+rs2.getString(“lastname”); } } 如果(rs.getInt(“成员ID”)!=0){ comment.setMemberid(rs.getInt(“memberid”); 系统输出打印(“在循环中”); pstmtname.setInt(j++,rs.getInt(“memberid”); ResultSet rs3=pstmtname.executeQuery(); if(rs2.next()){ comment.setFullname(rs3.getString(“firstname”)+“”+rs3.getString(“lastname”); } } comment.setProjid(Integer.parseInt(projid)); 添加(注释); } 返回评论列表; }

Java 结果集数据不完整 评论; ArrayList commentList=null; 试一试{ ConnectionFactory myFactory=ConnectionFactory.getFactory(); 连接conn=myFactory.getConnection(); int i=1;int j=1;int k=1; PreparedStatement pstmt=conn.prepareStatement(“从注释中选择*,其中deletestatus=0,workid=?”; PreparedStatement pstmtLName=conn.prepareStatement(“从LEADER中选择*,其中leaderid=?”; PreparedStatement pstmtname=conn.prepareStatement(“从memberid=?”的成员中选择*”; pstmt.setInt(i++,Integer.parseInt(projid)); 结果集rs=pstmt.executeQuery(); 系统输出打印(rs); commentList=新的ArrayList(); while(rs.next()) { 注释=新注释(); comment.setDetails(rs.getString(“details”); 注释.setDateadded(rs.getTimestamp(“dateadded”); 注释:设置紧急状态(rs.getInt(“紧急状态”); 如果(rs.getInt(“leaderid”)!=0){ 注释.setLeaderid(rs.getInt(“leaderid”); pstmtLName.setInt(j++,rs.getInt(“leaderid”); ResultSet rs2=pstmtLName.executeQuery(); if(rs2.next()){ comment.setFullname(rs2.getString(“firstname”)+“”+rs2.getString(“lastname”); } } 如果(rs.getInt(“成员ID”)!=0){ comment.setMemberid(rs.getInt(“memberid”); 系统输出打印(“在循环中”); pstmtname.setInt(j++,rs.getInt(“memberid”); ResultSet rs3=pstmtname.executeQuery(); if(rs2.next()){ comment.setFullname(rs3.getString(“firstname”)+“”+rs3.getString(“lastname”); } } comment.setProjid(Integer.parseInt(projid)); 添加(注释); } 返回评论列表; },java,mysql,jdbc,prepared-statement,resultset,Java,Mysql,Jdbc,Prepared Statement,Resultset,上面代码的问题是,它只返回结果集的第一个结果 当我删除WHILE(RS.NEXT)子句中的IF子句时,它返回了所有需要的结果,但信息不完整,因为我还需要在IF语句中进行查询 如果你们知道确切的问题,请提供帮助,如果你们需要更多信息,请告诉我。谢谢大家! 在这里,问题似乎就在这里 Comment comment; ArrayList<Comment> commentList = null; try{ ConnectionFactory m

上面代码的问题是,它只返回结果集的第一个结果

当我删除
WHILE(RS.NEXT)
子句中的
IF
子句时,它返回了所有需要的结果,但信息不完整,因为我还需要在IF语句中进行查询


如果你们知道确切的问题,请提供帮助,如果你们需要更多信息,请告诉我。谢谢大家!

在这里,问题似乎就在这里

    Comment comment;
     ArrayList<Comment> commentList = null;

     try{
         ConnectionFactory myFactory = ConnectionFactory.getFactory();
         Connection conn = myFactory.getConnection();
         int i = 1; int j = 1; int k = 1;

         PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM COMMENT WHERE deletestatus = 0 and workid = ?");

         PreparedStatement pstmtLName = conn.prepareStatement("SELECT * FROM LEADER WHERE leaderid = ?");

         PreparedStatement pstmtMName = conn.prepareStatement("SELECT * FROM MEMBER WHERE memberid = ?");

         pstmt.setInt(i++, Integer.parseInt(projid));

         ResultSet rs = pstmt.executeQuery();
         System.out.print(rs);
         commentList = new ArrayList<Comment>();
         while(rs.next())
            {
                comment = new Comment();
                comment.setDetails(rs.getString("details"));
                comment.setDateadded(rs.getTimestamp("dateadded"));
                comment.setUrgency(rs.getInt("urgency"));



                if(rs.getInt("leaderid") != 0){
                    comment.setLeaderid(rs.getInt("leaderid"));

                    pstmtLName.setInt(j++, rs.getInt("leaderid"));

                    ResultSet rs2 = pstmtLName.executeQuery();


                    if(rs2.next()){
                    comment.setFullname(rs2.getString("firstname") +" " + rs2.getString("lastname"));
                    }
                }
                if(rs.getInt("memberid") != 0) {
                    comment.setMemberid(rs.getInt("memberid"));

                    System.out.print("in the loop");

                    pstmtMName.setInt(j++, rs.getInt("memberid"));
                    ResultSet rs3 = pstmtMName.executeQuery();

                    if(rs2.next()){
                    comment.setFullname(rs3.getString("firstname") +" " + rs3.getString("lastname"));
                    }

                }   

                comment.setProjid(Integer.parseInt(projid));
                commentList.add(comment);
            }



         return commentList;
     }
对于每个真实条件,j的值都会增加,直到循环迭代。 因此,它增加了prepapred语句的
参数索引

应该是

pstmtLName.setInt(j++, rs.getInt("leaderid"));
pstmtMName.setInt(j++, rs.getInt("memberid"));

在这里,问题似乎就在这里

    Comment comment;
     ArrayList<Comment> commentList = null;

     try{
         ConnectionFactory myFactory = ConnectionFactory.getFactory();
         Connection conn = myFactory.getConnection();
         int i = 1; int j = 1; int k = 1;

         PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM COMMENT WHERE deletestatus = 0 and workid = ?");

         PreparedStatement pstmtLName = conn.prepareStatement("SELECT * FROM LEADER WHERE leaderid = ?");

         PreparedStatement pstmtMName = conn.prepareStatement("SELECT * FROM MEMBER WHERE memberid = ?");

         pstmt.setInt(i++, Integer.parseInt(projid));

         ResultSet rs = pstmt.executeQuery();
         System.out.print(rs);
         commentList = new ArrayList<Comment>();
         while(rs.next())
            {
                comment = new Comment();
                comment.setDetails(rs.getString("details"));
                comment.setDateadded(rs.getTimestamp("dateadded"));
                comment.setUrgency(rs.getInt("urgency"));



                if(rs.getInt("leaderid") != 0){
                    comment.setLeaderid(rs.getInt("leaderid"));

                    pstmtLName.setInt(j++, rs.getInt("leaderid"));

                    ResultSet rs2 = pstmtLName.executeQuery();


                    if(rs2.next()){
                    comment.setFullname(rs2.getString("firstname") +" " + rs2.getString("lastname"));
                    }
                }
                if(rs.getInt("memberid") != 0) {
                    comment.setMemberid(rs.getInt("memberid"));

                    System.out.print("in the loop");

                    pstmtMName.setInt(j++, rs.getInt("memberid"));
                    ResultSet rs3 = pstmtMName.executeQuery();

                    if(rs2.next()){
                    comment.setFullname(rs3.getString("firstname") +" " + rs3.getString("lastname"));
                    }

                }   

                comment.setProjid(Integer.parseInt(projid));
                commentList.add(comment);
            }



         return commentList;
     }
对于每个真实条件,j的值都会增加,直到循环迭代。 因此,它增加了prepapred语句的
参数索引

应该是

pstmtLName.setInt(j++, rs.getInt("leaderid"));
pstmtMName.setInt(j++, rs.getInt("memberid"));

您已经定义了
int k
,但没有使用它。我假设您想使用它来设置
memberid
参数。
改变

它应该是有效的

我想知道当查询中只有一个参数标记时,为什么要使用
I++
j++
k++
来设置语句的参数值。您应该直接使用
pstObject.setInt(1,
。否则,如果
rs
获取的记录多于
leaderid!=0
memberid!=0
,它们将导致标记索引增加,例如
pstObject.setInt(2,…
,它在查询案例中是无效参数,并引发和
SQLException


由于您在while循环中重复使用相同的
pstObject
,我建议使用来清除当前参数值。虽然这是可选的,但在某些情况下,立即释放当前参数值使用的资源是有用的。

您已经定义了
int k
,但没有使用它。我假设您我想用它来设置
memberid
参数。
改变

它应该是有效的

我想知道当查询中只有一个参数标记时,为什么要使用
I++
j++
k++
来设置语句的参数值(1,…
。否则,如果
rs
获取的记录多于
leaderid!=0
memberid!=0
,它们将导致标记索引的增量,例如
pstObject.setInt(2,…
,这是查询案例中的无效参数,并引发和
SQLException


由于您在while循环中重复使用相同的
pstObject
,因此我建议使用来清除当前参数值。虽然这是可选的,但在某些情况下,立即释放当前参数值所使用的资源是有用的。

声明在此上下文中位于错误的位置。此解决方案有效非常好!谢谢!:)声明在此上下文中位于错误的位置。此解决方案非常有效!谢谢!:)为错误声明道歉。我真的不需要那里的k。我希望代码只转到其中一个IF子句,但是,我没有将其设置为IF else,以防数据库中出现任何异常,错误标记会更少。尽管感谢pstObject的建议!我会把它放在那里!谢谢!为错误声明者道歉ion。我真的不需要那里的k。我希望代码只转到其中一个IF子句,但是,我没有将其设置为IF else,只是为了防止数据库中出现任何异常,错误标记会更少。尽管感谢pstObject的建议!我会将其放在那里!谢谢!
pstmtMName.setInt( k++, rs.getInt( "memberid" ) );