C ++中MySQL列的字节长度

时间:2014-05-12 04:10:18

标签: c++ mysql c mysql-connector

我正在使用C ++为MySQL数据库编写程序。我试图通过比较列的长度(以字节为单位)与通过/失败来检查条件。这是代码:

while (row = mysql_fetch_row(result))
{
    lengths = mysql_fetch_lengths(result);
    num_rows = mysql_num_rows(result);

    for (i = 0; i < num_fields; i++)
    {
        if (strstr(fields[i].name, "RSSI") != NULL)
        {
            if (lengths[*row[i]] == ??)
                printf("current value is %s \t", row[i]);
        }
    }
}

所以基本上我要做的是在列中查找字符串“RSSI”,如果字符串存在,我想打印该值。如果存在,每列中的值长度为3个字节。那么如何检查长度[* rows [i]]的长度是否为3个字节?感谢

2 个答案:

答案 0 :(得分:4)

根据official MySQL documentation mysql_fetch_lengths返回一个unsigned long数组,其长度为当前行的列数。虽然描述不清楚它是以字节还是其他形式,但显示的例子澄清了它。

所以你应该直接检查3

此外,还有一些语法和语义错误,以及代码中可能的重构,其中包括以下内容:

  • 鉴于lengths变量是一个包含当前行长度的数组,表达式lengths[*row[i]]应该只是lengths[i],因为i是当前列的索引。
  • if内的两个for可以与&&运算符合并,以提高可读性。
  • 某些变量未正确定义或使用。

代码如下所示:

// Properly assign a value to fields variable.
fields = mysq_fetch_fields(result);

// Getting the number of fields outside the loop is better.
num_fields = mysql_num_fields(result);

while (row = mysql_fetch_row(result))
{
    lengths = mysql_fetch_lengths(row);

    for (i = 0; i < num_fields; i++)
        if (strstr(fields[i].name, "RSSI") != NULL && lengths[i] == 3)
            printf("current value is %s \t", row[i]);

    printf("\n"); // For better output print each row in a new line.
}

您应该仔细阅读文档,以避免使用错误函数的编译或逻辑错误。

答案 1 :(得分:0)

我认为有一个错字:

dev docs说:

http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-lengths.html) ...

   num_fields = mysql_num_fields(result);
    lengths = mysql_fetch_lengths(result);
    for(i = 0; i < num_fields; i++)

不是

lengths = mysql_fetch_lengths(row);