2012-07-11 99 views
0

當我想出如何編譯一個簡單的程序時,現在我有其他問題了......我安裝了PostgreSQL並創建了數據庫和表格:SOCI(SQL C++ wrapper) - PostgreSQL不執行命令(?)

1)createdb testDB 2)創建表城市(city varchar(80),location varchar(80));

而且我還是很簡單的程序:

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

int main(int argc, char **argv) 
{ 
    try 
    { 
     soci::session sql(soci::postgresql, "dbname=testDB"); 

    string row = ""; 
    sql << "select * from cities;", soci::into(row); 

    sql << "insert into cities values('London', 'UK')"; 

    sql << "select * from cities;", soci::into(row); 
    cout << row << "\n"; 
    } 
    catch (soci::postgresql_soci_error const & e) 
    { 
     std::cerr << "PostgreSQL error: " << e.sqlstate() << " " << e.what() << std::endl; 
    } 
    catch (std::exception const & e) 
    { 
     std::cerr << "Some other error: " << e.what() << std::endl; 
    } 
    return 0; 

} 

這段代碼顯示我的只有我已經有行我testdb中,不顯示我剛剛插入的行。例如:在我的TESTDB,在表中的城市,我有:

波蘭華沙 德國柏林 法國巴黎

和上面的代碼顯示了我:

波蘭華沙

但未顯示:

德國柏林 法國巴黎 英國倫敦

請幫助:(

+1

如何在第二次選擇之前提交? – ForEveR 2012-07-11 15:31:42

+0

@ForEveR:嗯,這段代碼:http://pastie.org/private/y89269ea8u3vhif0m1adcw顯示我'華沙'兩次...看一看:http://pastie.org/private/i1ejnzyenmvwgvjios2ja – 2012-07-11 15:40:23

+0

@ForEveR:geez , 謝謝哥們 ! ^^它完美的工作:D我剛剛在'sql <<「插入到城市值('London','UK')」;'並且它現在正在工作:)中添加'sql.commit();' – 2012-07-11 15:50:52

回答

2

所以,加入後提交sql << "insert into cities values ('London', 'UK')"; 解決這個問題。