CentOS 上 Fortran 连接数据库的实用方案
一、总体思路
- 在 CentOS 上,Fortran 没有统一的数据库接口,工程上常用两条路径:
- 通过 ISO C Binding 调用数据库的原生 C 客户端库(如 MySQL 的 libmysqlclient、PostgreSQL 的 libpq);
- 使用第三方 Fortran 封装(如 f90SQL)简化调用。
- 无论采用哪种方式,都需要先安装数据库客户端库与开发包,编译时链接对应库,并确保数据库服务、网络与权限配置正确。
二、环境与依赖准备
- 安装编译器与工具:建议安装 gfortran 及基础开发工具。
- 安装数据库客户端开发包(示例):
- MySQL:sudo yum install mysql-devel
- PostgreSQL:sudo yum install postgresql-devel
- 远程访问时,开放防火墙端口(以 MySQL 默认端口 3306 为例):
- 开放端口:sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
- 重载规则:sudo firewall-cmd --reload
- 确保数据库服务已启动(以 MySQL 为例):sudo systemctl start mysqld && sudo systemctl enable mysqld
- 数据库侧授权(示例):
- 创建用户并授权:GRANT ALL PRIVILEGES ON database. TO ‘username’@‘host’; FLUSH PRIVILEGES;*
- 如启用 SELinux,为数据库端口添加策略(以 MySQL 3306 为例):
- sudo semanage port -a -t mysqld_port_t -p tcp 3306(若 semanage 不存在,先安装 policycoreutils-python)。
三、方式一 ISO C Binding 调用原生 C 库(以 MySQL 为例)
- 思路:用 Fortran 的 iso_c_binding 封装并调用 libmysqlclient 的 C API(如 mysql_init、mysql_real_connect、mysql_close 等)。
- 编译命令示例(按实际库路径与库名调整):
- gfortran -o myprogram myprogram.f90 -lmysqlclient
- 连接要点:
- 初始化连接句柄,调用 mysql_real_connect 传入主机、用户、密码、库名、端口、套接字与客户端标志;
- 检查返回值与错误码,失败时调用 mysql_error 获取错误信息;
- 使用完成后 mysql_close 释放连接。
- 说明:PostgreSQL 可采用类似方式调用 libpq 的 C 接口(如 PQconnectdb、PQstatus、PQexec、PQfinish 等)。上述方法适用于需要在 Fortran 中直接控制连接与查询流程的场景。
四、方式二 使用 f90SQL 等 Fortran 封装库
- 特点:f90SQL 提供面向 Fortran 的更友好接口,可通过配置 DSN(数据源名称)及用户名、密码进行连接,减少直接调用 C API 的工作量。
- 基本步骤:
- 安装 f90SQL 及其依赖;
- 配置 DSN(包含主机、端口、数据库、驱动/库路径等);
- 在 Fortran 中调用 f90SQL 提供的连接、执行与取数接口;
- 编译时链接 f90SQL 与数据库客户端库。
- 适用场景:希望以更少的底层细节快速完成数据库连接与基本 CRUD 操作。
五、Oracle 连接方案(OCI 或 Instant Client)
- 方案 A(本地/同机有 Oracle):使用 OCI(Oracle Call Interface)。OCI 是 Oracle 提供的底层 C 接口,官方说明支持包括 FORTRAN 在内的第三代语言通过 SQL 操作 Oracle 对象,性能与可控性较好。
- 方案 B(无本地 Oracle,远程访问):安装 Oracle Instant Client(Basic 或 Basic Light,必要时配合 SQL*Plus),并配置 tnsnames.ora 或使用 Easy Connect 字符串。
- 典型环境变量:ORACLE_HOME、TNS_ADMIN、LD_LIBRARY_PATH、NLS_LANG、PATH;
- 连接串格式示例:[用户名]/[密码]@//[主机名]:[端口]/[服务名](如 sqlplus sys/[密码]@//localhost:1521/XEPDB1 as sysdba)。
- 说明:Instant Client 为轻量客户端,便于在 CentOS 服务器上配置 Oracle 访问环境。