gpt4 book ai didi

error-handling - 了解Erlang ODBC应用程序

转载 作者:行者123 更新时间:2023-12-03 07:47:44 31 4
gpt4 key购买 nike

我正在使用Erlang ODBC连接到数据库源。我的代码如下:

main() ->
Sql = "SELECT 1",
Connection = connect(),
case odbc:sql_query(Connection, Sql) of
{selected, Columns, Results} ->
io:format("Success!~n Columns: ~p~n Results: ~p~n",
[Columns, Results]),
ok;
{error, Reason} ->
{error, Reason}
end.

connect() ->
ConnectionString = "DSN=dsn_name;UID=uid;PWD=pqd",
odbc:start(),
{ok, Conn} = odbc:connect(ConnectionString, []),
Conn.

没关系但是,至少我该如何处理错误?据我了解,它包含在 {error, Reason}中,但是当出现问题时如何输出?我正在尝试在第一个子句中添加io:format,但是它不起作用。

不幸的是,到第二步,我找不到任何可以很好地解释语法的引用,也无法理解 ok在这段代码中的含义(第一行-第8行,第二行-第16行)。连接正常且未分配此变量的情况?但是在8行表示什么?)

最佳答案

第8行中的ok是case语句的返回值,当对odbc:sql_query(Connection, Sql)的调用返回的结果可以与表达式{selected, Columns, Results}匹配时。在这种情况下,它是没有用的,因为函数io:format(...)已经返回ok

第二个好方法:{ok, Conn}是Erlang的一种非常常见的用法:如果成功,该函数返回一个元组{ok,Value},如果失败,则返回{error,Reason}。因此,您可以匹配成功案例并使用以下单行提取返回值:{ok, Conn} = odbc:connect(ConnectionString, []),
在这种情况下,函数connect()无法处理错误情况,因此此代码具有4种可能的行为:

  • 它可能无法连接到数据库:该进程将在第16行出现匹配失败的崩溃。
  • 它连接到数据库,但是查询失败:main函数将返回值{error,Reason}
  • 它连接到数据库,并且查询返回的答案与元组{selected, Columns, Results}不匹配:该过程将因第4行出现不匹配错误而崩溃。
  • 它连接到数据库,并且查询返回与元组{selected, Columns, Results}匹配的答案:该函数将打印
  • Success!
    Columns: Column
    Results: Result

    并返回 ok

    关于error-handling - 了解Erlang ODBC应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31121005/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com