从抽象类中检索数据

时间:2012-02-22 05:27:02

标签: java class ycsb

我无法访问某些数据。我使用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>());
}

我尝试修改代码,以便我可以读取hashmap的内容。我删除了db.read行并将其替换为

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

然后尝试从kv_hashmap中读取:

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

但是 db.read只返回一个int。 DB是一个公共抽象类,我宁愿不修改它的目的是与各种数据库交谈:

这就是db.read调用的内容:

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

返回,引用javadoc:

  

成功为零,错误时为非零错误代码或“未找到”。

我需要读取kv_hashmap中的值。我不明白为什么我无法访问它的价值。

1 个答案:

答案 0 :(得分:0)

我看了一下DB类的实现,javadoc还说:

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

但是,我接着看了BasicDB延伸DB - 它的身体只是打印出传入的字段。

我建议你做的是打印传递给你的方法的实际具体类DB,看看该类在read方法中实际做了什么,如:

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

然后看一下显示的任何类的read方法 - 如果它没有填充result HashMap(与BasicDB实现一样)那么那里就没什么了阅读