2016-01-30 2 views
0

Я пытаюсь создать простую графическую программу, которая имеет доступ к моей базе данных дерби.Java GUI с базой данных

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); 
    } 
} 

Всякий раз, когда функция вызывается, я получаю

java.sql.SQLException: Недопустимая операция в текущей позиции курсора.

Что случилось с моим синтаксисом? Спасибо :)

EDIT: Полное сообщение об ошибке

31 января 2016 12:16:15 AM database.project.Dbase viewRecord ТЯЖЕЛАЯ (?): Нулевой java.sql.SQLException: Недопустимая операция в текущей позиции курсора. at org.apache.derby.client.am.SQLExceptionFactory.getSQLException (Неизвестный источник) at org.apache.derby.client.am.SqlException.getSQLException (Неизвестный источник) на org.apache.derby.client.am. ClientResultSet.getInt (Неизвестный источник) в базе данных.project.Dbase.viewRecord (Dbase.java:95) в базе данных.project.viewItem.btnViewActionPerformed (viewItem.java:107) в database.project.viewItem.access $ 000 (viewItem.java:6) в database.project.viewItem $ 1.actionPerformed (viewItem.java:39) в javax.swing.AbstractButton.fireActionPerformed (AbstractButton.java:2022) в javax.swing.AbstractButton $ Handler.actionPerformed (AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActio nPerformed (DefaultButtonModel.java:402) на javax.swing.DefaultButtonModel.setPressed (DefaultButtonModel.java:259) на javax.swing.plaf.basic.BasicButtonListener.mouseReleased (BasicButtonListener.java:252) на java.awt. Component.processMouseEvent (Component.java:6535) в javax.swing.JComponent.processMouseEvent (JComponent.java:3324) на java.awt.Component.processEvent (Component.java:6300) на java.awt.Container. processEvent (Container.java:2236) на java.awt.Component.dispatchEventImpl (Component.java:4891) на java.awt.Container.dispatchEventImpl (Container.java:2294) на java.awt.Component.dispatchEvent (Component.java:4713) на java.awt.LightweightDispatcher.retargetMouseE Вентиляционное отверстие (Container.java:4888) на java.awt.LightweightDispatcher.processMouseEvent (Container.java:4525) на java.awt.LightweightDispatcher.dispatchEvent (Container.java:4466) в 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 (собственный метод) at java.security.P rotectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:76) в java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:86) в java.awt.EventQueue $ 4.run (EventQueue.java:731) на Java .awt.EventQueue $ 4.run (EventQueue.java:729) at java.security.AccessController.doPrivileged (Native Method) в java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (ProtectionDomain.java:76) в java.awt.EventQueue.dispatchEvent (EventQueue.java:728) в java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread .java: 201) на java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java:116) в java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:105) в java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java : 101) at java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:93) at java.awt.EventDispatchThread.run (EventDispatchThread.java:82) Вызвано: ERROR XJ121: Недействительная операция при действии в положение курсора. в org.apache.derby.client.am.ClientResultSet.checkForValidCursorPosition (Unknown Source) в org.apache.derby.client.am.ClientResultSet.checkGetterPreconditions (Unknown Source) ... 41 более

+0

1. Сначала избавиться от кода свинга, так как ваша проблема не имеет ничего общего с свинг и все это связано с неверным оператором SQL, и вы захотите упростить свою проблему для его решения. 2. Отправьте свое ** полное сообщение об ошибке **. –

+0

И какая строка выдает исключение? –

+0

sysout stament throws exc. – Satya

ответ

2

Вы должны использовать вызов next.

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

Цитата the documentation

результирующего курсор изначально позиционируется перед первой строкой; первый вызов> следующему методу делает первую строку текущей строкой; второй вызов делает> вторую строку текущей строкой и так далее.

+0

Спасибо. Намного яснее –

+0

Если это решило вашу проблему, отметьте ее как принятую и принесите ее вверх. – DominicEU

+0

Моя репутация слишком низкая. :(Извините, я все еще поддерживал :) :) –

0

Попробуйте использовать next() в while петли и использовать rs не r как этот 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)); 
     } 
+0

Спасибо. Я думал, что вам нужно всего лишь петли, если вам нужно просмотреть несколько записей. Ты много спасибо. –

+0

Ох. Nvm, зафиксировал его. Возникла проблема с инициализацией. Еще раз спасибо. :) –

Смежные вопросы