2016-04-14 7 views
1

のための不適切な型キャスト私はテーブルstrucruteを作成し、その中にデータを挿入するためにKDBで次のクエリを実行しました: -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) 

答えて

3

あなたのクエリが(理由by cityの)キー付きテーブルを返し あなたができるようになりましいずれかc.Dictを処理するか、0!を挿入してから、テーブルのキーを解除してください。

0!select sum amount by city from tab

+1

ありがとうhellomichibye。それはうまくいった。しかし、Javaを使用してKDBのキー付きテーブルを処理するにはどうすればいいですか?他の方法もありますか? –

+1

finalオブジェクトres = c.k(クエリ); if(res instanceof c.Dict){ \t \t \t final c.Dict dict =(c.Dict)res; \t \t \t IF(c.Flipのinstanceof(dict.x)&& c.Flipのinstanceof(dict.y)){ \t \t \t \t最終c.Flipキー=(c.Flip)dict.x。 \t \t \t \t final c.Flip data =(c.Flip)dict.y; \t \t \t \tは//何かを \t \t \t} \t \t} – hellomichibye