2014-07-15 111 views
0

我是数据库新手,我编写了这个练习程序来测试伯克利BDB。我越来越无法打开环境 - 在我的控制台出现的错误,并说:在Oracle Berkeley DB中打开数据库环境的麻烦

testEnv\_db.001: No such file or directory 
Error opening database environment 
DbEnv::open: No such file or directory 

控制台程序的代码被关在Berkeley DB的交易指南中的示例强基础,这里的的文本编程到错误,在int main()下。

String^ key_allkeys = "_ALLKEYS"; 
String^ key_valcount = "_COUNT"; 

// 1. Print some information to the screen, prompt user to enter path for key-value pair location: 
Console::WriteLine("Oracle Berkeley DB Example Database Creator"); 
Console::WriteLine(); 
Console::WriteLine("Enter the path to the text file of key-value pairs:"); 
String^ kv_path = Console::ReadLine(); 

// 2. Declare initial variables: 
String^ totalkeys; 
int totalval; 

// 3. Open the database: 
u_int32_t env_flags = DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN; 
std::string envHome("testEnv"); 
u_int32_t db_flags = DB_CREATE | DB_AUTO_COMMIT; 
Db *dbp = NULL; 
const char *file_name = "mydb.db"; 
DbEnv myEnv(0); 
try 
{ 
    myEnv.open(envHome.c_str(), env_flags, 0); 
    dbp = new Db(&myEnv, 0); 
    dbp->open(NULL, file_name, NULL, DB_BTREE, db_flags, 0); 
} 
catch(DbException &e) 
{ 
    std::cerr << "Error opening database environment: " << std::endl; 
    std::cerr << e.what() << std::endl; 
    exc_block(); // Block 
    return (EXIT_FAILURE); 
} 

它应该是相当明显的,该计划是围绕try/catch块权失败。我已阅读手册(字面上RTFM),我无法弄清楚 - DB_CREATE标志是为环境和数据库指定的,所以在这里不应该有问题。

任何想法?

回答

0

它可能只是testEnv目录不存在于您运行该程序的目录中?你必须自己创建环境主目录。

此外,您可能希望在打开环境时指定DB_RECOVER。