5

我在将一些值插入数据库时​​遇到问题。数据库名称是用户,表是英雄。我正在开发一些以学习为目的的mmorpg游戏。

这是有效的mysql代码

INSERT INTO heroes (HeroID,Strenght, Dexterity, Vitality, Wisdom, Inteligence, Luck, Name, Level, XP) VALUES (NULL,  17, 13, 17, 15, 9, 8, 'works', 4, 3750);

但是当我通过 mysql++ 从 c++ 尝试时,我得到了错误。

代码:

#include <mysql++/mysql++.h>

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
// Connect to the database.
mysqlpp::Connection conn(false);

if (conn.connect("users", "localhost",
        "root", "toor")) 
{

    mysqlpp::Query query = conn.query();
   query << "INSERT INTO heroes" <<
    "VALUES (NULL, 17, 13, 17, 15, 9, 8, doSomething,3, 3260);";

    query.execute();
    if (mysqlpp::StoreQueryResult res = query.store()) 
    {
     // nothing to do here
    }

    else 
    {
        cerr << "Failed to get item list: " << query.error() << endl;
        return 2;
    }

    return 0;
}

   else 
    {
    cerr << "DB connection failed: " << conn.error() << endl;
    return 1;
    }
}

我得到的错误是:无法获取项目列表;您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'NULL, 17, 13, 17, 15, 9, 8, doSOthing,3, 3260)' 附近使用正确的语法

ps我发送NULL是因为该字段是自动递增的(用于ID)我尝试了几乎所有可能的替代方法,例如添加'',分离等等。有人可以帮我处理这行代码吗,因为我找不到可以帮助解决这个问题的好教程。

提前致谢

4

4 回答 4

5

您是否尝试在字符串中添加空格?

query << "INSERT INTO heroes " <<
    "VALUES (NULL, 17, 13, 17, 15, 9, 8, 'doSomething', 3, 3260);";

此外,正如hmjd所指出的,doSomething需要引用,例如'doSomething'.

于 2014-02-27T17:23:25.517 回答
5

字符串doSomething需要引用:

query << "INSERT INTO heroes "
      << "VALUES (NULL, 17, 13, 17, 15, 9, 8, 'doSomething', 3, 3260);";

正如Streppel所指出的,在heroes和之间需要一个空格VALUES

于 2014-02-27T17:23:40.027 回答
2

如果您的字段是自动递增的,请不要在查询中提及它,就是这样!

但是你需要命名插入查询中的所有字段,这实际上是一个最佳实践!

query << "INSERT INTO heroes (fieldName1,fieldName2,...) " <<
"VALUES (17, 13, 17, 15, 9, 8, doSomething,3, 3260);";

其中 fieldname1 是紧随 id 字段之后的第一个字段(或实际上任何其他字段,您可以使用任何您希望的顺序)。

于 2014-02-27T17:24:30.890 回答
0

您可以创建一个标题并将其粘贴进去。我将使用 table1.h

#include <mysql++.h>
#include <ssqls.h>
#include <vector>       

    //you may get some weird underlines but don't panic, have some vitality.
    sql_create_10(heroes, 1, 10,
            mysqlpp::sql_int, HeroId, mysqlpp::sql_int,
            Strenght, mysqlpp::sql_int, Dexterity, mysqlpp::sql_int, Vitality,
            mysqlpp::sql_int, Wisdom, mysqlpp::sql_int, Inteligence,
            mysqlpp::sql_int, Luck, mysqlpp::sql_varchar, Name, mysqlpp::sql_int,
            Level, mysqlpp::sql_bigint, Xp)
            //if bigint doesn't work for you u can use just int.

然后在 main 方法中粘贴这个

    //connect to database
mysqlpp::Connection conn(false);
try{
    conn.connect("users", "localhost", "j0y57/Qxx", "rootsman");

    heroes row(0, 17, 13, 17, 15, 9, 8, "doSomething", 3, 3260 );
    mysqlpp::Query query = conn.query();
    query.insert(row);
    query.execute();

} catch (const mysqlpp::BadQuery& bq){
    cerr << "query error: " << bq.what() << endl;
    return -1;
}
于 2018-04-25T19:05:59.320 回答