首先,我是这里的二郎新秀。我需要与MySQL数据库连接,然后找到了erlang-mysql-driver。我正在尝试这一点,并且对某些语法感到有些困惑。
我可以从数据库中获取一行数据(为简洁起见,大大简化了):
Result = mysql:fetch(P1, ["SELECT column1, column2 FROM table1 WHERE column2='", Key, "'"]),
case Result of
{data, Data} ->
case mysql:get_result_rows(Data) of
[] -> not_found;
Res ->
%% Now 'Res' has the row
所以现在这里是'Res'的例子:
[[<<"value from column1">>, <<"value from column2">>]]
我知道这是一份记录清单。在这种情况下,查询返回1行,每列2列。
我的问题是:
<<
和>>
符号的含义是什么?用于将这样的列表转换为我已定义的记录的最佳(Erlang推荐)语法是什么:
-record(
my_record,
{
column1 = ""
,column2 = ""
}
).
答案 0 :(得分:15)
只是一个小小的注释:结果不是位字符串 comprehensions 每次看到,它们只是位字符串。但是,您可以使用位串解析来生成一个位串序列(上面用生成器和它描述),就像列表和列表推导一样。
你可以使用erlang:binary_to_list / 1和erlang:list_to_binary / 1来转换二进制和字符串(列表)。
mysql驱动程序返回位字符串的原因是可能是,因为它们操作起来要快得多。
答案 1 :(得分:6)
在您的特定示例中,您可以通过匹配返回的列值,然后创建如下所示的新记录来执行转换:
case mysql:get_result_rows(Data) of
[] ->
not_found;
[[Col1, Col2]] ->
#my_record{column1 = Col1, column2 = Col2}
end
答案 2 :(得分:1)
这些是位字符串理解。
比特串理解类似于列表理解。它们用于有效和简洁地生成位串。
使用以下语法编写位串解析:
<< BitString || Qualifier1,...,QualifierN >>
BitString是一个位串表达式,每个限定符都是生成器,位串生成器或过滤器。
•生成器编写为:
Pattern <- ListExpr.
ListExpr必须是一个计算结果列表的表达式。
•位串生成器写为:
BitstringPattern <= BitStringExpr.
BitStringExpr
必须是一个计算结果为bitstring的表达式。
•过滤器是一个计算结果为true或false的表达式。 生成器模式中的变量在函数子句中影响变量,包围位串理解。
位串解析返回一个位串,该位串是通过连接所有滤波器为真的每个位串生成元素组合的求BitString
的结果而创建的。
示例:
1> << << (X*2) >> ||
<<X>> <= << 1,2,3 >> >>.
<<2,4,6>>