首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将csv文件加载到MySQL C++

将csv文件加载到MySQL C++
EN

Stack Overflow用户
提问于 2018-07-06 01:46:00
回答 1查看 532关注 0票数 0

我正在尝试在MySQL中插入.txt文件中的数据。

以下是我到目前为止尝试过的代码

代码语言:javascript
复制
#include <stdlib.h>
#include <iostream>

#include <chrono>


#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>
#define HOST "localhost"
#define USER "root"
#define PASS "admin"
#define DB "test_index"
using namespace std;
int main(int argc, const char **argv)
{
    const string url = HOST;
    const string user = USER;
    const string pass = PASS;
    const string database = DB;

    sql::Driver *driver = NULL; 
    sql::Connection *con = NULL;
    //sql::Statement *stmt;
    sql::ResultSet *res = NULL;

    /* Create a connection */
    driver = get_driver_instance();
    con = driver->connect("tcp://127.0.0.1:3306", "root", "admin");
    /* Connect to the MySQL test database */
    con->setSchema("test_index");

    sql::PreparedStatement *prep_stmt = NULL;
    prep_stmt = con->prepareStatement("LOAD DATA INFILE 'C:\ProgramData\MySQL\MySQL Server 8.0\Data\test_index\data.txt' INTO TABLE dataload_file_raw fields terminated by '\t'");
    bool ret = prep_stmt->execute();
    cout << "The data is inserted" << ret << endl;
    delete res;
    delete prep_stmt;

    con->close();
    return 0;
}

程序在尝试执行prep_stmt->execute()时失败。这里还需要做什么额外的配置吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-06 01:54:03

我猜您需要转义SQL字符串中的反斜杠。

所以你应该用"LOAD DATA INFILE 'C:\\ProgramData\\MySQL..."代替"LOAD DATA INFILE 'C:\ProgramData\MySQL..."

否则,C++编译器将把'\P‘(在ProgramData的开头)和'\M’(在MySQL的开头)变成其他东西,这意味着它将试图找到错误的路径,并可能因此失败。字符串中的每个反斜杠都需要转义。

您可能还想研究一下为MySQL错误报告设置try/catch,然后它会直接告诉您哪里出了问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51197230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档