Received resultset tuples, but no field structure for them

Поиск
Список
Период
Сортировка
От Seth Duda
Тема Received resultset tuples, but no field structure for them
Дата
Msg-id CAMX=jFymKNLZ5Ld0hs3b=5kB5J=e8ejxr45rWaPdzhnWP0h-Aw@mail.gmail.com
обсуждение исходный текст
Список pgsql-bugs
The JDBC driver is throwing an "IllegalStateException: Received resultset tuples, but no field structure for them" exception in the following scenario:

Execute the same query 5 times and cause an exception to be thrown the 5th time (e.g. value too long error). Prepare Threshold must be set to 5. When you execute the same query the 6th time, you'll receive an IllegalStateException.

Below is an example of how to reproduce the error. Tested using JDBC driver v42.1.4 and PostgreSQL 9.4.7.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

import org.postgresql.util.PSQLException;

public class IllegalStateExceptionTest {

public static void main(String[] args) throws Exception {

/*
* CREATE TABLE test ( val varchar(10) )
*/

Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost:5432/XXX?user=XXXX&password=XXXX";
Connection conn = DriverManager.getConnection(url);
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("insert into test (val) values (?)", new String[] { "val" });
ps.setString(1, "TEST");

System.out.println("Execution #1 (OK)");
ps.executeUpdate();
conn.rollback();
System.out.println("Execution #2 (OK)");
ps.executeUpdate();
conn.rollback();
System.out.println("Execution #3 (OK)");
ps.executeUpdate();
conn.rollback();
System.out.println("Execution #4 (OK)");
ps.executeUpdate();
conn.rollback();
System.out.println("Execution #5 (OK)");
try {
// Send a value that's too long on the 5th request
ps.setString(1, "TESTTESTTEST");
ps.executeUpdate();
} catch (PSQLException e) {
// Expected error: org.postgresql.util.PSQLException: ERROR: value
// too long for type character varying(10)
conn.rollback();
}
// Send a valid value on the 6th request
ps.setString(1, "TEST");
System.out.println("Execution #6 (java.lang.IllegalStateException: Received resultset tuples, but no field structure for them)");
ps.executeUpdate();
conn.rollback();
}

}

Here is the stack trace of the error:

Exception in thread "main" java.lang.IllegalStateException: Received resultset tuples, but no field structure for them
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2172)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:302)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:440)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:358)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:169)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:136)
at IllegalStateExceptionTest.main(IllegalStateExceptionTest.java:47)

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Сергей А. Фролов
Дата:
Сообщение: Re: BUG #14940: Duplicated records inspite of primary key and uniqueconstraint
Следующее
От: PG Bug reporting form
Дата:
Сообщение: BUG #14983: ERROR: duplicate key value violates unique constraint"oid_tbl_oid_key"