ErlMySQL 是一个用 Erlang 编写的 MySQL 客户端,并提供接近 Connector/C 的 API。
ErlMySQL 采用底层的 TCP/IP Socket 连接到 MySQL 服务器,可最大限度的提升通讯的性能。
下载地址:
http://sourceforge.net/projects/erlmysql/
http://es.sourceforge.jp/projects/sfnet_erlmysql/releases/
首先系统需要安装erlang运行环境.
下载erl.mysql.client-vsn-1.1.3.zip文件,解压后进入目录,运行如下命令编译。
erlc -I include/ -o ebin/ src/*.erl
关于编译的更多参数,参考:http://erlang.org/doc/man/erlc.html
注意,文件名比较长,被我修改成mysql.client。如果ebin目录不存在,需要预先手动创建。
另外,如果运行时遇到如下错误:exception error: undefined function my:start_client/0
可以使用code:add_path在erlang路径中添加类库: code:add_path("/usr/lib/erlang/lib/mysql.client/ebin/").
关于code模块的用法,参考:http://erlang.org/doc/man/code.html
如果想在控制台里运行,可以使用-pa 参数启动erlang.
erl -pa /usr/lib/erlang/lib/mysql.client/ebin/
关于启动的更多参数,参考:http://erlang.org/doc/man/erl.html
关于该类库用法的更多资料:
http://www.trapexit.org/MySQL_native_client
以下是测试代码(仅供参考):
-module(mysql).
-compile(export_all).
-include("my.hrl").
-include("test.hrl").
start() ->
code:add_path("/home/xxxx/Downloads/mysql.client/ebin"),
my:start_client(),
DS_def = #datasource{
host = ?TEST_SERVER_HOST_NAME,
port = ?TEST_SERVER_PORT,
database = ?TEST_DB_NAME,
user = ?TEST_USER,
password = ?TEST_PASSWORD,
flags = #client_options{trans_isolation_level = serializable}
},
my:new_datasource(datasource, DS_def)
.
get_connection() ->
my:get_connection(datasource)
.
fetch(Table) ->
start(),
Conn = get_connection(),
{Metadata, Rowdata} = my:execute_query(Conn,"SELECT * FROM " ++ Table ++ " order by id"),
my:close_connection(Conn),
#metadata{field_metadata=Fields} = Metadata,
Columns = lists:map(fun(#field_metadata{name=Name}) -> Name end, Fields),
io:format("Columns: ~p~n", [Columns]),
DataRows = lists:map(fun(#rs_row_data{data=Data}) -> Data end, Rowdata),
io:format("DataRows: ~p~n", [DataRows])
%[Data || #rs_row_data{data=Data} <- Rowdata]
.