Explict cursor state in a serially_reusable package
hi all
below there's a modified example taken from the Oracle documentation:
CREATE TABLE people (name VARCHAR2(20));
INSERT INTO people (name) VALUES ('John Smith');
INSERT INTO people (name) VALUES ('Mary Jones');
INSERT INTO people (name) VALUES ('Joe Brown');
INSERT INTO people (name) VALUES ('Jane White');
INSERT INTO people (name) VALUES ('Brian Moore');
CREATE OR REPLACE PACKAGE SR_PKG2 IS
-- NOT SERIALLY_REUSABLE;
CURSOR C IS SELECT NAME FROM PEOPLE;
END SR_PKG2;
CREATE OR REPLACE PROCEDURE fetch_from_cursor2 IS
name_ VARCHAR2(200);
BEGIN
IF sr_pkg2.c%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('Cursor is open.');
ELSE
DBMS_OUTPUT.PUT_LINE('Cursor is closed; opening now.');
OPEN sr_pkg2.c;
END IF;
FETCH sr_pkg2.c INTO name_;
DBMS_OUTPUT.PUT_LINE('Fetched: ' || name_);
FETCH sr_pkg2.c INTO name_;
DBMS_OUTPUT.PUT_LINE('Fetched: ' || name_);
END FETCH_FROM_CURSOR2;
BEGIN
fetch_from_cursor2;
fetch_from_cursor2;
END;
you can find the original one here:
[http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/packages.htm#BABEBHEG]
the difference lies in the package that is not declared as serially_reusable
and in the table containing one more row
as it was expected the first run of the anonymous block showed the first four rows fetched
leaving the cursor state open but runnning for the second time I found the output kinda curious:
-- first run output
anonymous block completed
Cursor is closed; opening now.
Fetched: John Smith
Fetched: Mary Jones
Cursor is open.
Fetched: Joe Brown
Fetched: Jane White
-- second run output
anonymous block completed
Cursor is open.
Fetched: Brian Moore -- first procedure call
Fetched: Brian Moore -- first procedure call
Cursor is open.
Fetched: -- second procedure call
Fetched: -- second procedure call
In the second anonymous block run the first call to the procedure fetches from the packaged cursor the same row,
the fetch statement seems like not to move forward, even if in the procedure it's called twice.
I would have expected this output:
anonymous block completed
Cursor is open.
Fetched: Brian Moore -- first procedure call
Fetched: -- first procedure call
Cursor is open.
Fetched: -- second procedure call
Fetched: -- second procedure call
any explanation will be appriciated
VERSION
11.2.0.2.0
thanks in advance
A hint:
CREATE OR REPLACE PROCEDURE fetch_from_cursor2 IS
name_ VARCHAR2(200);
BEGIN
IF sr_pkg2.c%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('Cursor is open.');
ELSE
DBMS_OUTPUT.PUT_LINE('Cursor is closed; opening now.');
OPEN sr_pkg2.c;
END IF;
name_ := 'XXXXXXXXXXXXXXXXXXXXXXXXXX';
FETCH sr_pkg2.c INTO name_;
DBMS_OUTPUT.PUT_LINE('Fetched: ' || name_);
name_ := 'XXXXXXXXXXXXXXXXXXXXXXXXXX';
FETCH sr_pkg2.c INTO name_;
DBMS_OUTPUT.PUT_LINE('Fetched: ' || name_);
END FETCH_FROM_CURSOR2;
Procedure created.
SQL> BEGIN
2 fetch_from_cursor2;
3 fetch_from_cursor2;
4 END;
5 /
Cursor is closed; opening now.
Fetched: John Smith
Fetched: Mary Jones
Cursor is open.
Fetched: Joe Brown
Fetched: Jane White
PL/SQL procedure successfully completed.
SQL> /
Cursor is open.
Fetched: Brian Moore
Fetched: XXXXXXXXXXXXXXXXXXXXXXXXXX
Cursor is open.
Fetched: XXXXXXXXXXXXXXXXXXXXXXXXXX
Fetched: XXXXXXXXXXXXXXXXXXXXXXXXXX
PL/SQL procedure successfully completed.
SQL> And a clue: EXIT WHEN sr_pkg2.c%NOTFOUND;
SY.
Similar Messages
-
Can we trace the values in a cursor if we debug the package?
Can we trace the values in a cursor if we debug the package having a cursor?
Does it shows cursor attributes like %rowcount,%notfound,%found etc?
Because i am debugging a pachage , and I am getting the exception.
And its after the fetching of a cursor I am hitting on the exception.
If I click the profilier after I debug, its showing the error ora 1775::looping chain of synonyms.
The scenario is after the fetching of cursor, i am hitting the exception and after debug If i see the profilier I am getting the error 1775::looping chain of synonyms.Firslty, thanks for your time.
I am using the PLSQL developer.
The select command in the cursor picks tha value but when it fetches, it is showing the error.
Any idea what could be the reason.?
FETCH get_notices ----would show ( rowcount =0,%open,first iteration), does that mean cursor is not picking any value?
Because i have checked the select statement and it picks the value. -
Problem with fetch cursor statement
Hi,
I am using FETCH CURSOR statement to fetch the data from a database table with package size. For the fetched records I am doing parallel processing using parallel processing frame work in banking system.
Here the problem is for the first iteration it works fine but when it comes to FETCH NEXT CURSOR in the second iteration , programs gets dumping by saying that 'CURSOR already closed'.
I am not closing the cursor in the program but some how it got closed some where in the standard function module which I used for parallel processing.
I used WITHHOLD also along with FETCH CURSOR but no use. Please let me know how to avoid the cursor to get close.
Below is my code
IF NOT l_tab_product IS INITIAL.
OPEN CURSOR WITH HOLD lv_cursor FOR
SELECT contract_int prodint cn_currency mig_grp
INTO TABLE gt_cont
FROM bca_contract
FOR ALL ENTRIES IN l_tab_product
WHERE prodint = l_tab_product-prodint
AND mig_grp IN s_migrp.
DO.
FETCH NEXT CURSOR lv_cursor
INTO TABLE gt_cont
PACKAGE SIZE lv_size.
IF sy-subrc <> 0.
CLOSE CURSOR lv_cursor.
EXIT.
ELSE.
parallel processing logic
ENDDO.
ENDIF.Using Withhold will not make sure that the cursor will not get closed because of commits.
SAP Doc says
If the addition WITH HOLD is specified, the database cursor is not closed by a database commit executed using Native SQL. The addition does not have an influence, however, on implicit database commits or on any rollbacks which always close the database cursor.
You have to check the part written in your parallel processing logic.
As Brad said please donot dump your old threads like this. -
Invalid Cursor state Exception - Help required
Hi,
I'm having a web page(JSP), which is making use of 3 ResultSet objects. Using the first two, i'll populate two different Drop down list, with values from database(Access) while loading the page for first time.
Now if the user select any value from any (or both) of drop down list and clicks submit, i need to display all values in database, meeting the criteria from first & second drop down list. For this selection, i'm using the third ResultSet variable. While executing the query, i'm sure that 3rd ResultSet is returning some value. But when i try to retrieve the value to a string variable, i'm getting the Invalid cursor state exception.
Throughout the page, i haven't closed any of the ResultSet. When i closed the first and second ResultSets in the third function(where 3rd ResultSet is used), i'm not getting any value. Its returning like ResultSet closed.
Please help me to get this solved. It's very urgent because without this, i cannot proceed further. Please share your ideas.
Thanks in advace for your valuable helpIf you open a new resultset within the same statement, all previously opened will be closed.
Read the API docs, luke. -
Invalid cursor state when trying to insert record
Hi everyone!
I'm using JDBC-ODBC bridge to connect to a mySql database, which works fine. Then I try to insert new records, but this only works for the first record in the table.
When there is already a record in the table, I always get "[Microsoft][ODBC Driver Manager] Invalid cursor state" when calling the updateRow()-method of the result set.
Here is my code: // open db connection
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:TTManager", "xxxx", "xxxx");
// Prepare SQL statement
java.sql.Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet result = stmt.executeQuery("SELECT * FROM Player");
result.moveToInsertRow();Then all fields are filled in this manner: result.updateString("Name", name);And finally the insertRow should be written to the db: result.insertRow();But at this point it gives the mentioned error, including these messages: at sun.jdbc.odbc.JdbcOdbcResultSet.setPos(JdbcOdbcResultSet.java:5272)
at sun.jdbc.odbc.JdbcOdbcResultSet.insertRow(JdbcOdbcResultSet.java:4132)Since I'm very unexperienced with Java, I guess (or hope^^) it's just some stupid beginner's mistake.
Oh, almost forgot to mention: The new record's data doesn't violate any unique-constraints on the table, all fields are explicitely filled and all variable's data types are matching their according field types!
Any help would be appreciated!
reinskiOk, I needed to help myself and this is what I found out:
If the table already contains records, it is not enough to doresult.moveToInsertRow();but I must beresult.last();
result.moveToInsertRow();I didn't find any explanation and even the code examples from the Sun tutorial don't mention this, so I guess it's a bug occurring in my poor IT environment: DB server running mySQL 5.0.0-alpha on a P1-233-MMX w/ 64MB under WinNT4 (hey don't laugh!!^^).
Maybe this information is of use to someone having similar problems...
Greetings!
reinski -
Hi all,
i was using SAPB0 2007A 42Patches, try to use AP Purchase Order and AP Goods Receipt PO together add serial numbers for Item facing this error as below:
[Goods Receipt PO - Rows - Warehouse Code][line: 1], '1).[Microsoft][SQL Native Client]Invalid cursor state 'Serial Numbers for Items' (OSRI)'
[Purchase Order - Rows - Warehouse Code][line: 1], '1).[Microsoft][SQL Native Client]Invalid cursor state 'Serial Numbers for Items' (OSRI)'
Can i have the solution from anyone?
Thank you.
Best Regards,
dannyHi all,
I know the caused of it.
Because i have created triggers on these 2 table and on Serial Table.
But why so strange, i have triggers on it and nothing error like this before this scenario happened.
Cheers,
danny ng -
Hello everyone i am building a database/web page application using Dreamweaver 8 that allows sudents to report computer issues. The submitting works fine it stores all information to the databse my problem now is updating the database to show a problem has been fixed. I can get the website to pull up current records using but when i click on the lik that should redirect the user to the update form which pulls up the record that the user clicked on i get this error:
exception
org.apache.jasper.JasperException: Exception in JSP: /updateIssue.jsp:151
148: <table align="center">
149: <tr valign="baseline">
150: <td nowrap align="right">Cpu:</td>
151: <td><input type="text" name="cpu" value="<%=(((IssueUpdate_data = IssueUpdate.getObject("cpu"))==null || IssueUpdate.wasNull())?"":IssueUpdate_data)%>" size="32">
152: </td>
153: </tr>
154: <tr valign="baseline">
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
javax.servlet.ServletException: [Microsoft][ODBC Driver Manager] Invalid cursor state
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.updateIssue_jsp._jspService(updateIssue_jsp.java:284)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getObject(Unknown Source)
sun.jdbc.odbc.JdbcOdbcResultSet.getObject(Unknown Source)
org.apache.jsp.updateIssue_jsp._jspService(updateIssue_jsp.java:226)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
My code for the page is:
<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" %>
<%@ include file="Connections/db.jsp" %>
<%
// *** Edit Operations: declare variables
// set the form action variable
String MM_editAction = request.getRequestURI();
if (request.getQueryString() != null && request.getQueryString().length() > 0) {
String queryString = request.getQueryString();
String tempStr = "";
for (int i=0; i < queryString.length(); i++) {
if (queryString.charAt(i) == '<') tempStr = tempStr + "<";
else if (queryString.charAt(i) == '>') tempStr = tempStr + ">";
else if (queryString.charAt(i) == '"') tempStr = tempStr + """;
else tempStr = tempStr + queryString.charAt(i);
MM_editAction += "?" + tempStr;
// connection information
String MM_editDriver = null, MM_editConnection = null, MM_editUserName = null, MM_editPassword = null;
// redirect information
String MM_editRedirectUrl = null;
// query string to execute
StringBuffer MM_editQuery = null;
// boolean to abort record edit
boolean MM_abortEdit = false;
// table information
String MM_editTable = null, MM_editColumn = null, MM_recordId = null;
// form field information
String[] MM_fields = null, MM_columns = null;
%>
<%
// *** Update Record: set variables
if (request.getParameter("MM_update") != null &&
request.getParameter("MM_update").toString().equals("form1") &&
request.getParameter("MM_recordId") != null) {
MM_editDriver = MM_db_DRIVER;
MM_editConnection = MM_db_STRING;
MM_editUserName = MM_db_USERNAME;
MM_editPassword = MM_db_PASSWORD;
MM_editTable = "issue";
MM_editColumn = "cpu";
MM_recordId = "'" + request.getParameter("MM_recordId") + "'";
MM_editRedirectUrl = "COBA_home.html";
String MM_fieldsStr = "cpu|value|issue|value|comment|value|issue_Date|value|Fixed|value";
String MM_columnsStr = "cpu|',none,''|issue|',none,''|comment|',none,''|issue_Date|',none,''|Fixed|',none,''";
// create the MM_fields and MM_columns arrays
java.util.StringTokenizer tokens = new java.util.StringTokenizer(MM_fieldsStr,"|");
MM_fields = new String[tokens.countTokens()];
for (int i=0; tokens.hasMoreTokens(); i++) MM_fields[i] = tokens.nextToken();
tokens = new java.util.StringTokenizer(MM_columnsStr,"|");
MM_columns = new String[tokens.countTokens()];
for (int i=0; tokens.hasMoreTokens(); i++) MM_columns[i] = tokens.nextToken();
// set the form values
for (int i=0; i+1 < MM_fields.length; i+=2) {
MM_fields[i+1] = ((request.getParameter(MM_fields)!=null)?(String)request.getParameter(MM_fields[i]):"");
// append the query string to the redirect URL
if (MM_editRedirectUrl.length() != 0 && request.getQueryString() != null) {
MM_editRedirectUrl += ((MM_editRedirectUrl.indexOf('?') == -1)?"?":"&") + request.getQueryString();
%>
<%
// *** Update Record: construct a sql update statement and execute it
if (request.getParameter("MM_update") != null &&
request.getParameter("MM_recordId") != null) {
// create the update sql statement
MM_editQuery = new StringBuffer("update ").append(MM_editTable).append(" set ");
for (int i=0; i+1 < MM_fields.length; i+=2) {
String formVal = MM_fields[i+1];
String elem;
java.util.StringTokenizer tokens = new java.util.StringTokenizer(MM_columns[i+1],",");
String delim = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:"";
String altVal = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:"";
String emptyVal = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:"";
if (formVal.length() == 0) {
formVal = emptyVal;
} else {
if (altVal.length() != 0) {
formVal = altVal;
} else if (delim.compareTo("'") == 0) { // escape quotes
StringBuffer escQuotes = new StringBuffer(formVal);
for (int j=0; j < escQuotes.length(); j++)
if (escQuotes.charAt(j) == '\'') escQuotes.insert(j++,'\'');
formVal = "'" + escQuotes + "'";
} else {
formVal = delim + formVal + delim;
MM_editQuery.append((i!=0)?",":"").append(MM_columns[i]).append(" = ").append(formVal);
MM_editQuery.append(" where ").append(MM_editColumn).append(" = ").append(MM_recordId);
if (!MM_abortEdit) {
// finish the sql and execute it
Driver MM_driver = (Driver)Class.forName(MM_editDriver).newInstance();
Connection MM_connection = DriverManager.getConnection(MM_editConnection,MM_editUserName,MM_editPassword);
PreparedStatement MM_editStatement = MM_connection.prepareStatement(MM_editQuery.toString());
MM_editStatement.executeUpdate();
MM_connection.close();
// redirect with URL parameters
if (MM_editRedirectUrl.length() != 0) {
response.sendRedirect(response.encodeRedirectURL(MM_editRedirectUrl));
return;
%>
<%
String IssueUpdate__MMColParam = "1";
if (request.getParameter("cpu") !=null) {IssueUpdate__MMColParam = (String)request.getParameter("cpu");}
%>
<%
Driver DriverIssueUpdate = (Driver)Class.forName(MM_db_DRIVER).newInstance();
Connection ConnIssueUpdate = DriverManager.getConnection(MM_db_STRING,MM_db_USERNAME,MM_db_PASSWORD);
PreparedStatement StatementIssueUpdate = ConnIssueUpdate.prepareStatement("SELECT * FROM issue WHERE cpu = '" + IssueUpdate__MMColParam + "' ORDER BY Fixed ASC");
ResultSet IssueUpdate = StatementIssueUpdate.executeQuery();
boolean IssueUpdate_isEmpty = !IssueUpdate.next();
boolean IssueUpdate_hasData = !IssueUpdate_isEmpty;
Object IssueUpdate_data;
int IssueUpdate_numRows = 0;
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<form method="post" action="<%=MM_editAction%>" name="form1">
<table align="center">
<tr valign="baseline">
<td nowrap align="right">Cpu:</td>
<td><input type="text" name="cpu" value="<%=(((IssueUpdate_data = IssueUpdate.getObject("cpu"))==null || IssueUpdate.wasNull())?"":IssueUpdate_data)%>" size="32">
</td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Issue:</td>
<td><input type="text" name="issue" value="<%=(((IssueUpdate_data = IssueUpdate.getObject("issue"))==null || IssueUpdate.wasNull())?"":IssueUpdate_data)%>" size="32">
</td>
</tr>
<tr>
<td nowrap align="right" valign="top">Comment:</td>
<td valign="baseline"><textarea name="comment" cols="50" rows="5"><%=(((IssueUpdate_data = IssueUpdate.getObject("comment"))==null || IssueUpdate.wasNull())?"":IssueUpdate_data)%></textarea>
</td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Issue_Date:</td>
<td><input type="text" name="issue_Date" value="<%=(((IssueUpdate_data = IssueUpdate.getObject("issue_Date"))==null || IssueUpdate.wasNull())?"":IssueUpdate_data)%>" size="32">
</td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Fixed:</td>
<td><input type="text" name="Fixed" value="<%=(((IssueUpdate_data = IssueUpdate.getObject("Fixed"))==null || IssueUpdate.wasNull())?"":IssueUpdate_data)%>" size="32">
</td>
</tr>
<tr valign="baseline">
<td nowrap align="right"> </td>
<td><input type="submit" value="Update record">
</td>
</tr>
</table>
<input type="hidden" name="MM_update" value="form1">
<input type="hidden" name="MM_recordId" value="<%=(((IssueUpdate_data = IssueUpdate.getObject("cpu"))==null || IssueUpdate.wasNull())?"":IssueUpdate_data)%>">
</form>
<p> </p>
</body>
</html>
<%
IssueUpdate.close();
StatementIssueUpdate.close();
ConnIssueUpdate.close();
%>
Any idea as to what I have done wrong because I am very confused right now. Thank you so much in advance for any help or adviceI am confused as well.
It would help if your data layer was separate from your display layer.
The error suggests that you are attempting to extract a result from a update. And that won't work with a standard update.
Where that is happening I have no idea. -
Invalid cursor state error while executing the prepared statement
hai friends,
following code showing the invalid cursor state error while executing the second prepared statement.
pls anyone help me
String query = "select * from order_particulars where order_no=" + orderno + " order by sno"; psmt1 = conEntry.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs1 = psmt1.executeQuery(); rs1.last(); intRowCount = rs1.getRow(); particularsdata = new Object[intRowCount][6]; rs1.beforeFirst(); if (intRowCount >= 1) { for (int i = 0; rs1.next(); i++) { particularsdata[0] = i + 1;
particularsdata[i][1] = rs1.getString(3);
particularsdata[i][2] = Double.parseDouble(rs1.getString(4));
rs1.close();
psmt1.close();
query = "SELECT sum(delqty) FROM billdetails,billparticulars WHERE order_no= " + orderno + " and " +
"billdetails.bill_no = billparticulars.bill_no GROUP BY particulars ORDER BY sno";
psmt1 = conEntry.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs1 = psmt1.executeQuery(); //error showing while executing this lineAlso .. Why using arrays instead of collections? Shifting the cursor all the way forth and back to get the count is fairly terrible.
With regard to the problem: either there's a nasty bug in the JDBC driver used, or you actually aren't running the compiled class version of the posted code. -
Need help with **** Invalid Cursor State ****
Hi,
can someone tell me why am i getting this error....
//******java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
Any help is greatly appreciated.....
Thanks in advance.
//***********this is the output on servlet side**************//
Starting service Tomcat-Standalone
Apache Tomcat/4.0.3
Starting service Tomcat-Apache
Apache Tomcat/4.0.3
init
DBServlet init: Start
DataAccessor init: Start
Accessor init: Loading Database Driver: sun.jdbc.odbc.JdbcOdbcDriver
DataAccessor init: Getting a connection to - jdbc:odbc:SCANODBC
username SYSDBA
password masterkey
DataAccessor init: Preparing searchPolicy
DataAccessor init: Prepared policySearch
DataAccessor init: Prepared ssnSearch
DataAccessor init: End
After the myDataAccessor
Database Connection...
in doGet(...)
SSSSSSSGetpolicynumber
In GetPolicyInformation
b05015195
Getting Policy Informaton for = b05015195
okay, building vector for policy
in GetPolicyInformation for = b05015195
starting query... policy Information
finishing query... Policy Information
Inside the while(next) loop
sun.jdbc.odbc.JdbcOdbcResultSet@4db06e
sun.jdbc.odbc.JdbcOdbcResultSet@4db06e
b05015195
policy information constructor with resultset
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6031)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6188)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3266)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:
5398)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:326)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:383)
at viewscreenappletservlet.policyinformation.<init>(policyinformation.ja
va:56)
at viewscreenappletservlet.DatabaseAccessor.getPolicyInformation(Databas
eAccessor.java:145)
at viewscreenappletservlet.Servlet.policyDisplay(Servlet.java:108)
at viewscreenappletservlet.Servlet.doGet(Servlet.java:91)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServl
et.java:446)
at org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java
:180)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:193)
at filters.ExampleFilter.doFilter(ExampleFilter.java:149)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:193)
at filters.ExampleFilter.doFilter(ExampleFilter.java:149)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:566)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica
torBase.java:475)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:
2343)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche
rValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:
468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline
.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcesso
r.java:1012)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.ja
va:1107)
at java.lang.Thread.run(Thread.java:484)
result set closed
1
sending response
Sending policy vector to applet...
Data transmission complete.1) JDBC-ODBC driver is buggy
2) Some drivers (truly speaking most of them) doesn't
support cursors or supports them in a wrong way
Paul -
Hello all,
We have configured JDBC Sender Adapter which fetches around 10K records with poll interval 1hr from DB2 System .
It was working fine,suddenly it started throwing an exception in Adapter Monitoring :
Error during conversion of query result to XML: java.sql.SQLException: Cursor state not valid.
It is not fetching any records.
Without changing any configurations when we tried to fetch to around 1000 records it's working fine.
For 10K records same exception persists
What could be the reason ?How to resolve this issue?
regards
GangaPrasadHello Christophe ,
Trace in VA :::
Date : 05/09/2008
Time : 11:45:57:750
Message : Unexpected error converting database resultset to XML, reason: java.sql.SQLException: Cursor state not valid.
at java.lang.Throwable.<init>(Throwable.java:194)
at java.lang.Exception.<init>(Exception.java:41)
at java.sql.SQLException.<init>(SQLException.java:40)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:389)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:366)
at com.ibm.as400.access.AS400JDBCResultSet.getValue(AS400JDBCResultSet.java:3580)
at com.ibm.as400.access.AS400JDBCResultSet.getString(AS400JDBCResultSet.java:3223)
at sun.reflect.GeneratedMethodAccessor459222074.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:309)
at com.sap.aii.adapter.jdbc.sql.jdbctrace.TraceInvocationHandler.invoke(TraceInvocationHandler.java:45)
at com.sap.aii.adapter.jdbc.sql.jdbctrace.$Proxy254.getString(Unknown Source)
at com.sap.aii.adapter.jdbc.JDBC2XI.convert2XML(JDBC2XI.java:954)
at com.sap.aii.adapter.jdbc.JDBC2XI.invoke(JDBC2XI.java:492)
at com.sap.aii.af.service.scheduler.JobBroker$Worker.run(JobBroker.java:475)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:99)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:119)
Severity : Error
Category : /Applications/ExchangeInfrastructure/AdapterFramework/Services/ADAPTER/ADMIN/JDBC
Location : com.sap.aii.adapter.jdbc.JDBC2XI.convert2XML(ResultSet, ResultSetMetaData)
Application :
Thread : XI JDBC2XI[JDBC_SND_DB2_VehicleReceiving/DB2PRD00/]_170
Datasource : 12428950:/usr/sap/PXI/DVEBMGS01/j2ee/cluster/server0/log/applications/com.sap.xi/xi.log
Message ID : 00145E742794005E0014980B000000BE00044CC763766C4F
Source Name : /Applications/ExchangeInfrastructure/AdapterFramework/Services/ADAPTER/ADMIN/JDBC
Argument Objs : java.sql.SQLException: Cursor state not valid.
at java.lang.Throwable.<init>(Throwable.java:194)
at java.lang.Exception.<init>(Exception.java:41)
at java.sql.SQLException.<init>(SQLException.java:40)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:389)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:366)
at com.ibm.as400.access.AS400JDBCResultSet.getValue(AS400JDBCResultSet.java:3580)
at com.ibm.as400.access.AS400JDBCResultSet.getString(AS400JDBCResultSet.java:3223)
at sun.reflect.GeneratedMethodAccessor459222074.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:309)
at com.sap.aii.adapter.jdbc.sql.jdbctrace.TraceInvocationHandler.invoke(TraceInvocationHandler.java:45)
at com.sap.aii.adapter.jdbc.sql.jdbctrace.$Proxy254.getString(Unknown Source)
at com.sap.aii.adapter.jdbc.JDBC2XI.convert2XML(JDBC2XI.java:954)
at com.sap.aii.adapter.jdbc.JDBC2XI.invoke(JDBC2XI.java:492)
at com.sap.aii.af.service.scheduler.JobBroker$Worker.run(JobBroker.java:475)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:99)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:119)
Arguments : java.sql.SQLException: Cursor state not valid.
at java.lang.Throwable.<init>(Throwable.java:194)
at java.lang.Exception.<init>(Exception.java:41)
at java.sql.SQLException.<init>(SQLException.java:40)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:389)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:366)
at com.ibm.as400.access.AS400JDBCResultSet.getValue(AS400JDBCResultSet.java:3580)
at com.ibm.as400.access.AS400JDBCResultSet.getString(AS400JDBCResultSet.java:3223)
at sun.reflect.GeneratedMethodAccessor459222074.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:309)
at com.sap.aii.adapter.jdbc.sql.jdbctrace.TraceInvocationHandler.invoke(TraceInvocationHandler.java:45)
at com.sap.aii.adapter.jdbc.sql.jdbctrace.$Proxy254.getString(Unknown Source)
at com.sap.aii.adapter.jdbc.JDBC2XI.convert2XML(JDBC2XI.java:954)
at com.sap.aii.adapter.jdbc.JDBC2XI.invoke(JDBC2XI.java:492)
at com.sap.aii.af.service.scheduler.JobBroker$Worker.run(JobBroker.java:475)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:99)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:119)
Dsr Component :
Dsr Transaction : d1f629d01d9b11dd984200145e742794
Dsr User :
Indent : 0
Level : 0
Message Code :
Message Type : 1
Relatives : com.sap.aii.adapter.jdbc.JDBC2XI
Resource Bundlename :
Session : 0
Source : /Applications/ExchangeInfrastructure/AdapterFramework/Services/ADAPTER/ADMIN/JDBC
ThreadObject : XI JDBC2XI[JDBC_SND_DB2_VehicleReceiving/DB2PRD00/]_170
Transaction : SAP J2EE Engine JTA Transaction : [0ffffffbdffffffa6ffffff960086]
User : J2EE_GUEST
Regards
Ganga Prasad -
What is an invalid cursor state exception?
exception caught in webmaster servlet java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
any ideas? this is the first time i've seen this one.For example you tried to read the next record from a result set when you had already read the last record. But you might get better results from a specific question.
-
SQLException, invalid cursor state
Came across the weirdest thing... Suppose i use this statement in a servlet:
ResultSet result = statement.executeQuery("SELECT City FROM Destinations");and the following code in the JSP to which the browser is redirected:
<select name="selectedCity" value="" size="1">
<% ResultSet result = (ResultSet) session.getAttribute("rstCity");
while (result.next()) { %>
<option><%= result.getString(1) %>
<% } %>
</select>This works properly in my case. (Don't think other code is necessary to provide... please tell me you think it is..)
But because result is full of duplicate rows, i want to change the line into:
ResultSet result = statement.executeQuery("SELECT DISTINCT City FROM Destinations");A ServletException and SQLException message in the browser (at index.jsp, not servlet/servletname!) both say [Micrisoft][ODBC Driver Manager]Invalid Cursor State...
Now if i (temporarily) remove the expression <%= result.getString(1) %> in the JSP file, the error no longer appears. Ofcourse the listbox <select> is now filled with about 100 empty <option>s...
I can't locate the problem this way, can't see any logic in this. It seems like by adding DISTINCT in the SQL statement, the JSP file cannot handle the getString function anymore.
Can anyone help me with this invalid cursor state thing?
Thanks!!Peter,
I'm getting the same problem with this:
String sql = "SELECT DISTINCTROW collectedwho FROM steps WHERE status = 'overdue finish' AND escalatedwho = " + util.sqlEsc(username) + " ORDER BY collectedwho";
recordset rs = new recordset();
rs.open(sql);
while (rs.rs.next()) {
accountable = rs.rs.getString("collectedwho");
(recordset is simply my own wrapper for the ResultSet class, which hides the db connection string and saves me rewriting it every time)
What happens is that the loop falls off the end of the resultset but thinks that it hasn't, ie rs.next() returns true, but there's no data when it gets to the getString and it throws an "Invalid cursor state".
Bummer.
I'm using the JDBC:ODBC bridge to an access database, by the way.
I tried changing DISTINCT to to DISTINCTROW which then worked with no errors but of course gave me the wrong results in the ResultSet!
Is this a bug in the bridge, or in the ResultSet class?
Sorry this isn't much help but at least you know you're not the only one!
David -
How open cursor statement works
hi,
OPEN CURSOR [WITH HOLD] dbcur FOR
SELECT result
FROM source
[[FOR ALL ENTRIES IN itab] WHERE sql_cond]
[GROUP BY group] [HAVING group_cond]
[ORDER BY sort_key].
i want to know what does open cursor statement do, how it works, what does dbcur contain?Hi,
dbcur is cursor name gn by u....
Its like select statement....u hav used for all entries right....so if der are 3 records in ur int table and corresponding 3 records ll be fetched in select-endselect query right.....
here in open cursor statement u don hav INTO(destination) right
so after opening cursor......
FETCH NEXT CURSOR dbcur into wa1.
FETCH NEXT CURSOR dbcur into wa2.
FETCH NEXT CURSOR dbcur into wa3.
wa1,wa2,wa3 ll have the 3 records....
close cursor.....................
Cheers,
jose. -
HELP! INVALID CURSOR STATE
i have this simple jsp page that will display a few data from an SQL Database... im just trying to check my connectivity. but everytime i view the page it says "[Microsoft][ODBC SQL Server Driver]Invalid
cursor state'"my JSP environment is
J2EE 1.2.1
JDK 1.3.0_02
BDK 1.1
TOMCAT 3.2.1
SQL Server 2000 Enterprise Edition
Running on Windows 2000 server
Heres my simple code:
<%@ page language = "java" import = "java.sql.*" %>
<html>
<body>
<%
Connection con = null;
try
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:testdsn:, "sa", "");
Statement stmt = con.createStatement();
Resultset rs = stmt.executeQuery("select * from testtable");
while(rs.next());
out.println(rs.getString(1));
out.println(rs.getString(2));
catch(Exception e)
out.println(e.toString());
%>
</body>
</html>
my testtable have 2 columns and 6 rows all in varchar datatype with values:
test 1 | a
test 2 | b
test 3 | c
test 4 | d
test 5 | e
test 6 | f
is there something wrong with the code? with my environment? please help im finishing a site for a school project but i cant seem to make jsp and sql workSee if using PreparedStatement works better for you than Statement. Sometimes it has better manners.
- Saish
"My karma ran over your dogma." - Anon -
Sorry to ask about Invalid Cursor State again...
I am getting this error which is really frustrating because I can't figure out why it is happening.
I am connecting to a csv file using jdbc:odbc Microsoft Text Driver.
I instantiate the ReadFortySite class in the GUI class.I then click on a jList in my main GUI and this passes the selected object to the code below. It works fine the first time but if I try to select another jList element, it throws the Invalid Cursor State error..Any Ideas??
public class ReadFortySite {
private String file;
private String path = null;
private Connection conn = null;
private Statement stmt;
private ResultSet results, col_results;
private ResultSetMetaData rsmd;
private ArrayList test_names,columnHeads;
private Object List_Selection;
/** Creates a new instance of ReadFortySite */
public ReadFortySite(String file) {
this.file = file;
ReadFile();
public void ReadFile()
try{
//path = file.getPath();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// create a connection.
/* NEED 2 TAKE HARD CODED VALUE OF E: OUT!!!! */
conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=E:/;Extensions=csv");
// create a Statement object to execute the query with
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
// Select everything from the specified csv file
results = stmt.executeQuery("SELECT * from ("+file+")");
//ArrayLists used to manipulate and hold test name values
columnHeads = new ArrayList();
// get column heads
rsmd = results.getMetaData();
for ( int i = 4; i <= rsmd.getColumnCount(); i++ ) {
columnHeads.add( rsmd.getColumnName( i ) );
}//end try
catch(Exception e)
System.out.println("Error " + e);
}//end method
public ArrayList getArrayList()
return columnHeads;
public ArrayList getTestValues(Object obj){
ArrayList TestValues = new ArrayList();
try{
List_Selection = obj;
//have an object representing the value selected
//need to get test results associated with that value
for(int i=1;i<rsmd.getColumnCount()+1;i++)
if(obj.equals((Object)rsmd.getColumnName(i)))
while(results.next()){
String vals = results.getString((String)obj);
TestValues.add(vals);
//System.out.println(TestValues.toString());
}//end while
}//end for
}//end try
catch (SQLException sqle)
System.out.println("Error " + sqle);
return TestValues;
}You should use code formatting when you post code, and you should also post the stack trace that you get when you run the code.
/Kaj
Maybe you are looking for
-
How to use the integrated camera in Lenovo THINKPAD X301
Dear All, I would like to know how to use the integrated camera for the THINKPAD X301 LAPTOP? Please help
-
How to find out which validation is failed.
Hi Experts, Here is another problem I am facing. I am getting an exception during record update. com.sap.mdm.commands.CommandException: com.sap.mdm.internal.protocol.manual.ServerException: One or more records failed a validation I am not able to pri
-
How to find list of internal tables while debugging
Hi Experts, I am debugging a block of an ABAP program( User Exit ). Is there any facility to see what are the internal tables, work areas are available for that particular block? Can I see it new debugger? Because I don't know from which internal t
-
How can i find out total no of sunday in the year
Hi Experts, how can i find out total no of sunday's in the particular year. please can any one help how can i do that Regards, Arun
-
How to link to a computational program? (a "C" or "BASIC"}
I am writing an engineering book that has a lot of equations and would like to link to a program that does the computations for the reader so that he does not to perform the complex calculations manualy. Any suggestions?