错误解析结果odbc查询

Error parse result odbc query

我有这个代码:

     case catch ejabberd_odbc:sql_query(
                     Server,
                     ["select COUNT(*) as total from users "
                      "where username='", IdUsername, "'"]) of
            {selected, [<<"total">>], [{Totale}]} ->
                io:format(Totale);
            _ ->
                io:format("err")
     end,

但总是打印 "err" 到控制台,但如果我使用这个:

      Result = ejabberd_odbc:sql_query(Server, ["select COUNT(*) as total from users where username='", IdUsername, "';"]),
       io:format(Result),

我有这个输出:

    {badarg,[{io,format,[<0.42.0>,{selected,[<<"total">>],[[<<"1">>]]},[]],     []},{mod_http_offline,create_message,3,[{file,"mod_http_offline.erl"},     {line,35}]},{ejabberd_hooks,safe_apply,3,[{file,"src/ejabberd_hooks.erl"},     {line,382}]},{ejabberd_hooks,run1,3,[{file,"src/ejabberd_hooks.erl"},     {line,329}]},{ejabberd_sm,route,3,[{file,"src/ejabberd_sm.erl"},     {line,111}]},{ejabberd_local,route,3,[{file,"src/ejabberd_local.erl"},     {line,112}]},{ejabberd_router,route,3,[{file,"src/ejabberd_router.erl"},     {line,75}]},{lists,foreach,2,[{file,"lists.erl"},{line,1336}]}]}

我在哪里可以看到这个:

      {selected,[<<"total">>],[[<<"1">>]]}

如果我在一个案例中使用 "total" 而不是 <<"total">> 也会出现同样的错误,那么问题是什么?我怎样才能得到 int 号码?

您的模式匹配是:

{selected, [<<"total">>], [{Totale}]}

您要匹配的字词是:

{selected,[<<"total">>],[[<<"1">>]]}

也就是说,该元组中的第三个元素是一个列表,其中包含一个包含二进制的列表,但您匹配的是一个包含元组的列表。

您可以通过在所需值所在的位置放置一个变量名来获取该值,如下所示:

{selected,[<<"total">>],[[Totale]]}

将二进制赋值给变量Totale。要将其转换为整数,请使用 binary_to_integer/1:

Count = binary_to_integer(Totale)