java.sql.SQLException:没有名为的列:

时间:2014-02-14 03:07:23

标签: java sql derby

我正在使用Netbeans IDE开发桌面Java App。我有一个嵌入式Derby数据库,它有几个表。所有表都在APP模式中。我遇到的问题是我正在向DB提出的查询是否带有上述异常。我知道该表存在,如果我从编辑器内部运行完全相同的SQL查询,它将按预期运行。我正在寻找有关问题的帮助,但更多的是寻求帮助,以解决如何解决这样的问题。我附加了一些代码和堆栈跟踪。如果有帮助,请不要犹豫,询问更多信息

        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

1 个答案:

答案 0 :(得分:1)

There is no column named: KEY_ID

而不是使用列名检索

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

尝试使用索引检索:

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

要进行问题排查,请显示rs中的所有值,然后查看您所需的输出(密钥ID)是否存在。