Соединение с C ++ SQL Server, а затем чтение таблицы определенным образом - PullRequest
1 голос
/ 26 мая 2011

Как прочитать таблицу из SQL Server 2008 в вектор в C ++ следующим образом:

Таблица SQL TABLE 2008

1att 2att 3att 4att 5att 6att 7att ... attn
--------------------------------------------
565  526  472  527  483  529  476  470  502
497  491  483  488  488  483  496  515  491
467  516  480  477  494  497  478  519  471
488  466  547  498  477  466  475  480  516

Взять все нечетныестолбец в единственный вектор ...

 array[565, 497, 467, 488,  //1att column 
       472, 483, 480, 547,  //3att column
       483, 488, 494, 477,  //5att column
       ...
       502, 491, 471, 516,  //Last odd att column
       ]

Я использую:

#include <vector>
size_t size = 10;                //HOW TO GET THE SIZE
std::vector<int> array(size);    // make room for ,
                                 // and initialize them to 0

for(int i=0; i<size; ++i){
    array[i] = i;
}
...

Так что моя главная проблема заключается в том, как связать c++ with SQL, а затем прочитать таблицу в вектор... я пользуюсь Visual Studio 2008

Ответы [ 2 ]

1 голос
/ 31 декабря 2013

Если у вас есть база данных mysql с именем test с таблицей с именем Persons со столбцом с именем PersonId

   #include <cppconn/driver.h>
   #include <cppconn/exception.h>
   #include <cppconn/resultset.h>
   #include <cppconn/statement.h>
   #pragma comment(lib,"mysqlcppconn.lib")
   int _tmain(int argc, _TCHAR* argv[])
   {
    // create a connection
    sql::Driver* sql::Driver *driver = get_driver_instance();
    sql::Connection* con = driver->connect("tcp://127.0.0.1:3306", "user", "password");

    // get database
    con->setSchema("test");

    // create query
    sql::Statement* stmt = con->createStatement();
    sql::ResultSet* res = stmt->executeQuery("SELECT * from Persons");

    // parse result
    while (res->next()) {
        std::cout << res->getString("PersonId") << std::endl;
    }

    //cleanup
    delete res;
    delete stmt;
    delete con;

    return 0;
}
1 голос
/ 27 мая 2011

Есть много способов сделать это:

  1. Извлечение отдельных столбцов из базы данных
  2. Извлечение нечетных столбцов из базы данных
  3. Извлечение всей таблицы из базы данных

Извлечение отдельных столбцов

В этом методе вы указываете базе данных выбрать один столбец. Вы заполняете один вектор, повторяя набор результатов . Повторите эти действия для каждого интересующего вас столбца, используя разные векторы для каждого столбца.

Извлечение нечетных столбцов из базы данных

Скажите базе данных вернуть все интересующие вас столбцы (используйте много столбцов в операторе SELECT). Прочитать запись из набора результатов . Поместите значения добавления из полей в соответствующие векторы. Повторите чтение и извлечение для каждой записи в наборе результатов.

Извлечение всей таблицы из базы данных.

аналогично вышеуказанному. Скажите базе данных, чтобы получить все столбцы. Пока существует запись набора результатов , скопируйте значения из заинтересованных полей в соответствующие векторы.

Последний способ может быть самым быстрым, поскольку база данных возвращает строки из таблицы без фильтрации. Другие методы требуют, чтобы база данных создала новый набор результатов записей, фильтруя из существующей таблицы. Самый быстрый алгоритм получается при профилировании.

Редактировать 1: пример кода

Я не использую SQL Server 2008, но MySQL. Так что этот код не будет работать именно для ваших целей.

const char * select_statement[] =
"SELECT 1att, 3att, 5att, 7att, 9att\n"
"FROM data_table;\n";

Result_Set_Type * p_result_set = 0;
p_result_set = database.execute_query(select_statement);
if (p_result_set)
{
    while (p_result_set->next())
    {
        att1_vector.push_back(p_result_set->get_value("1att");
        att3_vector.push_back(p_result_set->get_value("3att");
        att5_vector.push_back(p_result_set->get_value("5att");
        att7_vector.push_back(p_result_set->get_value("7att");
        att9_vector.push_back(p_result_set->get_value("9att");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...