Загрузить CSV-файл в MySQL C ++

0

Я пытаюсь вставить данные в .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(). Есть ли какая-то дополнительная конфигурация, которую мне нужно сделать здесь?

Теги:
csv

1 ответ

0

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

Поэтому вместо "LOAD DATA INFILE 'C:\ProgramData\MySQL..." У вас должен быть "LOAD DATA INFILE 'C:\\ProgramData\\MySQL..."

В противном случае компилятор C++ превратит ваш "\ P" (в начале ProgramData) во что-то и "\ M" (в начале MySQL) во что-то другое, а это значит, что он попытается неправильный путь и, вероятно, из-за этого. Каждая обратная косая черта в вашей строке должна быть экранирована.

Вы также можете захотеть изучить настройку try/catch для сообщений об ошибках MySQL, а затем он скажет вам прямо, что пошло не так.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню