2013-01-20 100 views
0

我想從我的表中獲取名爲'person'的行。我希望在指標的幫助下做到這一點,以避免在沒有名字的情況下發生異常。這個怎麼做?使用SOCI與soci :: indicators獲取表中的行[C++]

我寫的代碼:

try 
{ 
soci::statement st = (sql.prepare << "SELECT firstname FROM person;", soci::into(r, ind)); 
st.execute(); 

while (st.fetch()) 
{ 
    if(sql.got_data()) 
    { 
     switch(ind) 
     { 
     case soci::i_ok: 
      std::cout << r.get<std::string>(0) << "\n"; 
      break; 
     case soci::i_null: 
      std::cout << "Person has no firstname!\n"; 
      break; 
     } 
    }else 
    { 
     std::cout << "There's no such person!\n"; 
    } 
} 
} 

但它沒有顯示出行,只有當我添加一行:

std::cout << r.get<std::string>(0) << "\n"; 

在我的if語句,才把我看到數據庫firstnames。

回答

1

我認爲你需要使用不soci::row用於此目的,但std::string

//... 
std::string firstname; 
soci::statement st = (sql.prepare << "SELECT firstname FROM person;" 
        , soci::into(firstname, ind)); 

//... 
     case soci::i_ok: 
      std::cout << firstname << std::endl; 
      break; 
//... 
0

如果要查詢整個數據庫的錶行,您只能使用SOCI ::行。由於您只查詢列'firstname',因此您可以直接將其取入字符串中。所以你的代碼看起來像;

soci::indicator ind; 
std::string sFirstName; 
try 
{ 
soci::statement st = (sql.prepare << "SELECT firstname FROM person;", 
    soci::into(sFirstName, ind)); 
st.execute(); 

while (st.fetch()) 
{ 
    switch(ind) 
    { 
     case soci::i_ok: { 
      std::cout << sFirstName << std::endl; 
      break; } 
     case soci::i_null: { 
      std::cout << "Person has no first name!" << std::endl; 
      break; 
     } 
    } 
} 
相關問題