0

I'm trying to create a simple GUI program that has an access to my derby database.

public void viewRecord(int id)
{

    try{
        GET_RECORD = "SELECT * FROM record where id = ?";

        s = c.prepareStatement(GET_RECORD);
        s.setInt(1, id);
        r = s.executeQuery();
        rs = r.getMetaData();

        System.out.printf("%-15d%-15s%-15d%-15s%-15s",r.getInt(1), r.getString(2), r.getInt(3),r.getString(4),r.getString(5));




    }catch (SQLException ex) {
        java.util.logging.Logger.getLogger(Dbase.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Whenever the function is called, I get

java.sql.SQLException: Invalid operation at current cursor position.

What's wrong with my syntax? Thank you :)

EDIT: Full error message(?)

Jan 31, 2016 12:16:15 AM database.project.Dbase viewRecord SEVERE: null java.sql.SQLException: Invalid operation at current cursor position. at org.apache.derby.client.am.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) at org.apache.derby.client.am.ClientResultSet.getInt(Unknown Source) at database.project.Dbase.viewRecord(Dbase.java:95) at database.project.viewItem.btnViewActionPerformed(viewItem.java:107) at database.project.viewItem.access$000(viewItem.java:6) at database.project.viewItem$1.actionPerformed(viewItem.java:39) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6535) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6300) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4891) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4713) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2750) at java.awt.Component.dispatchEvent(Component.java:4713) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: ERROR XJ121: Invalid operation at current cursor position. at org.apache.derby.client.am.ClientResultSet.checkForValidCursorPosition(Unknown Source) at org.apache.derby.client.am.ClientResultSet.checkGetterPreconditions(Unknown Source) ... 41 more

3
  • 1. First get rid of the Swing code since your problem has nothing to do with Swing and all to do with invalid SQL statement and you will want to simplify your problem to solve it. 2. Post your full error message. Commented Jan 30, 2016 at 16:15
  • Also which line throws the exception? Commented Jan 30, 2016 at 16:15
  • sysout stament throws exc. Commented Jan 30, 2016 at 16:16

2 Answers 2

2

You have to use the next call.

ResultSet rs = s.executeQuery();
if (rs.next()) {
    rs.getMetaData()...
}

Quote from the documentation

A ResultSet cursor is initially positioned before the first row; the first call >to the method next makes the first row the current row; the second call makes >the second row the current row, and so on.

Sign up to request clarification or add additional context in comments.

1 Comment

My reputation is too low. :( Sorry. I still upvoted though :)
0

Try to use next() into while loop and use rs not r like this rs.getInt(1)...:

 while(rs.next()){
  rs = r.getMetaData();
  System.out.printf("%-15d%-15s%-15d%-15s%-15s",rs.getInt(1), rs.getString(2), rs.getInt(3),rs.getString(4),rs.getString(5));
      }

2 Comments

Thanks. I thought that you only need to loop if you need to view multiple records. A thousand thank yous.
Oh. Nvm, fixed it. Had a problem with the initialization. Thank you again. :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.