背景

我的项目中需要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 = all
cc = g++ -std=c++11 -Wall -g
source = main.cpp
LIB = -lpq -lsoci_core -lsoci_postgresql -lmysqlclient -ldl -lpthread -lsoci_odbc
INCLUDE = -I/usr/include/mysql  

$(all): $(source)
        $(cc) -o main $(source) $(LIB) $(INCLUDE)
clean:
    rm *.o

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

Logo

更多推荐