我正在使用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种可能的行为:
{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/