c++ - 将 csv 文件加载到 MySQL C++

标签 c++ mysql csv

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

以下是代码,我到目前为止已经尝试过

#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() 时失败。我需要在这里做任何额外的配置吗?

最佳答案

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

所以代替 “加载数据到文件'C:\ProgramData\MySQL...” 你应该有 “加载数据 INFILE 'C:\\ProgramData\\MySQL...”

否则,C++ 编译器会将您的“\P”(在 ProgramData 的开头)转换为其他内容,并将“\M”(在 MySQL 的开头)转换为其他内容,这意味着它将尝试命中错误的道路并可能因此而失败。字符串中的每个反斜杠都需要转义。

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

关于c++ - 将 csv 文件加载到 MySQL C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51197230/

相关文章:

c++ - 为什么我不能在另一个文件中定义内联成员函数?

mysql - H2 DB 的 UNIX_TIMESTAMP 函数等效吗?

Python - 如何使用多个分隔符拆分列值

php - 使用 CURL 从文件头检索最后修改的文件

java - 如何使用准备好的语句和批处理将大型csv导入到mysql中

c++ - "long int", "long long"数据类型

c++ - 通过覆盖加入多个重叠的类?

c++ - 将结构成员传递给函数 C++

php - 如何在 php 中使用 fpdf 打破 mutlicell 中的行?

mysql - Bash:测试命令执行是否成功