1

我正在尝试使用 SWI Prolog(使用 ODBC 驱动程序)连接到本地 MySQL 数据库,但收到以下错误

?- [family].
% family compiled 0.00 sec, 264 bytes
true.

?- open_db.
ERROR: ODBC: State S1090: [unixODBC][Driver Manager]Invalid string or buffer length

数据库名称:prolog_test

Prolog 代码 (family.pl)

open_db :-
    odbc_connect('mysql:dbname=prolog_test;host=localhost', _,
                 [ user('prologuser'),
                   password('prologpass'),
                   alias(localhost),
                   open(once)
                 ]).

children(X) :-
    odbc_query(localhost, 'SELECT (lemma) FROM tableName',X).

谢谢您的帮助

4

2 回答 2

1

我使用较弱的替代odbc_driver_connect,它运行良好:

myodbc_connect_db(Db, Uid, Pwd, Cn) :-
    format(atom(S), 'driver=mysql;db=~w;uid=~w;pwd=~w', [Db, Uid, Pwd]),
    odbc_driver_connect(S, Cn, [encoding(utf8)]).

根据应用程序的要求,不需要 DSN 可能是一个优势。

于 2013-04-09T22:09:56.330 回答
1

按照此处此处的说明进行操作。

创建文件:/etc/odbc.ini

[ODBC Data Sources]
odbcname     = MyODBC 3.51 Driver DSN

[prologtest]
Driver       = /usr/lib/odbc/libmyodbc.so
Description  = MyODBC 3.51 Driver DSN
SERVER       = my.database.server.com
PORT         =
USER         = USER
Password     = XXXXXX
Database     = DBNAME
OPTION       = 3
SOCKET       =

[Default]
Driver       = /usr/local/lib/libmyodbc3.so
Description  = MyODBC 3.51 Driver DSN
SERVER       = localhost
PORT         =
USER         = root
Password     =
Database     = test
OPTION       = 3
SOCKET       =

在我的机器上,libmyodbc.so 位于 /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so

将 Prolog 代码更改为(更接近文档

  1 open_wordnet :-
  2         odbc_connect('prologtest', _,
  3                      [ user('prologuser'),
  4                        password('prologpass'),
  5                        alias(prologa),
  6                        open(once)
  7                      ]).

现在我可以查询数据库了

于 2013-04-10T01:42:30.337 回答