키/값 형식의 테이블이있는 Oracle Berkeley DB Java Edition을 사용하고 있습니다. 중복 키를 삽입하려고하지만 계속 SecondaryIntegrityException이 발생합니다. 오라클에 따르면 setSortedDuplicates()가 true로 설정되면 중복이 허용됩니다. 내 경우에는 작동하지 않습니다. 다음은 key = bob, value = smith가있는 코드입니다. 처음 나는 그것을 실행, 예상대로 실행됩니다. 만약 내가 값 = johnson 만 변경하면, SecondaryIntegrityException을 얻는다. 내가 뭘 잘못하고 있니? 감사.Oracle Berkeley DB Java Edition의 중복 키
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;
}
}
로 변경되는 경우에는, 위의 작품은 문서는 보조 데이터베이스가 "항상 단일 주 데이터베이스와 연관된."고 말한다 기본 데이터베이스가 연결되어 있지 않으면 보조 데이터베이스를 열 수 없습니다. 하나의 기본 데이터베이스와 하나의 보조 데이터베이스가 있습니다. – ms1013
@Matt - 답변을 다시 읽으십시오. "하나 이상"이라고 표시되어 있습니다. 귀하의 의견은 당신이 그것을 "하나 이상의"것으로 잘못 읽었다는 것을 의미합니다. 설명서에서 말하는 것은 보조 데이터베이스를 사용하는 경우 복제본을 가질 수 없다는 것입니다. –