0

我正在使用带有键/值格式的表的 Oracle Berkeley DB Java 版。我正在尝试插入重复的键,但不断收到 SecondaryIntegrityException。根据 Oracle,如果 setSortedDuplicates() 设置为 true,则允许重复。这在我的情况下不起作用。下面是一些 key=bob, value=smith 的代码。我第一次运行它,它按预期运行。如果我第二次只更改 value=johnson 运行它,我会得到 SecondaryIntegrityException。有什么我做错了吗?谢谢。

String key = "bob";
String value = "smith";

EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true);
envConfig.setTransactional(false);
Environment myDBenvironment = new Environment(new File(filePath), envConfig);


DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setAllowCreate(true);
dbConfig.setTransactional(false);
Database myDatabase = myDBenvironment.openDatabase(null, dbname,
        dbConfig);

// create secondary database
SecondaryConfig mySecConfig = new SecondaryConfig();
mySecConfig.setAllowCreate(true);
mySecConfig.setSortedDuplicates(true);
mySecConfig.setTransactional(false);
mySecConfig.setKeyCreator(new SecondKeyCreator());
SecondaryDatabase mySecondaryDatabase = myDBenvironment
.openSecondaryDatabase(null, secdbname, myDatabase,
        mySecConfig);


DatabaseEntry myKey = new DatabaseEntry(key.getBytes("UTF-8"));

Record mydata = new Record();
mydata.setobjectVal(value);
DatabaseEntry myrecord = new DatabaseEntry();
new RecordTupleBinding().objectToEntry(mydata, myrecord);
myDatabase.put(null, myKey, myrecord);

mySecondaryDatabase.close();
myDatabase.close();
myDBenvironment.close();


public class SecondKeyCreator implements SecondaryKeyCreator{   

@Override
public boolean createSecondaryKey(SecondaryDatabase arg0,
        DatabaseEntry key, DatabaseEntry data, DatabaseEntry secondKey) {
    RecordTupleBinding binding = new RecordTupleBinding();
    Record record = (Record) binding.entryToObject(data);

    try {
        secondKey.setData(data.getData());
    } catch (Exception e) {
        e.printStackTrace();
    }

    return true;
}

}
4

2 回答 2

0

需要并且需要辅助数据库以允许重复。以上工作,如果

secondKey.setData(data.getData());

改为

secondKey.setData(((String)record.getobjectVal()).getBytes());
于 2012-06-16T17:47:48.537 回答
0

尽管我不是该主题的专家,但让我尝试为您提供帮助。

根据 Oracle 文档,“如果一个主数据库要与一个或多个辅助数据库相关联,它可能不会被配置为重复”。你有来自这个数据库的关联吗?如果是这样,这可能是原因。

我希望它有所帮助。

于 2012-06-15T23:57:09.300 回答