ubuntu16.04通过odbc(用的C++)访问另一台centos上的达梦数据库

来源:互联网 发布:zimg php 编辑:程序博客网 时间:2024/06/09 13:43

背景

我的项目中需要C++访问达梦数据库,所以花了很大功夫来实现这个功能。
通过和达梦官方的邮件联系之后,得知现在达梦数据库(dm7)是不能在ubuntu版本的linux上安装server的,但是client还是可以安装在ubuntu上的。所以可以通过odbc来访问安装在centos上的达梦数据库。

服务端达梦的安装

在centos上安装的教程如下连接:http://blog.csdn.net/allens_zhou/article/details/8575400

ubuntu客户端配置:

首先要安装unixODBC,网上有教程;

然后安装soci,这是它的官网:soci.sourceforge.net/doc/3.2/,具体安装使用过程网上也有教程。

然后配置odbc manager和odbc driver

这个博客对我的帮助很大:http://www.itpub.net/thread-1824202-1-1.html,它指明了配置达梦odbc可以不需要libdmOdbcSet.so这个库,只要libdodbc.so就行了。具体操作见下:

  • 安装完odbc后,odbcinst –j 来查看安装位置等信息
  • 配置 odbcinst.ini,作用就是注册DM7的ODBC驱动,该驱动名称为DM7,内容如下:
    [DM7]
    Description = dm odbc
    Driver = /opt/dmdbms/bin/libdodbc.so
  • 配置 odbc.ini,作用就是创建系统DSN,名称为dm,调用名为DM7的ODBC驱动,内容如下:
    [dm]
    Description = dm7 dsn
    Driver = DM7
    SERVER =127.0.0.1
    UID = SYSDBA
    PWD = SYSDBA
    TCP_PORT = 5236
  • 配置完成之后,直接在终端运行:isql dm来测试,如果返回以下信息,测说明配置成功:
    [root@localhost opt]# isql dm
    +—————————————+
    | Connected! |
    | |
    | sql-statement |
    | help [tablename] |
    | quit |
    | |
    +—————————————+
  • 还可以建表,如create table student (id int, name char(128), score int)
  • 插入数据: insert into student (id, name, score) values (1,’myname’, 100)

C++通过soci访问达梦例子:

main.cpp:

#include <soci/soci.h>#include <soci/odbc/soci-odbc.h>#include<soci/mysql/soci-mysql.h>#include <soci/postgresql/soci-postgresql.h>#include<iostream>#include<istream>#include<ostream>#include<string>#include<exception>#include<unistd.h>using namespace std;using namespace soci;int main() {//  session sql("mysql://host=127.0.0.1 dbname=student user=root password=123");//建立连接//  connection_pool pool(10);//  for (int i=0; i<10; i++) {//      session &sql = pool.at(i);//      sql.open//  }    session sql("odbc://DSN=dm");    session sql0(odbc, "DSN=dm");    session sql1(odbc, "DSN=dm");    unsigned id=0;    string name("lxc_00");    int score=100;    try {        sql<<"insert into student (id, name, score) values (:item_0,:item_1, :item_2)", use(id,"item_0"),use(name,"item_1"), use(score, "item_2");    } catch (exception const & e) {        cerr<<"Error::"<<e.what()<<endl;    }    sql.close();    sql0.close();    sql1.close();}

makefile:

all = allcc = g++ -std=c++11 -Wall -gsource = main.cppLIB = -lpq -lsoci_core -lsoci_postgresql -lmysqlclient -ldl -lpthread -lsoci_odbcINCLUDE = -I/usr/include/mysql  $(all): $(source)        $(cc) -o main $(source) $(LIB) $(INCLUDE)clean:    rm *.o

这样就可以用C++访问达梦了!

阅读全文
0 0
原创粉丝点击