Pregunta

I am using Netbeans IDE to develop a desktop Java App. I have an embedded Derby database which has a few tables. All of the tables are in the APP schema. The problem I am having is that a query I am making to the DB is coming back with the above exception. I know the table exists and if I run the exact same SQL query from inside the editor it functions as expected. I am looking for help with the problem but more so looking for help as to how you would troubleshoot a problem like this. I have attached some code and the stack trace. Please don't hesitate to ask for more info if it will help

        public static void doKeywordListDisplayLogic() {

    try {
        SimpleQuery keywordIdQuery = new SimpleQuery();
        keywordIdQuery.setSelectExpressionList("*");
        keywordIdQuery.setDataSource("KEYWORD_LOOKUP");
        keywordIdQuery.setWherePredicates("SDS_NUMBER");
        keywordIdQuery.setComparisonOperator("=");
        keywordIdQuery.setQueryPredicate(selectedSdsNumber);//selectedSdsNumber comes from a previous query and table row selection.
        keywordIdQuery.simpleQuery();

        String keyId = rs.getString("KEY_ID");
        System.out.println(keyId);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

    public void simpleQuery() {

    try {
        conn = DbCommunication.JavaConnect.ConnectDb();
        String dbQuery = "SELECT ".concat(selectExpressionList).concat(" FROM ").concat(dataSource).concat(" WHERE ").concat(wherePredicates).concat(" ").concat(comparisonOperator).concat(" ").concat(queryPredicate);
        System.out.println(dbQuery);

        PreparedStatement pst = conn.prepareStatement(dbQuery);

        rs = pst.executeQuery();
    } catch (Exception e) {
        e.printStackTrace(System.out);
        JOptionPane.showMessageDialog(null, e);
    }
}

***THE SELECT SQL QUERY BELOW IS THE FINAL STRING SUBMITTED TO THE DB***

SELECT * FROM LOCATION_LOOKUP WHERE SDS_NUMBER = 998

java.sql.SQLException: There is no column named: KEY_ID.  
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
at org.apache.derby.client.am.ResultSet.getString(Unknown Source)
at RecordHandling.PopulateRecord.doKeywordListDisplayLogic(PopulateRecord.java:264)
at RecordHandling.PopulateRecord.doRowRetrieval(PopulateRecord.java:202)
at Gui.mainFrame.jButton7ActionPerformed(mainFrame.java:717)
at Gui.mainFrame.access$400(mainFrame.java:25)
at Gui.mainFrame$5.actionPerformed(mainFrame.java:232)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
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:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: org.apache.derby.client.am.SqlException: There is no column named: KEY_ID.  
at org.apache.derby.client.am.ColumnMetaData.findColumnX(Unknown Source)
at org.apache.derby.client.am.ResultSet.findColumnX(Unknown Source)
... 42 more
¿Fue útil?

Solución

There is no column named: KEY_ID

Instead of retrieving using column name,

    String keyId = rs.getString("KEY_ID");

try retrieve using index:

    String keyId = rs.getString(indexOfKeyId);//if key_id is at column 2 in table, then  rs.getString(2) 

To troubleshoot, display all value from rs, and see if your desired output(key id) is there.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top