加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

linux下访问sqlserver数据库 ,ODBC+freetds 完美配置

(2015-01-30 17:08:53)
标签:

it

    最近产品需要做一个数据上传功能。客户要求直接写入SQLserver数据库。之前QT连接数据库是默认来连sqlite数据库。由于sqlite是QT默认自带的操作起来比较简单,但是SQLserver QT没有带驱动所以需要安装驱动插件。下面我们来看一下是QT支持SQLServer所需要的插件。
做两部分 记录,
1.Ubuntu 12.04 下访问 windows 或远程服务器的 sql server,
2. 在 ARM 开发板下,交叉编译 移植,freetds,unixODBC。
Ubuntu 篇

一、unixODBC

unixODBC是一个可以让你在Unix/Linux系统下使用ODBC(Open Database Connectivity,开放数据库互连)来连接数据库的组件。本文安装unixODBC与下面的Freetds主要是为了isee索引擎可以在linux系统下使用ODBC来连接数据。

下载源码包 unixODBC-2.3.2:http://pan.baidu.com/s/1hq25YjM

 为了 不受用户 权限的干扰, 以及以后的步骤不出错,  sudo  -i   获得当前root 权限(重要) 以后操作 不必要加 sudo 就有 超级权限了。

  1. cd unixODBC-2.3.2
  2. 配置 安装路径 
  3. ./configure --prefix=/usr/local/unixODBC
  4. 编译 ,安装,
  5. make 
  6. make install 
  7. 在/usr/local/unixODBC 下 安装成功
  8. 二、编译QT的ODBC驱动插件

  9. 下载QT源码:http://pan.baidu.com/s/1qW3BAEC

  10. 解压后进入:QTDIR/src/plugins/sqldriver/odbc/

  11. qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc" odbc.pro(此 qmake 是linux下的 qt,区别 交叉编译的 qmake)

  12. 编译完成后:将libqslqodbc.so 拷贝到QT的安装目录下的plugins/sqldriver里面
  13. 如果qt文件夹  找不到,还有个简单的办法(需要 虚拟机,或者主机联网操作)

  14. apt-get install libqt4-sql-odbc

    dpkg -L libqt4-sql-odbc


  15. 在qtcreator  创建 控制台应用,写下面测试程序,

  16. 注: 在 工程文件 xxx.pro  第一行加上  QT    += core sql   不然 不能找到头文件 sqldatabase

    #include

    #include

    #include

    #include

    #include

  17. #include


  18.                                    

    int main(int argc, char *argv[])

    {

        QCoreApplication a(argc, argv);

        qDebug()<<QSqlDatabase::drivers();


        // 建立连接

        QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");

        db.setDatabaseName("testdsn");

        db.setPort(1433);

        db.setUserName("root");

        db.setPassword("123456");


        if(!db.open())

        {

            qDebug("=== %s",qPrintable(db.lastError().text()));

        }else

        {

            qDebug("==== ok");

        }

  19.  return a.exec();
    }

  20. 测试 此时会有下面错误 Can't open lib 'SQL SERVER' : file not found QODBC3: Unable to connect
  21. 安装freetds

二、QT的ODBC驱动

下载:http://pan.baidu.com/s/1o60XNQi

 

  1. cd freetds-0.9.1
  2. ./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/local/unixODBC/  --with-tdsver=7.1  --enable-msdblib
  3. make 
  4. make install
  5. (prefix 配置安装路径,--with-unixodbc 关联odbc 驱动, --enable-msdblib 使能 Mssql数据库   --7.1 tds 版本)
  6. 搞定上面的 就成功一大半了,接下来再配置三个文件, 
  7. freetds.conf  ,,,   odbc.ini  ,,,,  odbcinst.ini
  8. 配置 /usr/local/freetds/etc/freetds.conf

     vi /usr/local/freetds/etc/freetds.conf

    #A typical Microsoft server

    [testdsn] # SQL Server数据源名称,可以任意取有意义的名称

    host=192.168.1.101 # 数据库主机

    port=1433 #数据库监听端口

  9. 2配置 /usr/local/unixODBC/etc/odbcinst.ini

  10. [FREETDS]

    Description = freetds driver

    Driver = /usr/local/freetds/lib/libtdsodbc.so

    Trace=yes

     

    TraceFile=/tmp/odbc.log

               3 配置 /usr/local/unixODBC/etc/odbc.ini
            [testdsn]
Driver= FREETDS    #驱动路径, 指向 odbcinst.ini
Description=MSSQL Server
Servername= testdsn   #数据源名称 DSN  指向freetds.conf 配置
Database= sqlca
运行测试程序,==== ok
如果不成功,还可以用tsql 工具测试, cd   /usr/local/freetds/bin       ./tsql  -S  testdsn  -U  用户名 -P 密码
注: tsql 也可 把路径 配置到环境变量, vi   /etc/environment      在path 加上路径即可
-S 是 上面配置的DSN 数据源 testdsn
实在不行,把 三个配置文件都拷贝到 /etc  下  重启 系统, (本人亲测)
root@ubuntu:~# tsql -S testdsn -U root -P 123456
locale is "LC_CTYPE=zh_CN.UTF-8;LC_NUMERIC=en_US.UTF-8;LC_TIME=en_US.UTF-8;LC_COLLATE=zh_CN.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=zh_CN.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=en_US.UTF-8;LC_ADDRESS=en_US.UTF-8;LC_TELEPHONE=en_US.UTF-8;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> select * from dbo.cus
2> go
此时 用QT 程序 测试  
[root@]# /sqldrivers 
("QSQLITE", "QODBC3", "QODBC") 
==== ok

在这我有必要说一下,linux下 是如何访问sql server数据库,在windows 下,我们知道,一般编程 装了ODBC 驱动就ok了,而linux下 没这么简单,需要用到FREETDS,FreeTDS是一个程序库,实现在Linux系统下访问微软的SQL数据库. 而我们只需要会配置使用就ok了
下面一篇 介绍  移植 到ARM 下的 unixodbc + freetds  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有