You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-user@db.apache.org by Francesco Rosa <in...@francescorosa.net> on 2007/10/27 11:52:03 UTC
Error: Invalid cursor state - no current row
Hello,
i have the database with two tables Opzioni, Preventivi.
This is my code;
public class DerbySample {
public static void main(String args[]) {
// esempio collegamento a derby con modifiche
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
String connectionString =
"jdbc:derby:/Users/harlock/Documents/soft/EsempiJava_15/dati;create=false";
Connection con = DriverManager.getConnection(connectionString,
"", "");
String sql = "select * from preventivi where prvID = 1";
ResultSet rsPreventivi =
con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_UPDATABLE).executeQuery(sql);
rsPreventivi.next();
sql = "select * from opzioni";
//----
ResultSet rsOpzioni =
con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY).executeQuery(sql);
while (rsOpzioni.next()) {
System.out.println(rsOpzioni.getString("opzUtente"));
}
rsOpzioni.close();
//----
rsPreventivi.updateString("prvUtente", "fran");
rsPreventivi.updateRow();
rsPreventivi.close();
System.out.println("bye bye");
} catch (Exception ex) {
System.out.println(ex.toString());
}
}
}
Run my sample program i receive the error: Invalid cursor state - no
current row.
If comment the line;
ResultSet rsOpzioni =
con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY).executeQuery(sql);
while (rsOpzioni.next()) {
System.out.println(rsOpzioni.getString("opzUtente"));
}
rsOpzioni.close();
my program work correctly!!!
Why? I don't understand!!!
thans.
Re: Error: Invalid cursor state - no current row
Posted by Knut Anders Hatlen <Kn...@Sun.COM>.
Francesco Rosa <in...@francescorosa.net> writes:
> Hello,
> i have the database with two tables Opzioni, Preventivi.
>
> This is my code;
>
> public class DerbySample {
> public static void main(String args[]) {
> // esempio collegamento a derby con modifiche
> try {
> Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
> String connectionString =
> "jdbc:derby:/Users/harlock/Documents/soft/EsempiJava_15/dati;create=false";
> Connection con = DriverManager.getConnection(connectionString,
> "", "");
> String sql = "select * from preventivi where prvID = 1";
> ResultSet rsPreventivi =
> con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
> ResultSet.CONCUR_UPDATABLE).executeQuery(sql);
> rsPreventivi.next();
> sql = "select * from opzioni";
> //----
> ResultSet rsOpzioni =
> con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
> ResultSet.CONCUR_READ_ONLY).executeQuery(sql);
> while (rsOpzioni.next()) {
> System.out.println(rsOpzioni.getString("opzUtente"));
> }
> rsOpzioni.close();
> //----
> rsPreventivi.updateString("prvUtente", "fran");
> rsPreventivi.updateRow();
> rsPreventivi.close();
> System.out.println("bye bye");
> } catch (Exception ex) {
> System.out.println(ex.toString());
> }
>
> }
> }
>
> Run my sample program i receive the error: Invalid cursor state - no
> current row.
> If comment the line;
> ResultSet rsOpzioni =
> con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
> ResultSet.CONCUR_READ_ONLY).executeQuery(sql);
> while (rsOpzioni.next()) {
> System.out.println(rsOpzioni.getString("opzUtente"));
> }
> rsOpzioni.close();
>
> my program work correctly!!!
>
> Why? I don't understand!!!
Since you are running with auto-commit turned on, rsOpzioni.close() will
commit the open transaction, which means that all locks are released and
rsPreventivi will lose its position. You have a number of options:
1) turn off auto-commit (con.setAutoCommit(false)) and perform commit
explicitly (con.commit())
2) reposition rsPreventivi after rsOpzioni has been closed
3) perform rsPreventivi.updateString()+updateRow() before
rsOpzioni.close()
HTH,
--
Knut Anders