2012-02-22 12 views
1

一部のデータへのアクセスに問題があります。私はYCSBを使用して、CassandraやMongoDBなどのさまざまなデータベースと対話しています。抽象クラスからのデータの取得

私が本当に変更できる唯一のクラスは、いくつかの挿入と読み取りを行っている私の "Workload"クラスです。私は、データベースからの読み取りに使用していますメソッドは、クラスである:

public void doRead(DB db) 
{ 
    String keyname = buildKeyName(keynum); 
    System.out.println(keyname); 
    HashSet<String> fields = null; 

    if (!readallfields) 
    { 
     // read a random field 
     String fieldname = "field" + fieldchooser.nextString(); 
     fields = new HashSet<String>(); 
     fields.add(fieldname); 
    } 

db.read(table,keyname,fields,new HashMap<String,ByteIterator>()); 
} 

私はハッシュマップの内容を読み取ることができるように、私はコードを変更しようとしました。

System.out.println(kv_hashmap.get(fields)); 

だけintを返しdb.read:私はその後kv_hashmapから読み取ろうとしましたdb.read行を削除し、

HashMap<String, ByteIterator> kv_hashmap = new HashMap<String, ByteIterator>(); 
db.read(table, keyname, fields, kv_hashmap); 

でそれを置き換えます。 DBは、私はむしろ修正しないでしょうパブリック抽象クラスであり、その目的は、さまざまなデータベースに話をすることです:返す

public abstract int read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result); 

から引用する:

これは、呼び出しをdb.readものですjavadoc:

成功した場合はゼロで、エラーの場合はゼロ以外のエラーコードまたは「見つからない」。

私はkv_hashmapから値を読み取る必要があります。なぜ私はその値にアクセスできないのか分かりません。

+1

ご質問は不明である読み取るために何がある文句を言いません。あなたが達成しようとしていることとそれがなぜ機能していないのかをコードで示してください。 –

+0

ありがとう、私は質問を解決しました。 :) – eggonlegs

+1

read-methodの実装は何をすべきですか?指定されたhashMapにテーブルのフィールドを持つすべてのキーを配置しますか?読み込みの呼び出しの後、あなたはhashmapを介して情報にアクセスしたいのですが、その目的は? –

答えて

0

私は、DBクラスの実装を見ていたとのjavadocは、さらにこう述べています。

@param result A HashMap of field/value pairs for the result 

しかし、私はその後もDBを拡張したBasicDBを見て - と、その本体は、単に渡されたフィールドを出力します。

私はあなたが示唆することはDBがあなたのメソッドに渡される実際の具象クラスを印刷し、そのクラスが実際にreadメソッドの内部でやっているものを参照してください、のようなものです

System.out.println(Test.class.getName()); 

が続いて示されているものは何でも、クラスのread方法を見てみましょう - そのは、(BasicDB実装のように)result HashMapを移入されていない場合、あなたは

関連する問題