Re: how to resolve org.postgresql.util.PSQLException: ResultSet not positioned properly, perhaps you need to call next.

Rob Sargent <[email protected]> Fri, 6 Sep 2019 23:46:52 -0600
Newsgroups gmane.comp.db.postgresql.jdbc
Message-ID <[email protected]>

> On Sep 6, 2019, at 9:21 PM, Karen Goh <[email protected]> wrote:
> 
> Hi Rob,
> 
> I found out that Tomcat is inconsistent in giving me the result and as mentioned, even though certain lines are commented out it is pointing to the commented out lines.
> 
> And even after clearing cache whatsoever, I am still getting the old error which is not supposed to be there.
> 
> Till I really iron out all Tomcat problem, I can't comment anything. But, as of now, the problem I posted here is dissolved.
> 
> Right now, it is giving me concurrentModificationList exception at (String s : subject) but this is Java problem and nothing to do with Postgresql...so that's the state of thing now.

Yes, that’s what I suspected in my note about “current list being iterated”.  I think you might be better off with something similar to my approach to reading the “subject_name” value only once for each row.

Does your query return multiple rows per tutor per execution as I suspect from reading your query?

> 
> Thanks for the reply thought....oh the list is part of the domain model.....as what you have to do to every Model construction...
> 			   
>         for (String s: subjList)
> // test if one entry of subjList matches the current row’s “subject_name” value, 
> // repeatedly asking for “subject_name” from current rs
>             if (s.contains(rs.getString("subject_name")))
> // if so add current value to list being iterated
>                 subjList.add(rs.getString("subject_name"));
>         newSub.addAll(subjList);
> // If I follow the intent correctly (match subjects to tutor) I believe the following would be more effective
>         String rsSubject = rs.getString("subject_name");
>         if (subjList.contains(rsSubject)) {
>             newSub.add(rsSubject);
>         }
> // However your sql seems to be asking for all tutors in a given zipcode and what subjects they handle.  You might want to at least order the return set by tutor to deal with one tutor over several result rows.  
> Alternatively you could group subjects into an array per tutor:
> String sql1 = "select t.tutor_contact_no, t.zipcode, t.tutor_id, array_agg(t2.subject_name) FROM s_tutor t JOIN tutor_subject t2  ON t.tutor_id = t2.tutor_id where t.zipcode = ?  And  t2.subject_name = Any((?)) group by t.tutor_contact_no,t.zipcode,t.tutor_id”;
> and grab the array of tutor’s subjects.
> Further your responce doesn’t tie specific tutor to specific subjects.  Perhaps you can add List<String>subjects to your “tutor” class?
> 
> 
>     }
>     myList.add(t);					
>     request.setAttribute("tutors", myList);				       
>     request.setAttribute("sub", newSub);
> 	
> }
> 
> I hope this helps.