CentOS 上 Fortran 连接数据库的实用方法
一、总体思路
二、环境与依赖准备
三、连接方式对比与选择
| 数据库 | 推荐接口 | 关键库/包 | 编译链接示例 | 适用场景 |
|---|---|---|---|---|
| MySQL | C API(libmysqlclient)+ Fortran ISO C Binding | mysql-devel | gfortran app.f90 -lmysqlclient | 通用、生态成熟 |
| PostgreSQL | libpq + ISO C Binding | postgresql-devel | gfortran app.f90 -lpq | 原生支持、扩展丰富 |
| Oracle | OCI(C API)或 Pro*FORTRAN(传统) | Instant Client + SDK | gfortran app.f90 -lclntsh | 高性能、复杂事务 |
说明:MySQL/PostgreSQL 通过 C API 在 Fortran 中调用最为直接;Oracle 官方提供 OCI 可被 C/Fortran 调用,传统 Pro*FORTRAN 亦可用但配置复杂、维护成本高。
四、最小示例 MySQL 连接代码与编译
program connect_mysql
use, intrinsic :: iso_c_binding
implicit none
interface
function mysql_init(ptr) bind(c, name="mysql_init")
import c_ptr
type(c_ptr), value :: ptr
type(c_ptr) :: mysql_init
end function mysql_init
function mysql_real_connect(conn, host, user, passwd, db, port, unix_socket, client_flag) &
bind(c, name="mysql_real_connect")
import c_ptr, c_int, c_char
type(c_ptr), value :: conn
character(kind=c_char), intent(in) :: host(*), user(*), passwd(*), db(*)
integer(c_uint), value :: port
type(c_ptr), value :: unix_socket
integer(c_ulong), value :: client_flag
integer(c_int) :: mysql_real_connect
end function mysql_real_connect
subroutine mysql_close(conn) bind(c, name="mysql_close")
import c_ptr
type(c_ptr), value :: conn
end subroutine mysql_close
end interface
type(c_ptr) :: conn
integer(c_int) :: rc
conn = mysql_init(c_null_ptr)
if (.not. c_associated(conn)) then
print *, "mysql_init failed"
stop 1
end if
rc = mysql_real_connect(conn, &
"localhost"//c_null_char, & ! host
"your_user"//c_null_char, & ! user
"your_pass"//c_null_char, & ! password
"your_db"//c_null_char, & ! database
0_c_uint, c_null_ptr, 0_c_ulong)
if (rc == 0) then
print *, "mysql_real_connect failed"
call mysql_close(conn)
stop 2
end if
print *, "Connected to MySQL successfully."
call mysql_close(conn)
end program connect_mysql
五、PostgreSQL 与 Oracle 的要点