【问题标题】:KDB : Inappropriate type casting for aggregation query resultKDB:聚合查询结果的类型转换不当
【发布时间】:2016-04-14 04:05:46
【问题描述】:

我在 KDB 中运行以下查询来创建表结构并在其中插入数据:-

n:1000000;item:`apple`banana`orange`pear;city:`beijing`chicago`london`paris;tab:([]time:asc n?0D0;n?item;amount:n?100;n?city);

发布后,我运行了一个 Java 程序来使用聚合进行选择查询。代码如下:-

import java.io.IOException;
import java.lang.reflect.Array;
import java.util.logging.Level;
import java.util.logging.Logger;

import kx.c;

public class Aggregate {

    public static class KxTableModel {
        private c.Flip flip;
        public void setFlip(c.Flip data) {
            this.flip = data;
        }

        public int getRowCount() {
            return Array.getLength(flip.y[0]);
        }

        public int getColumnCount() {
            return flip.y.length;
        }

        public Object getValueAt(int rowIndex, int columnIndex) {
            return c.at(flip.y[columnIndex], rowIndex);
        }

        public String getColumnName(int columnIndex) {
            return flip.x[columnIndex];
        }
    };

    public static void main(String[] args) {
        KxTableModel model = new KxTableModel();
        c c = null;
        try {
            c = new c("localhost", 5001,":");
            String query="select sum amount by city from tab";
//          String query="0!select last price by sym from trade where date=last date";
            model.setFlip((c.Flip) c.k(query));
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (c != null) {try{c.close();} catch (IOException ex) {}
          }
        }
        System.out.println(model.getRowCount());
        System.out.println(model.getValueAt(1, 1));

    }
}

上面的代码在执行后给了我以下错误:-

Apr 14, 2016 9:30:10 AM Aggregate main
SEVERE: null
java.lang.ClassCastException: kx.c$Dict cannot be cast to kx.c$Flip
    at Aggregate.main(Aggregate.java:40)
Exception in thread "main" java.lang.NullPointerException
    at Aggregate$KxTableModel.getRowCount(Aggregate.java:17)
    at Aggregate.main(Aggregate.java:47)

【问题讨论】:

    标签: java sql database jdbc kdb


    【解决方案1】:

    您的查询返回一个键控表(因为by city) 您现在可以处理 c.Dict 或在您的选择之前插入 0! 以取消表格的键。

    0!select sum amount by city from tab

    【讨论】:

    • 谢谢hellomichibye。那行得通。但是如何使用 Java 处理 KDB 中的键控表而不取消键控呢?我的意思是,还有其他方法吗?
    • final Object res = c.k(query);if (res instanceof c.Dict) { final c.Dict dict = (c.Dict) res; if ((dict.x instanceof c.Flip) && (dict.y instanceof c.Flip)) { final c.Flip key = (c.Flip) dict.x;最终 c.Flip 数据 = (c.Flip) dict.y; // 做点什么 } }
    【解决方案2】:

    我遇到了同样的错误,当我检查连接详细信息时,我发现我正在查询错误的服务器。确保您连接到正确的服务器。

    【讨论】:

      猜你喜欢
      • 2014-10-22
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2019-12-10
      • 2018-02-07
      相关资源
      最近更新 更多