问题描述
|
如何以下列方式将表从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,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
解决方法
有很多方法可以做到这一点:
从中获取单列
数据库
从数据库中获取奇数列
从数据库中获取整个表
提取单列
在这种方法中,您告诉数据库选择一列。您可以通过遍历结果集来填充单个向量。对每个感兴趣的列重复此操作,对每个列使用不同的向量。
从数据库中获取奇数列
告诉数据库返回您感兴趣的所有列(在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\");
}
}
,假设您有一个名为test的mysql数据库,该数据库具有一个名为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;
}