【问题标题】:Error parse result odbc query错误解析结果 odbc 查询
【发布时间】:2016-04-23 18:24:38
【问题描述】:

我有这个代码:

     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”而不是 >,则会出现同样的错误,那么问题是什么?我怎样才能得到整数?

【问题讨论】:

    标签: erlang xmpp ejabberd


    【解决方案1】:

    你的模式匹配是:

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

    你匹配的词是:

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

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

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

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

    这会将二进制文件分配给变量Totale。要将其转换为整数,请使用binary_to_integer/1

    Count = binary_to_integer(Totale)
    

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      相关资源
      最近更新 更多