From: | james(at)dades(dot)ca |
---|---|
To: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | PSQLException: ResultSet not positioned properly |
Date: | 2008-02-14 23:36:19 |
Message-ID: | 26787.72.35.6.133.1203032179.squirrel@squirrel.dades.ca |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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)
From | Date | Subject | |
---|---|---|---|
Next Message | Oliver Jowett | 2008-02-15 01:52:29 | Re: PSQLException: ResultSet not positioned properly |
Previous Message | Simon Riggs | 2008-02-14 13:04:19 | Re: JDBC, prepared queries, and partitioning |