混合编程--fortran调用C++采用ODBC形式连接MYSQL数据库

前言

最近项目中用到了fortran语言,需要与数据库连接,将fortran程序计算的结果存入数据库以便后期需要,在调研的时候有两种方法:1,利用fortran系列的f90sql连接数据库;2,采用混合编程,就是采用某种语言与数据库连接,再用fortran调用接口函数,进入视线的有python,c++,c;最后采用第二种方案,采用fortran + C++的形式;理由如下:
1.本渣对fortran不熟悉,且f90sql在网上资料比较少,应该不是很好弄;
2.我们项目组的fortran程序运行环境是vs2010+ivf,所有采用第二种方法,一样的IDE应该会好弄一点;

fortran调用C++函数

由于我们的fortran与C++运行环境IDE都是vs2010,那就省了很多事了,直接参考链接[link text]https://wenku.baidu.com/view/d5a96a3911661ed9ad51f01dc281e53a580251c7.html主要是设置单解决方案多项目,设置项目依赖项,设置多线程调试等,实现简单的fortran调用C++中的sub函数,注意设置你的操作系统的位数与当前项目平台位数是否符合;

C++连接数据库

原来做项目都是用java的类似mybatis的框架直接连,这就很舒服,但是这次用c++就很难受,用c++的方法连接数据库有两种方式:
1.利用mysql的API连接数据库;
2.利用ODBC数据源连接;
两种方法在网上都有很多方法可自行度娘,第一种方法不知怎么的在我的电脑上运行不了,代码都是网上已经验证过的代码在我的电脑上运行之后就有0xc000007b无法正常启动错误,我也照着网上的方法找了一些东西,修复之后还是没有解决,一气之下放弃这种方法,第二种是利用ODBC数据源方式,如何配置ODBC数据源请参考[link text](http://jingyan.baidu.com/article/5553fa82e783d965a23934e7.html)关于连接代码可以参考[link text](http://blog.csdn.net/lbcab/article/details/51329207)这篇博客的优点是面向对象式编程,增删查该的代码都有,可以作为参考;最坑的是:我建立了64bit的ODBC数据源(因为我的mysql以及我的操作系统都是64bit的),连接的时候告诉我找不到数据源,后来看到网上的帖子讲要配置32bit的ODBC,我就下载了32bit的MYSQL Connector,后来就连上了;至今没有搞懂为什么??如果你也连不上,那就试试32bit的odbc吧。

实现调用代码:

//使用封装类的方式对数据库进行操作,可以实现执行sql语句
//直接连接数据库,可以使用,
_ConnectionPtr  m_pConnection;// 初始化COM,创建ADO连接等操作
CoInitialize(NULL);   
m_pConnection.CreateInstance(__uuidof(Connection));   
try 
{  
//设置连接时间  
m_pConnection->ConnectionTimeout = 5;   
}  
catch(_com_error &e)  
{  
    MessageBox(NULL, e.Description(), _T(""), MB_OK); 
} 

//使用封装类的方式对数据库进行操作,可以实现执行sql语句
//OpenDatabase()的前提条件是m_pConnection不为空
CDataOperator data;
if(data.OpenDatabase("3dvisualization_test","root","123456")){
    cout<<"CONNECT OK"<<endl;
}else{
    cout<<"connect error"<<endl;
}
bool flag = data.ExecuteSQL("INSERT INTO experiment VALUES (26, 'Bill', 23, 33,43)");
if(flag){
    std::cout<<"插入成功"<<std::endl;
}else{
    std::cout<<"插入失败"<<std::endl;   
}
system("pause");

调用运行之后就可以显示插入成功了;

写在最后

最后就是将两块的东西整合到一个方面,尽量做到代码的服用,实现面向对象的编程,已提高效率;这只是一个demo,后来如果遇到什么问题,再来更新。。。就这样吧!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fortran 调用 C++ 动态库可以分为以下步骤: 1. 编写 C++ 代码,并将需要导出的函数声明为 `extern "C"`,以便 Fortran 可以调用。 2. 将 C++ 代码编译成动态库,生成 .so 文件。 3. 在 Fortran 代码中声明需要调用C++ 函数,使用 `external` 关键字声明函数名、参数列表和返回值类型。 4. 在 Fortran 代码中使用 `iso_c_binding` 模块中的 `c_f_pointer()` 函数C++ 函数的指针转换为 Fortran 中的指针。 5. 在 Fortran 代码中调用 C++ 函数,使用 `call` 语句调用。 以下是一个简单的示例代码,演示了 Fortran 调用 C++ 动态库的过程: **C++ 代码** ```cpp // example.cpp #include <iostream> extern "C" void hello() { std::cout << "Hello, C++!" << std::endl; } ``` **编译 C++ 代码成动态库** ```bash g++ -shared -fPIC example.cpp -o libexample.so ``` **Fortran 代码** ```fortran ! example.f90 module example implicit none interface subroutine hello() bind(C, name="hello") end subroutine hello end interface end module example program test use iso_c_binding use example implicit none interface subroutine c_hello() bind(C, name="hello") end subroutine c_hello end interface type(c_ptr) :: ptr procedure(c_hello), pointer :: c_func ! 将 C++ 函数的指针转换为 Fortran 中的指针 call c_f_pointer(c_func, ptr) ! 调用 C++ 函数 call c_func() end program test ``` 注意事项: 1. 在 Fortran 代码中声明 C++ 函数时,需要使用 `bind(C)` 关键字指定调用约定。C++ 函数的名称需要使用 `name` 属性指定。 2. 在 Fortran 代码中调用 C++ 函数时,需要将 C++ 函数的指针转换为 Fortran 中的指针,以便在 Fortran调用

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值