QSqlError("21", "Unable to execute statement", "out of memory")

当在C++中使用MySQL插入结构体数据时出现 `QSQLError` 报错 `unable to execute statement, no such table`,这表明在执行插入语句时,MySQL数据库中不存在指定的表。以下是一些解决办法: #### 检查表名是否正确 确保在插入语句中使用的表名与数据库中实际存在的表名完全一致,包括大小写(如果数据库区分大小写)。例如,插入语句如下: ```cpp std::string insertQuery = "INSERT INTO girls_table (id, pic) VALUES (1, 'some_pic_data')"; ``` 这里的 `girls_table` 必须是数据库中真实存在的表名。 #### 检查数据库连接 确保连接的数据库是包含目标表的数据库。在连接数据库时,需要指定正确的数据库名,示例代码如下: ```cpp MYSQL *conn; conn = mysql_init(NULL); if (conn == NULL) { std::cerr << "mysql_init() failed" << std::endl; return 1; } if (mysql_real_connect(conn, "localhost", "user", "password", "database_name", 0, NULL, 0) == NULL) { std::cerr << "mysql_real_connect() failed" << std::endl; mysql_close(conn); return 1; } ``` 其中,`database_name` 必须是包含目标表的数据库名。 #### 创建缺失的表 如果确认表确实不存在,可以使用SQL语句在数据库中创建该表。示例代码如下: ```cpp std::string createTableQuery = "CREATE TABLE girls_table (id INT, pic BLOB)"; if (mysql_query(conn, createTableQuery.c_str()) != 0) { std::cerr << "mysql_query() failed: " << mysql_error(conn) << std::endl; } ``` #### 完整示例代码 ```cpp #include <mysql/mysql.h> #include <iostream> #include <string> struct st_girls{ long id; char pic[100000]; unsigned long picsize; }; int main() { MYSQL *conn; conn = mysql_init(NULL); if (conn == NULL) { std::cerr << "mysql_init() failed" << std::endl; return 1; } if (mysql_real_connect(conn, "localhost", "user", "password", "database_name", 0, NULL, 0) == NULL) { std::cerr << "mysql_real_connect() failed" << std::endl; mysql_close(conn); return 1; } // 创建表 std::string createTableQuery = "CREATE TABLE IF NOT EXISTS girls_table (id INT, pic BLOB)"; if (mysql_query(conn, createTableQuery.c_str()) != 0) { std::cerr << "mysql_query() failed: " << mysql_error(conn) << std::endl; } struct st_girls stgirls; stgirls.id = 1; stgirls.picsize = 10; std::string insertQuery = "INSERT INTO girls_table (id, pic) VALUES ("; insertQuery += std::to_string(stgirls.id) + ", "; insertQuery += "'" + std::string(stgirls.pic, stgirls.picsize) + "')"; if (mysql_query(conn, insertQuery.c_str()) != 0) { std::cerr << "mysql_query() failed: " << mysql_error(conn) << std::endl; } mysql_close(conn); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值