-2

我试图拒绝。来自 Oracle DB 中表的条目。该应用程序是用 C 开发的,我正在使用 mySql lib 来访问数据库。正如我所说,我在 db 层使用 Oracle,在应用程序中使用 mysql 函数,这是使用 libmysqlora 完成的。除了一件事,一切都运行良好,当我发出类似 'select count(*) from 的查询时,我只得到实际计数的前 3 位数字。以下是我阅读此内容的完整代码:

int64_t vmsdb_read_count(char *table, char *query)
{
uint i;
MYSQL_ROW row;
boolean free_query = FALSE;

if (query == NULL) {
    newvallocate(char, query, SHORT_QUERY_SIZE);
    snprintf(query, SHORT_QUERY_SIZE, "select count(*) from %s", table);
    free_query = TRUE;
}

if (mysql_query(mysql, query)) {
    exiterr(Q_NOTICE, query);
    goto ERROR;
}

if (!(res = mysql_store_result(mysql))) {
    exiterr(Q_NOTICE, "MySQL failed to store results. ");
    goto ERROR;
}

while((row = mysql_fetch_row(res))) {
    for (i=0 ; i < mysql_num_fields(res); i++) {
        int64_t count = atoll(row[i]);
        mysql_free_result(res);
        res =  NULL;
        if (free_query) {
            vfree(query);
            free_query = FALSE;
        }
        return (count);
    }
}
mysql_free_result(res);
res = NULL;
ERROR:
if (free_query) {
    vfree(query);
}
return 0;
}

对于表“目标”,当我计算 sqlplus 中的行数时:

 SQL> select count(*) from destination;

 17928

但是当我为此使用上述功能时:

  printf("No. of rows in destination table = %d\n", vmsdb_read_count("destination", NULL));

  output--> No. of rows in destination table = 179

不仅对于这个表,对于我数据库中的每个其他表,该函数只返回计数值的前三位。这是什么原因?而且,我该如何解决这个问题?


默认情况下,React 会在每次组件获得 props 或 state 时重新渲染。

您可以进行一些检查,shouldComponentUpdate然后决定是否重新渲染。

文档

使用 shouldComponentUpdate() 让 React 知道组件的输出是否不受当前状态或道具变化的影响。默认行为是在每次状态更改时重新渲染,并且在绝大多数情况下,您应该依赖默认行为。

当接收到新的道具或状态时,应该在渲染之前调用 shouldComponentUpdate()。默认为真。初始渲染或使用 forceUpdate() 时不会调用此方法。

目前,如果 shouldComponentUpdate() 返回 false,则不会调用 componentWillUpdate()、render() 和 componentDidUpdate()。

返回 false 不会阻止子组件在其状态更改时重新渲染。

TLDR;返回 false inshouldComponentUpdate将阻止重新渲染,除非状态实际更改。

4

1 回答 1

0

这个功能

int64_t vmsdb_read_count(char *table, char *query)

返回一个 64 位无符号整数。

此打印格式字符串

  printf("No. of rows in destination table = %d\n", ...

提供d转换说明符,它需要一个 (signed) int。后者(很可能)是 32 位的。

在任何情况下,提供的值都不匹配转换说明符,这会调用未定义的行为。

于 2018-01-05T10:49:30.217 回答