unixodbc_unixodbc 连接不成功 - CSDN
精华内容
参与话题
  • unixODBC的使用

    千次阅读 2017-12-21 10:10:34
    unixODBC介绍unixODBC is a complete, free/open, ODBC solution for UNIX/Linux. 官网 http://www.unixodbc.org/ 源码下载url ftp://ftp.unixodbc.org/pub/unixODBC/ unixODBC版本目前有两套,soname为libodbc.so.1...

    unixODBC介绍

    unixODBC is a complete, free/open, ODBC solution for UNIX/Linux.

    unixODBC版本目前有两套,soname为libodbc.so.1与soname为libodbc.so.2

    对于使用libodbc.so.1的驱动下载unixODBC-2.3.0.tar.gz,作者自己发现最高版本的libodbc.so.1库;
    对于使用libodbc.so.2的驱动下载最新的unixODBC即可。

    环境搭建与使用

    安装unixODBC

    tar xf unixODBC-2.3.0.tar.gz
    cd unixODBC-2.3.0
    ./configure --prefix=/usr/local/unixODBC2_3_0 --enable-gui=no
    make 
    make install

    oracle 驱动安装配置

    参考oracle官方ODBC驱动的说明,驱动文件版本,依赖的basic库文件以及推荐的unixODBC框架版本:Oracle Instant Client ODBC Release Notes

    下载oracle11官方提供的odbc Driver

    安装上面的两个文件,并将/usr/lib/oracle/11.2/client64/lib与/usr/local/unixODBC2_3_0/lib两个路径追加到/etc/ld.so.conf,
    执行ldconfig

    配置ODBC驱动

    /usr/local/unixODBC2_3_0/etc/odbcinst.ini 驱动配置文件

    [Oracle_11g_ODBC_driver]
    Description     = Oracle ODBC driver for Oracle 11g
    Driver          = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
    Setup           =
    FileUsage       =
    CPTimeout       =
    CPReuse         = 

    /usr/local/unixODBC2_3_0/etc/odbc.ini 客户端配置文件

    [OSR]
    Trace       = On
    TraceFile   = stderr
    Driver = Oracle_11g_ODBC_driver
    ServerName = //10.10.16.189:1521/orcl
    UserID = system
    Password = passwd

    使用unixODBC提供的命令行工具登录数据库即可

    /usr/local/unixODBC2_3_0/bin/isql OSR

    mysql驱动安装配置

    安装部署参考官方文档https://dev.mysql.com/downloads/connector/,可以下载最新的驱动文件,参考最新的文档

    1. 使用yum安装 yum install mysql-connector-odbc
    2. 驱动文件配置/usr/local/unixODBC/etc/odbcinst.ini

      [MySQL]
      Description = MySQL ODBC driver
      Driver = /usr/lib64/libmyodbc5.so # 通过命令rpm -ql mysql-connector-odbc查看路径
    3. 客户端文件配置/usr/local/unixODBC/etc/odbc.ini

      [my222]
      Driver = MySQL
      SERVER = 192.168.2.222
      PORT = 3306
      USER = root
      PASSWORD = password
      DATABASE = DB
    4. /usr/local/unixODBC/bin/isql my222使用unixODBC终端工具访问数据库

    unixODBC开发

    对于unixODBC编程,参考isql的源码即可

    展开全文
  • unixODBC安装配置

    千次阅读 2017-10-30 21:00:08
    一、安装与配置unixODBC 注意:一般操作系统默认已经安装了unixodbc,安装步骤可忽略。 下载 unixODBC 源码包下载地址: http://www.unixodbc.org/ (Useversion 2.3.x or later)   安装unixODBC #tar xzvf ...

    一、安装与配置unixODBC

    注意:一般操作系统默认已经安装了unixodbc,安装步骤可忽略。

    下载 unixODBC

    源码包下载地址: http://www.unixodbc.org/ (Useversion 2.3.x or later)

     

    安装unixODBC

    #tar xzvf unixODBC-2.3.4.tar.gz

    #cd unixODBC-2.3.4

    #./configure --prefix=/opt/odb/uodbc--disable-gui --enable-threads --disable-drivers

    #make

    #make install

    注意:--prefix为指定安装位置,例如:/opt/odb/uodbc。

     

    配置相关环境变量(示例如下):

    #vi /etc/profile

    ------------------

    export ODBCHOME=/opt/odb/uodbc

    export ODBCSYSINI=${ODBCHOME}/etc

    export ODBCINI=${ODBCSYSINI}/odbc.ini

    export LD_LIBRARY_PATH=${ODBCHOME}/lib

    ------------------

    #source /etc/profile


    检查unixodbc的安装情况以及配置文件所在位置:

    #odbcinst -j

     


    展开全文
  • 【整理】在Linux安装UNIXODBC的方法

    万次阅读 2012-02-08 14:33:16
    ODBC是一种数据库标准。下面是维基百科对ODBC的介绍: “ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问DBMS(Database ManagementSystem)。...

    ODBC是一种数据库标准。下面是维基百科对ODBC的介绍:

    “ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问DBMS(Database ManagementSystem)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性:与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。微软公司在1993年以DLL集的方式发布了世界上第一个ODBC产品,现在成为了微软开放服务结构(WOSA,Windows Open Services Architecture)中,有关数据库的一个组成部分。微软的ODBC产品其实就是一个ODBC的驱动管理器,提供一个ODBC应用程序到某种ODBC驱动的接口。在UNIX系统上,有两个开源的ODBC驱动管理器,unixODBC和iODBC。 ”


    ODBC使用DSN保存连接到数据库系统的信息。在使用之前,ODBC程序需要打开到DSN的连接。ODBC的DSN分为四类——系统DSN、用户DSN、文件DSN,或许还包括Connection.Open语句临时创建的DSN。在UNIXODBC里,在/etc/odbc.ini里保存着系统DSN,而在~/.odbc.ini里保存着用户DSN。通常,向外提供服务的程序使用系统DSN。

    接下来我们要配置一个DSN供ODBC存储CDR记录。首先在MySQL中创建一个数据库,接下来是安装与配置UNIXODBC。因为我们使用MySQL服务器,还要注意安装MySQL的ODBC驱动程序。

    sudo apt-get install unixodbc libmyodbc

    UNIXODBC的配置文件主要是/etc/odbcinst.ini以及/etc/odbc.ini。前者用于配置驱动程序,后者,正如上文所述,用于保存系统DSN。刚才安装了MySQL的驱动程序,需要把它的配置信息填写到 vi /etc/odbcinst.ini内。现在打开你所喜爱的编辑器,编辑 vi /etc/odbcinst.ini:

    [MySQL]
    Description     = MySQL driver for Linux
    Driver          = /usr/lib/odbc/libmyodbc.so
    Setup           = /usr/lib/odbc/libodbcmyS.so
    FileUsage       = 1

    配置信息依次是驱动程序描述、驱动程序位置、配置程序位置、驱动程序使用次数。实际的驱动程序位置依Linux发行版的不同而有所差异。Ubuntu通常位于/usr/lib/odbc/下。Suse位于/usr/lib/unixODBC/。RedHat等发行版可能有所不同。

    然后是配置DSN,接下来我们创建一个名为AsteriskDB的DSN。编辑/etc/odbc.ini文件

    [AsteriskDB]
    Description = The Database for Asterisk
    Trace       = On
    TraceFile   = stderr
    Driver      = MySQL
    SERVER      = localhost
    USER        = root
    PASSWORD    = mypassword
    PORT        = 3306
    DATABASE    = asterisk

    在配置文件里,DSN的名字即为Section的名字。在配置信息中,有一部分配置项是ODBC使用的,另一部分则由驱动程序处理。下面几个是由ODBC使用的配置项:

    Description                 描述信息
    Trace                       是否跟踪SQL语句。有“On”和“Off”两种值
    TraceFile                   如果跟踪SQL语句。将跟踪信息保存到何文件中。如果填写stderr就会打印到标准输出
    Driver                      在/etc/odbcinst.ini里配置的驱动程序名字。

    配置文件里的“SERVER”、“USER”等信息是MySQL驱动程序使用的信息。这里有一些示例:

    [PostgreSQL]
    Description         = Test to Postgres
    Driver              = PostgreSQL
    Trace               = Yes
    TraceFile           = sql.log
    Database            = nick
    Servername          = localhost
    UserName            =
    Password            =
    Port                = 5432
    Protocol            = 6.4
    ReadOnly            = No
    RowVersioning       = No
    ShowSystemTables    = No
    ShowOidColumn       = No
    FakeOidIndex        = No
    ConnSettings        =
     
    [Mini SQL]
    Description     = MiniSQL
    Driver          = MiniSQL
    Trace           = No
    TraceFile       =
    Host            = localhost
    Database        =
    ConfigFile      =
     
    [MySQL-test]
    Description     = MySQL test database
    Trace       = Off
    TraceFile   = stderr
    Driver      = MySQL
    SERVER      = 192.168.1.26
    USER        = pharvey
    PASSWORD    =
    PORT        = 3306
    DATABASE    = test
     
    [nntp Data Source]
    Description     = nntp Driver
    Driver          = nntp Driver
    Trace           = No
    TraceFile       =
    Host            = localhost
    Database        =
    Port            =
     
    [FreeTDS driver]
    Driver = TDS
    Description = Northwind sample database
    Trace = No
    Server = 192.168.1.25
    Database = Northwind
    UID = sa
     
    [Sybase SQL Anywhere 5.0]
    Driver=Sybase SQL Anywhere 5.0
    Description=Sybase SQL Anywhere 5.0 ODBC Driver
    Userid=dba
    Password=sql
    DatabaseFile=sademo.db

    如果操作完全正确的话,现在ODBC已经成功了。可以试下isql命令操作刚配置的DSN。

    $ isql asteriskdb
    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+
    SQL> show tables;
    +-----------------------------------------------------------------+
    | Tables_in_asterisk                                              |
    +-----------------------------------------------------------------+
    +-----------------------------------------------------------------+
    SQLRowCount returns 0
    SQL>

    这个命令行界面与mysql命令类似,可以进行各种数据库操作。至此,UNIXODBC已经安装成功了。

     


    展开全文
  • Linux/Unix下ODBC的安装、配置与编程

    千次阅读 2014-02-28 10:42:58
    简介: 本文主要内容是介绍ODBC的简单原理,以及如何在Linux/Unix下进行ODBC的安装、配置与编程。 ...ODBC 是Open Database Connect 即开放数据库互连的简称,它是由Microsoft 公司于1991 年提出的一个用于...

    简介: 本文主要内容是介绍ODBC的简单原理,以及如何在Linux/Unix下进行ODBC的安装、配置与编程。

    ODBC原理

    ODBC 是Open Database Connect 即开放数据库互连的简称,它是由Microsoft 公司于1991 年提出的一个用于访问数据库的统一界面标准,是应用程序和数据库系统之间的中间件。它通过使用相应应用平台上和所需数据库对应的驱动程序与应用程序的交互来实现对数据库的操作,避免了在应用程序中直接调用与数据库相关的操作,从而提供了数据库的独立性。

    ODBC 主要由驱动程序和驱动程序管理器组成。驱动程序是一个用以支持ODBC 函数调用的模块,每个驱动程序对应于相应的数据库,当应用程序从基于一个数据库系统移植到另一个时,只需更改应用程序中由ODBC 管理程序设定的与相应数据库系统对应的别名即可。驱动程序管理器可链接到所有ODBC 应用程序中,它负责管理应用程序中ODBC 函数与DLL 中函数的绑定。

    ODBC 使用层次的方法来管理数据库,在数据库通信结构的每一层,对可能出现依赖数据库产品自身特性的地方,ODBC 都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性,这也是ODBC 一经推出就获得巨大成功的重要原因之一。

    从结构上分,ODBC 分为单束式和多束式两类。

    1. 单束式驱动程序 
      单束式驱动程序介于应用程序和数据库之间,像中介驱动程序一样数据提供一个统一的数据访问方式。 当用户进行数据库操作时,应用程序传递一个ODBC 函数调用给ODBC 驱动程序管理器,由ODBC API 判断该调用是由它直接处理并将结果返回还是送交驱动程序执行并将结果返回。 由上可见,单束式驱动程序本身是一个数据库引擎,由它直接可完成对数据库的操作,尽管该数据库可能位于网络的任何地方。
    2. 多束式驱动程序 
      多束式驱动程序负责在数据库引擎和客户应用程序之间传送命令和数据,它本身并不执行数据处理操作而用于远程操作的网络通信协议的一个界面。 前端应用程序提出对数据库处理的请求,该请求转给ODBC 驱动程序管理器,驱动程序管理器依据请求的情况,就地完成或传给多束驱动程序,多束式驱动程序将请求翻译为特定厂家的数据库通信接口(如Oracle 的SQLNet)所能理解的形式并交于接口去处理,接口把请求经网络传送给服务器上的数据引擎,服务器处理完后把结果发回给数据库通信接口,数据库接口将结果传给多束式ODBC 驱动程序,再由驱动程序将结果传给应用程序。

    很多程序员已经体会到了在Windows平台下的ODBC的益处,而在Linux/Unix下进行数据库编程的时候却不得不根据不同的数据库来选择特有的API进行编程,一旦数据库发生了改变,所有与这些API相关的程序都必须进行修改。其实在Linux/Unix下现在也有了自己的ODBC,可以使我们的数据库编程就像在Windows平台下一样简单。

    下面我们开始介绍Linux/Unix下的ODBC:

    Linux/Unix下ODBC的安装

    方法一: 
    先下载最新的unixODBC源码包( http://www.unixodbc.org/unixODBC-2.2.1.tar.gz)放到/usr/local下,然后运行下述命令:

    tar zxvf unixODBC-2.2.1.tar.gz
    cd unixODBC-2.2.1 
    ./configure --prefix=/usr/local/unixODBC-2.2.1 --includedir=/usr/include 
    --libdir=/usr/lib -bindir=/usr/bin --sysconfdir=/etc
    make
    make install
    

    安装成功后,unixODBC所需的头文件都被安装到了/usr/inlucde下,编译好的库文件安装到了/usr/lib下,与unixODBC相关的可执行文件安装到了/usr/bin下,配置文件放到了/etc下。

    方法二: 
    下载rpm包进行安装,我们这里以Red Hat 7.3为例: 
    unixODBC-2.2.0-5 RPM for i386(安装包及源码包) 
    ( ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/unixODBC-2.2.0-5.i386.rpmftp://ftp.rpmfind.net/linux/redhat/7.3/en/os/i386/SRPMS/unixODBC-2.2.0-5.src.rpm) 
    unixODBC-devel-2.2.0-5 RPM for i386 
    ( ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/unixODBC-devel-2.2.0-5.i386.rpm) 
    直接将unixODBC-2.2.0-5.i386.rpm和unixODBC-devel-2.2.0-5.i386.rpm装入系统就可以了,命令如下:

    rpm -ivh unixODBC-2.2.0-5.i386.rpm
    rpm -ivh unixODBC-devel-2.2.0-5.i386.rpm
    

    安装好以后,所需的各个部分与上面所列的位置相同。

    Linux/Unix下ODBC的配置

    运行ODBCConfig程序(在/usr/bin下),如下图:


    图一:ODBCConfig主窗口
    图一:ODBCConfig主窗口 

    和Windows下的ODBC设置窗口是不是很像?我想大家都能看懂吧。

    第一步:安装数据库的ODBC驱动程序 
    Drivers这一栏中用来设置数据库的驱动程序,点击Add按钮,会出现下图:


    图二:ODBCConfig Driver Properties窗口
    图二:ODBCConfig Driver Properties窗口 

    Name一栏填入数据库驱动的名称,Description是数据库驱动的描述,Driver是用来选择数据库驱动程序的,Setup是用来选择数据库驱动安装程序的,如果你是按照上述安装方法安装的,这些程序都放在/usr/lib下,下面是数据库驱动程序的列表:

    数据库 数据库驱动程序 数据库驱动安装程序
    TXT libodbctxt.so libodbctxtS.so
    NNTP libnn.so libodbcnnS.so
    MiniSQL libodbcmini.so libodbcminiS.so
    PostgreSQL libodbcpsql.so libodbcpsqlS.so
    MySQL (注释) libodbcmyS.so
    Sybase/MS SQL (注释) libtdsS.so
    Oracle (注释) liboraodbcS.so

    注释: 
    MySQL、Sybase/MS SQL和Oracle的数据库驱动可以在下列网址找到: 
    MySQL           http://www.unixodbc.org/myodbc.html 
    Sybase/MS SQL       http://www.freetds.org 
    Oracle           http://www.easysoft.org

    MySQL的驱动程序MyODBC-2.50.39-4 RPM for i386以及源码包: 
    ftp://speakeasy.rpmfind.net/linux/redhat/7.3/en/os/i386/RedHat/RPMS/MyODBC-2.50.39-4.i386.rpm 
    ftp://ftp.redhat.com/pub/redhat/linux/7.3/en/os/i386/SRPMS/MyODBC-2.50.39-4.src.rpm

    选择好驱动程序之后,点击"√"保存退出。

    第二步:设置DSN 
    DSN分为User DSN、System DSN和File DSN三种,我们以System DSN为例。选中System DSN一栏以后,点击Add…按钮就会见到下图:


    图三:创建DSN选择数据库驱动
    图三:创建DSN选择数据库驱动 

    列表中会列出你已经安装好的数据库驱动程序,我这里只装了MySQL和PostgreSQL,然后选择你所要使用的驱动程序,然后点击OK就会出现下图:


    图四:DSN的设置
    图四:DSN的设置 

    我这里使用的是MySQL的数据库驱动,不同的数据库,这个窗口的内容会有所不同。Name是数据源的名称,Description是描述,Server可以选择服务器,如果本机启动了MySQL就可以选择localhost,如果Port和Socket有特殊要求,再根据实际情况进行修改,Database是用来选择数据库的,下拉菜单不一定包含所有的数据库,你可以把自己已经创建好的数据库名称填写在这里。都配置好之后,点击"√"保存退出。

    这样Linux/Unix下的ODBC数据源就已经设置好了,大家还可以在ODBCConfig程序的Status栏中查看ODBC的使用情况,在Advanced栏中设置是否做日志或者启动连接池,在About栏中,有一个Linux/Unix ODBC的示意图,在Credits按钮中可以看到所有开发者的名字的列表。 ODBCConfig程序中所有有关数据库驱动程序的信息被放在odbcinst.ini(在/etc下)文件中,有关DSN的信息被放在odbc.ini(在/etc下)文件中,大家有兴趣的话,可以自己去观察一下。

    第三步:使用DataManager程序浏览数据库 
    运行DataManager程序之后就可以查看Drivers、System DSN和User DSN这几项内容,,在浏览数据库的时候,可以在右面的SQL栏中输入SQL语句,然后点击人形按钮就可以运行SQL语句,运行结果会在Results一栏中显示出来,具体情况可以见下图:


    图五:使用DataManager浏览数据库
    图五:使用DataManager浏览数据库 

    第四步:使用isql程序查看数据库 
    unixODBC还提供了命令台下查看数据库的程序,这就是isql,用法如下:

    isql DSN [UID [PWD]] [options]
    DSN		数据源名称
    UID		用户ID
    PWD		用户密码
    Options:
    -b		批处理,没有提示符的模式
    -dx		设置列之间的分隔符为x
    -w		将查询结果输出为HTML格式
    -c		第一行输出列名
    --version	           输出isql的版本号
    

    Linux/Unix下ODBC的编程

    1、使用unixODBC提供的ODBC API进行编程: 
    在进行编程之前,我们来看一下ODBC API中的常用数据类型与我们在C语言中使用的数据类型的对应关系:

    类型标识符 ODBC数据类型 C数据类型
    SQL_C_CHAR SQLCHAR * unsigned char *
    SQL_C_SSHORT SQLSMALLINT short int
    SQL_C_USHORT SQLUSMALLINT unsigned short int
    SQL_C_SLONG SQLINTEGER long int
    SQL_C_FLOAT SQLREAL float
    SQL_C_DOUBLE SQLDOUBLE, SQLFLOAT double
    SQL_C_BINARY SQLCHAR * unsigned char *
    SQL_C_TYPE_DATE SQL_DATE_STRUCT struct tagDATE_STRUCT {SQLSMALLINT year; SQLUSMALLINT month; SQLUSMALLINT day; } DATE_STRUCT;
    SQL_C_TYPE_TIME SQL_TIME_STRUCT struct tagTIME_STRUCT {SQLUSMALLINT hour; SQLUSMALLINT minute; SQLUSMALLINT second; } TIME_STRUCT;

    我们这里使用的数据库名称为test(DSN),这个DSN使用的用户名是root,密码为空,表的名称是web,字段情况如下:

    字段名 数据类型
    id integer
    name char(40)
    size integer

    第一:设定ODBC环境句柄并设置参数 
    首先我们需要声明一个ODBC环境句柄(SQLHENV),它可以用来获得有关的ODBC环境信息,我们需要调用SQLAllocHandle ( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &V_OD_Env )来获得这个句柄,V_OD_Env就是要分配的SQLHENV类型的环境句柄。 分配好句柄之后,你给它需要设定所使用的ODBC版本,你可以调用SQLSetEnvAttr ( V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0 ),SQL_ATTR_ODBC_VERSION是存放你定义的ODBC版本号的变量,SQL_OV_ODBC3则说明你的程序使用的是ODBC 3.0。

    第二:设定连接句柄并设置超时参数 
    我们需要声明一个连接句柄(SQLHDBC),用来存放数据库连接信息的,调用SQLAllocHandle ( SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc )获得连接句柄,V_OD_hdbc就是要分配的SQLHDBC类型的连接句柄。 分配好之后,我们可以调用SQLSetConnectAttr ( V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0 )来设定连接超时参数。

    第三:连接数据库 
    调用SQLConnect ( V_OD_hdbc, (SQLCHAR*) "Test", SQL_NTS, (SQLCHAR*) "root", SQL_NTS, (SQLCHAR*) "", SQL_NTS )连接我前面提到的数据库,需要设定三个参数,就是数据库名称、用户名和密码(因为我的数据库密码为空,所以这里的密码也为空),后面的SQL_NTS的位置应该写入这些参数的长度,如果写的是SQL_NTS就是让SQLConnect来决定参数的长度。

    第四:分配SQL语句的句柄并进行查询: 
    需要声明一个SQL语句的句柄(SQLHSTMT),用来存放SQL语句信息的,调用SQLAllocHandle ( SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt )来获得这个句柄,V_OD_hstmt就是我们要分配的SQLHSTMT类型的SQL语句句柄。

    我们的查询语句是:

    SELECT name, id FROM web ORDER BY id

    执行这条查询语句之后,查询结果可能有很多行,但每行只有两列,分别对应name和id,它们的数据类型为integer和char*,在ODBC中的数据类型标识符为SQL_C_ULONG和SQL_C_CHAR。我们需要先声明这样的两个变量来存贮查询结果:

    SQLINTEGER		V_OD_id;
    char		V_OD_buffer[200];
    

    然后我们需要使用SQLBindCol函数把查询结果和我们定义的变量进行绑定:

    SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,150,&V_OD_err);
    SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,150,&V_OD_err);
    

    这里的V_OD_err是用来存放错误信息编号的变量,类型也是SQLINTEGER。 
    接下来,我们调用SQLExecDirect来进行查询:

    SQLExecDirect ( V_OD_hstmt, "SELECT dtname,iduser FROM web order by iduser", SQL_NTS );

    我们可以用SQLNumResultCols ( V_OD_hstmt, &V_OD_colanz )来获得结果的列数,也可以用SQLRowCount( V_OD_hstmt, &V_OD_rowanz )来获得结果的条数,V_OD_colanz和V_OD_rowanz分别存储相应的结果,类型分别为SQLSMALLINT和SQLINTEGER。 
    在读取结果之前,我们需要调用SQLFetch ( V_OD_hstmt )语句,这个语句可以用来获得第一条结果也可以用来都下一条,有点像next的感觉。然后我们就可以在V_OD_id和V_OD_buffer里面获得每条记录的结果了。

    第五:关于关闭连接和释放句柄 
    关闭数据库的连接,调用SQLDisconnect ( V_OD_hdbc )就可以了,但在关闭数据库之前需要先释放SQL语句的句柄,而且在关闭数据库之后应该释放连接句柄和ODBC环境句柄,语句如下(按正常的顺序):

    SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
    SQLDisconnect(V_OD_hdbc);
    SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
    

    第六:关于上述情况中的错误信息处理 
    我们需要定义两个变量:

    long	V_OD_erg;
    SQLINTEGER	V_OD_err;

    SQLAllocHandle、SQLSetEnvAttr、SQLSetConnectAttr、SQLConnect、SQLExecDirect、SQLNumResultCols和SQLRowCount的调用结果都可以用V_OD_erg来存储,V_OD_err可以获得SQLBindCol中的错误信息。

    第七:获得本机的DSN信息 
    我们可以在声明SQLHENV句柄之后,使用SQLDataSources函数来获得本机的DSN信息。程序如下:

    void OD_ListDSN(void)
    {
    char       l_dsn[100],l_desc[100];
    short int  l_len1,l_len2,l_next;
    l_next=SQL_FETCH_FIRST;
    while( SQLDataSources(V_OD_Env,l_next,l_dsn, sizeof(l_dsn),
    &l_len1, l_desc, sizeof(l_desc), &l_len2) == SQL_SUCCESS)
    {
    printf("Server=(%s) Beschreibung=(%s)\n",l_dsn,l_desc);
    l_next=SQL_FETCH_NEXT;
    }
    }
    

    l_next变量是用来指定我们所要获得的DSN的类别:

    SQL_FETCH_FIRST 设定SQLDataSources()函数找到第一个可用的数据源(可以是User DSN,也可以是Systerm DSN)
    SQL_FETCH_FIRST_USER 设定SQLDataSources()函数找到第一个User DSN
    SQL_FETCH_FIRST_SYSTEM 设定SQLDataSources()函数找到第一个System DSN
    SQL_FETCH_NEXT 找到下一个数据源,至于数据源类型则要根据前面的定义

    到这里,我们在Unix的C语言下面进行ODBC编程已经讲完,上述ODBC API需要引用以下几个头文件(这些文件已经安装到/usr/include下了):

    #include <sql.h>
    #include <sqlext.h>
    #include <sqltypes.h>

    另外如果大家使用GTK进行编程,由于到目前为止GTK还没有加入专门处理数据库的部件,所以大家可以在GTK中调用上述的ODBC API即可。

    这里附上例程供大家参考学习:

    /* odbc.c
        testing unixODBC
    */
    #include <stdlib.h>
    #include <stdio.h>
    #include <odbc/sql.h>
    #include <odbc/sqlext.h>
    #include <odbc/sqltypes.h>
    SQLHENV       V_OD_Env;    // Handle ODBC environment
    long       V_OD_erg;    // result of functions
    SQLHDBC       V_OD_hdbc;                      // Handle connection
    char       V_OD_stat[10];    // Status SQL
    SQLINTEGER     V_OD_err,V_OD_rowanz,V_OD_id;
    SQLSMALLINT     V_OD_mlen,V_OD_colanz;
    char             V_OD_msg[200],V_OD_buffer[200];
    int main(int argc,char *argv[])
    {
      // 1. allocate Environment handle and register version 
      V_OD_erg=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env);
      if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
      {
        printf("Error AllocHandle\n");
        exit(0);
      }
      V_OD_erg=SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); 
      if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
      {
        printf("Error SetEnv\n");
        SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
        exit(0);
      }
      // 2. allocate connection handle, set timeout
      V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc); 
      if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
      {
        printf("Error AllocHDB %d\n",V_OD_erg);
        SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
        exit(0);
      }
      SQLSetConnectAttr(V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0);
      // 3. Connect to the datasource "web" 
      V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "Test", SQL_NTS,
                                         (SQLCHAR*) "root", SQL_NTS,
                                         (SQLCHAR*) "", SQL_NTS);
      if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
      {
        printf("Error SQLConnect %d\n",V_OD_erg);
        SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, 
                      V_OD_stat, &V_OD_err,V_OD_msg,100,&V_OD_mlen);
        printf("%s (%d)\n",V_OD_msg,V_OD_err);
        SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
        exit(0);
      }
      printf("Connected !\n");
      V_OD_erg=SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt);
      if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
      {
        printf("Fehler im AllocStatement %d\n",V_OD_erg);
        SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
        printf("%s (%d)\n",V_OD_msg,V_OD_err);
        SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
        exit(0);
      }
        SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,150,&V_OD_err);
        SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,150,&V_OD_err);
      
        V_OD_erg=SQLExecDirect(V_OD_hstmt,"SELECT dtname,iduser FROM web order by iduser",SQL_NTS);   
        if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
        {
           printf("Error in Select %d\n",V_OD_erg);
           SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat,&V_OD_err,V_OD_msg,100,&V_OD_mlen);
           printf("%s (%d)\n",V_OD_msg,V_OD_err);
           SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
           SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
           SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
           exit(0);
        }
        V_OD_erg=SQLNumResultCols(V_OD_hstmt,&V_OD_colanz);
        if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
        {
            SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
            SQLDisconnect(V_OD_hdbc);
            SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
            SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
            exit(0);
        }
        printf("Number of Columns %d\n",V_OD_colanz);
        V_OD_erg=SQLRowCount(V_OD_hstmt,&V_OD_rowanz);
        if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
        {
          printf("Number of RowCount %d\n",V_OD_erg);
          SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
          SQLDisconnect(V_OD_hdbc);
          SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
          SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
          exit(0);
        }
        printf("Number of Rows %d\n",V_OD_rowanz);
        V_OD_erg=SQLFetch(V_OD_hstmt);  
        while(V_OD_erg != SQL_NO_DATA)
        {
         printf("Result: %d %s\n",V_OD_id,V_OD_buffer);
         V_OD_erg=SQLFetch(V_OD_hstmt);  
        }  ;
        SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
        SQLDisconnect(V_OD_hdbc);
        SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
        SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
        return(0);
    }
    
    
    

    2.QT下进行ODBC编程 
    QT 3.0提供了Data Table、Data Browser和Data View三个与数据库相关的控件。你可以在QT的Project设置你要连接的数据库,Driver一栏中选择QODBC3即可,其它选项你一看就明白了。上述的三个数据库控件的使用方法可以参见QT中相应文档,也很好使用的。


    参考资料

    1. 微软的ODBC主页: http://www.microsoft.com/data/odbc/
    2. UnixODBC的主页: http://www.unixodbc.org
    3. FreeODBC的主页: http://www.jepstone.net/FreeODBC/
    4. EasySoft的主页: http://www.easysoft.com
    5. TrollTech的QT 3.0文档主页: http://doc.trolltech.com/3.0/

    展开全文
  • unixODBC安装及使用,连接达梦数据库

    千次阅读 2019-03-24 19:35:03
    unixODBC-2.3.1.tar.gz 下载连接:http://www.kuaipan.cn/file/id_50825311541007530.htm centos7上安装和配置 下载一个安装包 uniODBC2.3.1 cd /opt tar -zxvf unixODBC-2.3.1.tar.gz cd unixODBC-2.3.1 ...
  • unixODBC各个版本下载(官网)

    千次阅读 2018-10-23 15:53:25
    做个记录,在官网中扒到的一个ftp访问方式,发现竟然是没有做加密的,很开心。 其中有很多UnixODBC的版本,不过也还是不太全的。 链接如下: ftp://ftp.unixodbc.org/pub/unixODBC/...
  • Linux下通过ODBC连接数据库

    万次阅读 2017-08-12 20:08:24
    Linux平台下通过ODBC连接MYSQL与ORCALE数据库的安装,配置
  • unixODBC-2.2.11

    2020-07-30 23:30:19
    unixODBC-2.2.11
  • 安装及配置unixODBC

    万次阅读 2019-06-29 09:44:35
    转载请注明:... 第一步:访问http://www.unixodbc.org/下载最新的安装包unixODBC-2.3.4.tar.gz $ tar xvfzunixODBC-2.3.4.tar.gz 默认情况下,unixODBC将被安装到/usr/local下。普通用户没有权限,因...
  • unixODBC 编译、安装、卸载

    万次阅读 2011-12-13 15:24:39
    编译步骤:   1. 注意在以前做 make install 的目录下先做 make uninstall   2. 删除现有的解压后的目录 ... cp -r unixODBC-2.2.14 unixODBC-2.2.14.orig   4. 打 patch  patch -N -p
  • 我查看了 /usr/local/unixODBC下的 etc/odbc.ini里面是有配置记录的 而且 用[root@localhost unixODBC]# bin/isql -v zzq_gy_tm_local sa kkzzz1112332442557788  来测试也可以成功连上 但是就是perl...
  • 查看unixODBC安装信息

    千次阅读 2018-03-22 09:40:08
    yum安装的unixODBC,后面很多配置找不到路径,这时候就需要用到命令查看unixODBC安装位置了。odbcinst -j其实就这么简单
  • 初次接触UnixODBC,从安装到配置折腾了不少时间; 今天打算新加一个数据源,发生如下问题: 1. 配置数据源时,配置项理解错误; DSN是ODBC的段名,ServerName是在tnsnames.ora中配置的段名 2. 在.etc/.odbc.ini中...
  • 转载请注明:... 提示libmyodbc5.so文件不存在,但确实存在。 解决方法: cd /.../unixODBC/lib ln -s libodbcinst.so.2.0.0 libodbcinst.so.1 ln -s libodbc.so.2.0.0 libodbc...
  • 问题描述: 达人们,帮忙诊断下是什么问题 环境:  服务端:CentOs5.5 + oracle 10.2.1, 数据库的...客户端: CentOs5.5 + oracle client 10.2.0 + unixODBC2.3.0, 环境变量为: NLS_LANG=AMERICAN_AMERICA.AL3
  • Perl或者Python脚本去连接Vertica数据库

    千次阅读 2015-02-12 22:08:04
    背景: ETL服务器不支持连接Vertica数据库操作,但是我们可以通过ETL服务器去调用Perl或者Python脚本去连接Vertica数据库。   部署环境 下面我们要介绍如何在ETL环境上通过Python...(1) unixODBC:  Linux上面的ODBC
  • 红帽子装oracle时unixODBC-2.2.14-12.el6_3.i686.rpm unixODBC-devel-2.2.14-12.el6_3.i686.rpm这两个文件依赖找不到.安装失败 谷歌搜到下面的网址. ...
  • centos下ODBC安装配置

    千次阅读 2018-07-03 11:34:54
    1.安装ODBC驱动程序,命令安装ODBCinstall unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel 安装mysql-connector-odbc驱动yum install mysql-connector-odbc -y2配置ODBC /etc/odbc.ini3 系统配置odbcinst...
  • 解决This system is not registered with RHN

    千次阅读 2016-02-18 15:35:44
    [root@oggs]# rpm -ivh unixODBC-devel-2.2.11-10.el5.i386.rpm  warning: unixODBC-devel-2.2.11-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID e8562897 error: Failed dependencies:  
  • Qt 5.6 编译加载ODBC

    千次阅读 2016-07-17 15:11:29
    1、下载unixODBC源码  打开http://www.unixodbc.org/官方网站,下载源代码后解压缩 我下载的是unixODBC-2.3.4.tar.gz  tar -zxvf unixODBC-2.3.4.tar.gz  cd unixODBC-2.3.4 ./configure --pre
1 2 3 4 5 ... 20
收藏数 10,602
精华内容 4,240
关键字:

unixodbc