PSQLException: ResultSet not positioned properly - Mailing list pgsql-jdbc

From james@dades.ca
Subject PSQLException: ResultSet not positioned properly
Date
Msg-id 26787.72.35.6.133.1203032179.squirrel@squirrel.dades.ca
Whole thread Raw
Responses Re: PSQLException: ResultSet not positioned properly  (Oliver Jowett <oliver@opencloud.com>)
Re: PSQLException: ResultSet not positioned properly  (james@dades.ca)
List pgsql-jdbc
Hello All,

I am getting the following error:

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


... when I call ResultSet.next() on a set of empty rows after doing a
SELECT.  The actual line that results in the exception is the call to
rs2.next() in the code below.  The output I see is in the following
section.

If I whittle the code down to its bare essentials I do not see this error.
 I would imagine that it has something to do with my preceding use of jdbc
connections, but since I explicitly close those connections I find this
surprising.

Thanks in advance for any help.

James






=================================================================
import java.sql.*;
import java.util.*;
import java.util.regex.*;

public class populate {
    static public class UpdatePair {
        public String sonumber;
        public String number;
        public String routingNumber;
    }
    public static void main(String args[]) {
        String sonumber;

        String location="1";
        String pgTimeMarker="(now()-interval '60 days')";
        UpdatePair pair;

        Connection pConnection = null;
        Connection mConnection = null;
        try {
            //postgres configs
            String pDataBaseDriver ="org.postgresql.Driver";
            String pUrl ="jdbc:postgresql://redacted.com:5432/redacted";
            String pUsername ="redacted";
            String pPassword ="redacted";

            //postgres configs
            String p2DataBaseDriver ="org.postgresql.Driver";
            String p2Url ="jdbc:postgresql://redacted.com:5432/redacted";
            String p2Username ="redacted";
            String p2Password ="redacted";

            //mssql configs
            String mDataBaseDriver ="net.sourceforge.jtds.jdbc.Driver";
            String mUrl ="jdbc:jtds:sqlserver://redacted.org:1433/redacted";
            String mUsername ="redacted";
            String mPassword ="redacted";

            //Load the JDBC Drivers
            Class.forName(pDataBaseDriver);
            Class.forName(p2DataBaseDriver);
            Class.forName(mDataBaseDriver);


            //Get the list of prepopulated entries from the petrocan edi db
            pConnection=DriverManager.getConnection(pUrl,pUsername,pPassword);
            Statement pStmt = pConnection.createStatement();
            Set<UpdatePair> toUpdate=new HashSet<UpdatePair>();
            String q="SELECT sonumber FROM loading WHERE time IS NULL";
            ResultSet pRs = pStmt.executeQuery(q);

            while(pRs.next()) {
                sonumber=pRs.getString("sonumber").trim();
                pair = new UpdatePair();
                pair.sonumber = sonumber;
                toUpdate.add(pair);
            }
            pConnection.close();

            //Find the associated record in the Navision db
            mConnection=DriverManager.getConnection(mUrl,mUsername,mPassword);
            Statement mStmt = mConnection.createStatement();
            ResultSet mRs = null;

            Iterator si = toUpdate.iterator();
            while (si.hasNext()) {
                pair = (UpdatePair) si.next();
                sonumber = pair.sonumber;
                mRs = mStmt.executeQuery("SELECT [No_],[Routing No_] FROM
[Commercial Alcohols Inc_$Sales Header] WHERE [No_] =
'"+sonumber+"'");

                if (!mRs.next())
                    continue;
                else {
                    pair.number=mRs.getString("No_");
                    pair.routingNumber=mRs.getString(2);
                }
            }

            mConnection.close();


            Connection
pConnection2=DriverManager.getConnection(p2Url,p2Username,p2Password);
            Statement pStmt2 = pConnection2.createStatement();
            ResultSet rs2;
            si = toUpdate.iterator();
            while (si.hasNext()) {
                pair = (UpdatePair) si.next();
                sonumber = pair.sonumber;
                String arm1="null";
                String arm2="null";
                String timestamp=null;
                StringTokenizer st;

                st=new StringTokenizer(pair.routingNumber, ", ");
                while (st.hasMoreTokens()) {
                    String token=st.nextToken();
                    q ="SELECT * FROM bol WHERE transaction='"+token;
                    q+="' AND time > "+pgTimeMarker;
                    rs2 = pStmt2.executeQuery(q);
                    System.out.println("JAMES AB");
                    if(rs2.next()) {
                        System.out.println("JAMES A");
                        timestamp=rs2.getString("time");
                    }
                    else
                        System.out.println("Error: ticket number not found
in bol: so#="+sonumber+" ticket#="+token+";
navroutno="+pRs.getString(2));

System.out.println("JAMES AB2");
                }

            }
        }
        catch(ClassNotFoundException e) {
            System.out.println("Error finding database Driver");
            e.printStackTrace();
        }
        catch(SQLException e) {
            System.out.println("SQLException::"+e.getErrorCode()+"::"+e.getSQLState());
            e.printStackTrace();
            return;
        }
    }
}
=====================================================================
bash> java -cp .:./jtds-1.2.2.jar:./postgresql-8.3-603.jdbc3.jar populate
JAMES AB
SQLException::0::24000
org.postgresql.util.PSQLException: ResultSet not positioned properly,
perhaps you need to call next.
        at
org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkResultSet(AbstractJdbc2ResultSet.java:2635)
        at
org.postgresql.jdbc2.AbstractJdbc2ResultSet.getString(AbstractJdbc2ResultSet.java:1885)
        at populate.main(populate.java:106)


pgsql-jdbc by date:

Previous
From: Simon Riggs
Date:
Subject: Re: JDBC, prepared queries, and partitioning
Next
From: Oliver Jowett
Date:
Subject: Re: PSQLException: ResultSet not positioned properly