2012-07-12 49 views
0

只是Soci的另一個問題...我想連接我的testDB,我剛剛創建,但下面的代碼顯示致命錯誤。社會C++(SQL包裝)FATAL:數據庫「testDB」不存在

我這樣做:

PostgreSQL的:

1) CREATE USER robert WITH ENCRYPTED PASSWORD 'pass'; 
2) CREATE DATABASE testDB; 
3) GRANT ALL PRIVILEGES ON DATABASE testDB TO robert; 

我的C++代碼:

#include <iostream> 
#include <soci.h> 
#include <string> 
using std::string; 
using std::cout; 
#include <postgresql/soci-postgresql.h> 

bool connectToDatabase(string databaseName, string user, string password) 
{ 
     try 
    { 
     soci::session sql(soci::postgresql, "dbname=" +databaseName + " user="+user + " password="+password); 
    } 
    catch (soci::postgresql_soci_error const & e) 
    { 
     std::cerr << "PostgreSQL error: " << e.sqlstate() << " " << e.what() << std::endl; 
     return false;   
    } 
    catch (std::exception const & e) 
    { 
     std::cerr << "Some other error: " << e.what() << std::endl; 
     return false; 
     } 
     return true; 
} 

int main(int argc, char **argv) 
{ 
    cout << connectToDatabase("testDB", "robert", "pass"); 

    return 0; 

} 

編譯後,我得到這個:

Some other error: Cannot establish connection to the database. 
FATAL: database "testDB" does not exist 

有什麼不對?

回答

1

改爲連接到數據庫「testdb」。

PostgreSQL中的大小寫摺疊工作方式是將未加引號的標識符轉換爲小寫。因此CREATE DATABASE testDB創建一個名爲「testdb」的數據庫,與CREATE DATABASE "testDB"不同。 (作爲一般性的建議:或者習慣於使用全小寫的標識符,可能在單詞之間有下劃線,或者習慣於始終引用標識符,前者對於PostgreSQL更自然,後者允許你儘管它遵守你的約定)。

+0

非常感謝你!我永遠不會自己想出來!就是這樣,我剛剛用'cout << connectToDatabase(「testdb」,「robert」,「pass」)替換了'cout << connectToDatabase(「testDB」,「robert」,「pass」);''工作,歡呼:) – 2012-07-12 17:55:37