前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 平台 通过ODBC访问数据库

Linux 平台 通过ODBC访问数据库

作者头像
用户1278550
发布2022-01-27 14:38:59
3.1K0
发布2022-01-27 14:38:59
举报
文章被收录于专栏:idba

这是一个小众的知识点,最近做测试需要使用多种语言访问数据库,其中需要ODBC驱动访问db,这里做个记录。

一 环境准备
  1. 数据库创建好测试账号 用户名密码
  2. 安装 Libtool 1.5.10及以上版本以及 unixODBC-develyum install -y libtool unixODBC-devel
  3. 下载驱动 PolarDB-ODBC_Linux_X86_64.tar.gz
二 配置环境变量
  1. 安装驱动 解压缩 PolarDB-ODBC_Linux_X86_64.tar.gz 到 一个目录,比如 /usr/local/polardb-odbc/
  2. 配置环境变量 export LD_LIBRARY_PATH= /usr/local/polardb-odbc/lib 设置环境变量ODBCINI的路径指向。默认是 /etc/odbcinst.ini export ODBCINI= /etc/odbcinst.ini export ODBCSYSINI = /etc/
  3. 配置 odbcinst.ini文件 默认该文件内已经有 [PostgreSQL] [MySQL] 两种数据,可以增加如下内容
代码语言:javascript
复制
[POLARDB]
Description = ODBC for POLARDB
Driver      = /usr/local/polardb-odbc/lib/unix/polardb-odbc.so
Setup       = /usr/local/polardb-odbc/lib/unix/libodbcpolardbS.so
Driver64    = /usr/local/polardb-odbc/lib/unix/polardb-odbc.so
Setup64     =/usr/local/polardb-odbc/lib/unix/libodbcpolardbS.so
Database    = test_db
Servername  = 10.10.10.5
Password    = XXXXXX
Port        = 5433
Username    = test_user
Trace       = yes
TraceFile   = /tmp/odbc.log
FileUsage   = 1
  1. 连接PolarDB ,使用 isql -v POLARDB 这里的 POLARDB 就是 /etc/odbcinst.ini 文件的配置的 POLARDB 区块儿。

测试成功。

编译

需要修改 TestODBCSample.c 中 connect 函数中的 user参数的值,使用本文开头创建的数据库账号用户名。

代码语言:javascript
复制
#
INCLUDEDIRS = -I../include
#LIBPATHS= -L/usr/local/unixODBC
LIBPATHS= -L/usr/lib64/
LIBS=-lodbc -lodbcinst  -lcrypt

CC = gcc
CFLAGS = -Wall -O -g

ALL : Test1 Test2

Test1 : TestODBCSample.c
 $(CC) $< $(CFLAGS) $(INCLUDEDIRS) $(LIBPATHS) $(LIBS) -o Test1

Test2 : ODBCRefcursorSupport.c
 $(CC) $< $(CFLAGS) $(INCLUDEDIRS) $(LIBPATHS) $(LIBS) -o Test2


clean:
 rm -rf *.o Test1 Test2
遇到的问题

1.通过odbc 访问连接报错,其实 TestODBCSample.c 里面的connect 函数中的 user参数需要替换为本文开头创建的用户名。

2.编译语法问题

编译C++ 通过ODBC 访问数据库的脚本报错:

Makefile:7: *** missing separator. Stop.

其实这里涉及到 makefile的语法规则,makefile文件禁止乱用 TAB,只有命令所在的行才能且只能以TAB开头,

其他的如,make变量的定义、赋值,make内定函数如(error "strings")都不能以TAB开头,不然make会将其作为命令来处理。

如果排除了TAB用空格代替的问题后、以及由中文“:”等问题后,问题还存在 那么很可能是文件编码格式的问题 查看一下Makefile 文件编码格式是不是utf-8的,还带有BOM标记在文件头

代码语言:javascript
复制
[root@db1 samples]# xxd -l 16 Makefile
0000000: 230a 494e 434c 5544 4544 4952 5320 3d20  #.INCLUDEDIRS =
参考文章
  1. https://help.aliyun.com/document_detail/148105.html
  2. https://www.cnblogs.com/flying-tiger/p/5950600.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 环境准备
  • 二 配置环境变量
  • 编译
  • 遇到的问题
  • 参考文章
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档