【问题标题】:mysql++ insert how to?mysql++插入如何?
【发布时间】:2014-03-31 07:20:47
【问题描述】:

我在将一些值插入数据库时​​遇到问题。数据库名称是用户,表是英雄。我正在开发一些以学习为目的的 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)' 附近使用正确的语法

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

提前致谢

【问题讨论】:

    标签: c++ mysql++


    【解决方案1】:

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

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

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

    【讨论】:

    • 试过了,30 分钟前没用,现在可以了。谢谢
    【解决方案2】:

    字符串doSomething需要引用:

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

    正如Streppel 所指出的,heroesVALUES 之间需要一个空格。

    【讨论】:

    • @Streppel,轻笑。 :)
    • 是的,这是最后一次尝试,现在我在英雄 (NameID ....) 之后添加了字段,感谢 Steppel、hmjd、Bartdude。
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      您可以创建一个标题并将其粘贴进去。我将使用 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-10-07
        • 1970-01-01
        • 1970-01-01
        • 2021-02-07
        • 2013-07-20
        • 2015-01-05
        • 2012-04-13
        • 2011-01-26
        • 1970-01-01
        相关资源
        最近更新 更多