我正在尝试将.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()
时失败。我需要在这里做任何额外的配置吗?
答案 0 :(得分:0)
我猜您需要在SQL字符串中转义反斜杠。
所以代替
"LOAD DATA INFILE 'C:\ProgramData\MySQL..."
你应该有
"LOAD DATA INFILE 'C:\\ProgramData\\MySQL..."
否则,C ++编译器会将您的'\ P'(在ProgramData的开头)转换为其他内容,并将'\ M'(在MySQL的开头)转换为其他内容,这意味着它将尝试错误的路径,可能因此而失败。字符串中的每个反斜杠都必须转义。
您可能还想研究设置MySQL错误报告的try / catch,然后它会直接告诉您出了什么问题。