C ,MySQL API加载数据本地
c++ ,Mysql API LOAD DATA LOCAL
我需要使用mysql_query("加载数据local"(将数据加载到远程数据库。数据的格式为:
460022103337063 8615210477725
,但不幸的是,从文件加载时总会有核心。客户端库是MySQL-Connector-C-6.0.2-linux-sles10-x86.tar.gz,它是dev.mysql.com/download的最新版本。我们将使用libmysql.so.16.0.0。我的代码如下:
m_pMySQL = mysql_init(NULL);
if(!m_pMySQL)
{
A7C_LOG_ERROR (logCat, "Can not init mysql!");
return STATUS_ERROR;
}
if(0 != mysql_options(m_pMySQL, MYSQL_OPT_LOCAL_INFILE, 0))
{
A7C_LOG_ERROR (logCat, "Can not set mysql to local infile !");
}
if(!mysql_real_connect(m_pMySQL,
m_host.c_str(),
m_username.c_str(),
m_password.c_str(),
m_dbname.c_str(),
m_port,
NULL,
//0))
CLIENT_MULTI_RESULTS|CLIENT_LOCAL_FILES))
{
A7C_LOG_ERROR (logCat, "Can not connect mysql server. ERROR: "<<mysql_error(m_pMySQL));
return STATUS_ERROR;
}
string load("LOAD DATA LOCAL INFILE '/var/tmp/TDR_HTU1_TID01' IGNORE INTO TABLE LOOKUP");
if(mysql_query(m_pMySQL, load.c_str()))
{
A7C_LOG_ERROR (logCat, "Failed to load. Statement: "
<<load<<". Error:"<<mysql_error(m_pMySQL));
return STATUS_ERROR;
}
gdb的核心信息:
> Program terminated with signal 11, Segmentation fault.
> #0 0xf7b362d1 in my_read (Filedes=18,
> Buffer=0xf3645a40 "460001191124402t8613611226646n460027014803029t8618701483175n460028101539830t8615810184408n460020264337590t8613426218170n460022102200877t8615210220922n460023100016582t8615010067740n460021537608606t8615"...,
> Count=8192, MyFlags=<value optimized out>) at
> /export/home2/tmp/cteam/bs/connector-c/src/mysql-connector-c-6.0.2/mysys/my_read.c:55
> 55
> /export/home2/tmp/cteam/bs/connector-c/src/mysql-connector-c-6.0.2/mysys/my_read.c:
> No such file or directory.
> in /export/home2/tmp/cteam/bs/connector-c/src/mysql-connector-c-6.0.2/mysys/my_read.c
> (gdb) where
> #0 0xf7b362d1 in my_read (Filedes=18,
> Buffer=0xf3645a40 "460001191124402t8613611226646n460027014803029t8618701483175n460028101539830t8615810184408n460020264337590t8613426218170n460022102200877t8615210220922n460023100016582t8615010067740n460021537608606t8615"...,
> Count=8192, MyFlags=<value optimized out>) at
> /export/home2/tmp/cteam/bs/connector-c/src/mysql-connector-c-6.0.2/mysys/my_read.c:55
> #1 0xf7ac513d in default_local_infile_read (ptr=0xf3d59190,
> buf=0xf3645a40 "460001191124402t8613611226646n460027014803029t8618701483175n460028101539830t8615810184408n460020264337590t8613426218170n460022102200877t8615210220922n460023100016582t8615010067740n460021537608606t8615"...,
> buf_len=8192) at
> /export/home2/tmp/cteam/bs/connector-c/src/mysql-connector-c-6.0.2/libmysql/libmysql.c:693
> #2 0xf7ac5337 in handle_local_infile (mysql=0x80aa6c0, net_filename=0x80add11 "/var/tmp/TDR_HTU1_TID01") at
> /export/home2/tmp/cteam/bs/connector-c/src/mysql-connector-c-6.0.2/libmysql/libmysql.c:577
> #3 0xf7ac0532 in cli_read_query_result (mysql=0x80aa6c0) at /export/home2/tmp/cteam/bs/connector-c/src/mysql-connector-c-6.0.2/libmysql/client.c:2867
> #4 0xf7abcc04 in mysql_real_query (mysql=0x80aa6c0, query=0x807c2d4 "LOAD DATA LOCAL INFILE '/var/tmp/TDR_HTU1_TID01' IGNORE INTO TABLE
> LOOKUP", length=73)
> at /export/home2/tmp/cteam/bs/connector-c/src/mysql-connector-c-6.0.2/libmysql/client.c:2912
> #5 0xf7ac4f75 in mysql_query (mysql=0x80aa6c0, query=0x807c2d4 "LOAD DATA LOCAL INFILE '/var/tmp/TDR_HTU1_TID01' IGNORE INTO TABLE LOOKUP")
> at /export/home2/tmp/cteam/bs/connector-c/src/mysql-connector-c-6.0.2/libmysql/libmysql.c:790
如果我更改为MySQL的命令行客户端,则可以很好地工作。这阻止了我们的项目。请帮助!
需要更改libmysqlclient版本,它将在libmysqlclient.so.16版本中使用。它将在libmysqlclient.so.18版本中使用。
相关文章:
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 有效地将数据加载到 std::vector 中<char>
- C++WIN32-将RTF数据加载到Rich Edit控件
- 增强序列化,按基类型加载存档类会产生错误的数据
- 将数据从 c++ 加载到 QML Scatter3d 项
- 如何将训练数据从UCI加载到OpenCV?
- 将数据保存在C++中,从 Python 加载 - 推荐的数据格式
- 加载并从文件C 中加载大量的结构化数据
- 使用ifstream从DAT文件加载数据
- 将数据预加载到RAM中进行快速交易
- 从 CSV 文件读取并尝试将数据加载到由结构组成的矢量中
- 编译器优化如何影响数据加载速度
- ATL ActiveX DLL 作为映射类型图像和数据加载了两次
- 将游戏数据加载到没有全局变量的池中
- 如何从原始数据加载 devIL 映像
- libxml-从原始数据加载xmlDoc
- 将数据加载到内存中以获得更快的响应
- 将位图数据加载到OpenGL纹理中的问题
- 将大量二进制数据加载到RAM中
- 用Qt从原始数据加载图像