Linux下的ODBC解决方案

转自:http://industry.ccidnet.com/art/322/20030529/47823_1.html

在一个小型网站开发中,笔者和同事需要共享一个Access 2000数据库。对于使用Windows 2000专业版的同事来说,自然没有什么问题,但是由于笔者使用的是Linux系统,如何连接同事机器上的Access数据库就成了一个问题。以前在Windows下面对这种情况,都是通过ODBC来实现的。ODBC可在很大程度上降低不同系统和数据连接时的复杂度。于是笔者循着ODBC这条路终于找到了解决的办法。

  所需软件

  解决方案使用的是Easysoft(www.Easysoft.com)公司的ODBC-ODBC Bridge(http://www.Easysoft.com/products/2002/main.phtml)。该软件有30天的免费试用期,其实现不同系统之间数据库互联的结构原理在此不详述。遵照页面提示,只需进行简单的注册即可下载该软件。因为ODBC-ODBC Bridge功能强大,可用于很多不同的平台和数据库,所以下载时一定要选择与自己平台对应的软件包。此外,虽然下载页面中给出了客户端应用程序选项,不过并不需要进行选择。由于本例使用的Access数据库位于Windows机器上,所以选择的服务器端是Windows平台,而客户端则是Linux平台。

  软件安装设置

  要想让Linux及其它客户端能够访问Windows服务器上的数据库,首先要在Windows下配置数据源。鉴于读者对这一步应该非常熟悉,因此不再予以说明。下面分别在服务器和客户端进行Easysoft的安装和设置。

  在Windows下运行EasysoftODBC-ODBCBridge1_1_0_0。按照提示,一直点击下一步即可。直到第九步,即“OOB Server Administrator”页面时,要求填写用户名,注意该用户名必须与Windows 2000登录时使用的用户名一致(如administrator等)。然后一直选择默认设置,这时会产生一个Easysoft ODBC-ODBC Bridge的设置界面。对于这些设置不需进行更改,只要把用户名和密码换成Windows下的账号即可。

  下面的设置比较关键,该软件要求在使用前从Easysoft公司处申请一个许可。按照提示填写相关内容,点击“Request License”。接下来,如果机器处于联机状态,可以点击“On-Line Request”。如果不成功,可以选择“E-mail Request”,通过电子邮件申请,收到许可后再导入即可。我们可以看到许可申请成功后的界面。点击“Finish”,服务器端的安装工作完成。

  安装Linux下的客户端软件时,首先切换至下载软件包所在目录,运行如下命令:

$ tar -zxvf odbc-odbc-bridge-1.1.0.0.linux-glibc.tar

  执行该命令后,会在当前目录下生成一个名为odbc-odbc-bridge-1.1.0.0.linux-glibc的目录。切换至该目录,运行./install命令开始安装。安装过程中系统会提示很多问题,前面几步只需接受默认选项,按回车即可。到最后提问是否安装Easysoft ODBC-ODBC Bridge Server时,选择“n”,安装完成。

  要让客户端能够正常运行,根据具体情况需要对/etc/odbc.ini文件进行编辑。下面是笔者的ODBC文件的具体内容:

[test]
Driver		= OOB
SERVER		= 210.31.8.56
PORT		= 8888
TRANSPORT		= tcpip
TARGETDSN		= test 
LOGONUSER		= yiligui
LOGONAUTH		= 12345
TargetUser		= demo
TargetAuth		= Easysoft

  其中相关内容说明如下:

  ◆ [test]是本地数据源的名字;

  ◆ SERVERNAME是Windows计算机的名字或IP地址;

  ◆ TargetDSN是想要连接的Windows系统上的ODBC数据源;

  ◆ LOGONUSER和LOGONAUTH分别是Windows下的用户名和密码;

  其它的选项按默认设置即可。

  系统测试

  安装完成后,进入测试步骤。首先测试服务器上安装,选择开始→程序→Easysoft→ODBC-ODBC Bridge→OOB Web Administrator,如果一切正常WEB Administrator界面会出现。

  在Linux客户端对系统进行测试时,首先切换至/usr/local/Easysoft/unixODBC/bin目录,运行测试命令,代码如下:

# cd /usr/local/Easysoft/unixODBC/bin
# ./isql -v test yiligui 12345

  如果一切正常,会显示如下信息:

+-----------------------------+
| Connected!                 |
|                                       |
| sql-statement             |
| help [tablename]        |
| quit                                |
|                                       |
+-----------------------------+
SQL>

  然后输入SQL命令来对数据库进行操作。首先来查看一下project表中部分字段的内容:

SQL> select id,project_name from project
+------------+-----------------------------+
| id         | project_name                   |
+------------+-----------------------------+
| 1          | 当代侗族的社会变迁        |
| 2          | 汉藏文化交流研究            |
| 3          | 北京市牛街社区研究        |
| 4          |蒙古族宗教文化交流研究 |
| 5          | 藏文新闻学原理                |
......
| 74         |彝族地区旅游开发研究   |
+------------+---------------------------+
74 rows returned
SQL>

  可以看到,上面显示一切正常,在用户表auth中插入一条记录:

SQL> insert into auth values ('1','yiligui','12345')
1 rows affected

再用select语句来查看该表:
SQL> select id,user,password from auth
+------------+-----------+--------+
| id         | user      | password  |
+------------+-----------+--------+
| 1          | yiligui   | 12345     |
+------------+-----------+--------+
1 rows returned

  由上面可以看出,该记录已经插入至数据库中。下面再把该记录删除:

SQL> delete from auth where user='yiligui'
1 rows affected
SQL> select id,user,password from auth
+------------+-----------+--------+
| id         | user      | password  |
+------------+-----------+--------+
+------------+-----------+--------+

  通过使用Insert、Delete、Select等标准语句进行测试,结果显示正常。整个系统已经设置完成,可以轻松地对服务器上的数据库进行操作。

  几个问题

  该例在安装和配置过程中,遇到了几个小问题。在服务器端安装软件过程中,由于笔者上国外网站需要使用代理,致使在线申请无法完成(这是一个亟待改善的问题)。这时可以先继续安装,等安装完成后再通过邮件申请许可,然后再导入即可。导入方法是:选择开始→程序→Easysoft→Easysoft Data Access Licensing→Licence Manager,打开相应界面后按提示进行操作。

  此外,在笔者的测试过程中,在Linux系统中进行数据库连接时提示以下错误:

# ./isql -v test yiligui 12345
[unixODBC][][Easysoft ODBC (Server)]General error: No license slots available
[ISQL]ERROR: Could not SQLConnect

  该错误表明服务器端的软件并没有申请许可。因为许可导入后要重新启动服务才有效,所以对于通过邮件来申请许可的人特别容易碰到这个问题。解决方法很简单,只需选择开始→程序→Easysoft→ODBC-ODBC Bridge→Services,在“服务”管理程序中找到Easysoft ODBC-ODBC Bridge Server,然后重新启动该服务即可。

  结束语

  本文只简单介绍了Easysoft ODBC-ODBC Bridge可以实现的一个最基本的功能。事实上它的功能远不止这些,不仅可以在各版本的Windows平台上使用,更重要的是可以让非Windows平台的操作系统也可以使用ODBC的数据库连接,让数据库管理者可以在Unix、Linux、OpenVMS及Windows下使用ODBC的功能。本例中使用的是Windows服务器/Linux客户端模式,实际中根据需要各操作系统平台都可以作为服务器和客户端。此外,该软件支持的数据库也比较广泛。

  第三方程序设计语言、工具和应用程序也可以轻松实现与ODBC-ODBC Bridge的整合。在其提供的帮助文档中,介绍了与C语言、Apache/PHP、Perl、StarOffice等整合的方法。具体内容可查看http://www.Easysoft.com/products/2002/man/index.html。

  既然要在工作中使用它,技术支持就显得尤为重要。从网站上得知试用版本的ODBC-ODBC Bridge有30天的免费技术支持时间,为了验证其响应时间,笔者就一些相关问题通过电子邮件(support@Easysoft.com)发出了询问,结果很快得到了答复,并且回答得非常仔细。此外,Easysoft.com提供的无论是在线的还是可供下载的文档都非常规范、完尚,基本上涉及到了用户使用过程中可能遇到的所有问题。

  总之,在不同平台之间(尤其是非Windows平台)进行共享数据库的连接和开发时,使用ODDBC-ODDBC Bridge可以大大减轻用户和开发人员的工作量。有类似需求的读者不妨一试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Linux下使用ODBC库,需要进行以下步骤: 1. 安装ODBC驱动程序 首先需要安装ODBC驱动程序,比如unixODBC或者FreeTDS等。可以通过包管理器进行安装,比如Ubuntu可以使用以下命令安装: ``` sudo apt-get install unixodbc unixodbc-dev ``` 2. 安装ODBC插件 QT提供了ODBC插件,需要先编译安装。下载QT源代码,进入源代码目录,执行以下命令: ``` cd qtbase/src/plugins/sqldrivers/odbc qmake odbc.pro make sudo make install ``` 3. 配置ODBC数据源 使用ODBC需要先在系统配置ODBC数据源。可以通过ODBC配置文件/etc/odbc.ini和/etc/odbcinst.ini进行配置。在odbc.ini添加数据源,比如: ``` [mydsn] Driver = FreeTDS Description = My database Servername = myserver Database = mydatabase ``` 在odbcinst.ini添加驱动程序信息,比如: ``` [FreeTDS] Description = FreeTDS ODBC driver Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so ``` 4. 在QT项目使用ODBC 在QT项目使用ODBC需要在.pro文件添加以下内容: ``` QT += sql QT += core-private QT += network-private LIBS += -lodbc ``` 然后在代码使用QSqlDatabase连接ODBC数据源: ``` QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName("mydsn"); if (db.open()) { // 连接成功 } else { // 连接失败 } ``` 以上是在Linux下使用QT5.12连接ODBC的基本步骤,具体的ODBC驱动程序和数据源配置可能会有所不同,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值