当前位置: 首页 > news >正文

深度解析:基于 ODBC连接 KingbaseES 数据库的完整操作与实践

目录

    • 引言
    • 一、技术背景与前置准备
      • 1.1 ODBC技术架构解析
      • 1.2 KingbaseES ODBC 传输流程
      • 1.3 环境配置要求
    • 二、Linux 环境安装并部署驱动
      • 2.1 unixOdbc 包下载
      • 2.2 创建文件夹
      • 2.3 配置 Odbc 数据源
      • 2.4 测试 Odbc 驱动能否连接到数据库
    • 三、程序源码开发
      • 3.1 导入 unixOdbc 的头文件
      • 3.2 初始化 Odbc 环境
      • 3.3 连接数据库
      • 3.4 创建测试表
      • 3.5 插入数据
      • 3.6 结果查询
      • 3.7 释放资源
    • 四、KingbaseES ODBC扩展连接属性
    • 五、总结

引言

在当今企业级数据架构中,数据库的灵活连接能力直接决定了系统的扩展性和兼容性。KingbaseES作为国产数据库的佼佼者,其ODBC(Open Database Connectivity)接口为开发者提供了跨语言、跨平台的标准化连接方案。本文将深度拆解如何通过ODBC实现与KingbaseES的无缝对接,并完成从建表到数据操作的完整闭环,以真实可复现的代码案例快速掌握核心技术。

KingbaseES 数据库【系列篇章】

No.文章地址(点击进入)
1电科金仓KingbaseES数据库解析:国产数据库的崛起与技术创新
2KingBase数据库迁移利器:KDTS工具深度解析与实战指南
3KingBase数据库迁移利器:KDTS工具 MySQL数据迁移到KingbaseES实战
4电科金仓KingbaseES V9数据库:国产数据库的自主创新与行业实践深度解析
5KingbaseES客户端工具Ksql使用全指南:从安装到高级操作
6Spring JDBC与KingbaseES深度集成:构建高性能国产数据库应用实战

一、技术背景与前置准备

1.1 ODBC技术架构解析

在这里插入图片描述

ODBC(开放数据库连接)提供了一套标准接口,使应用程序能够访问多种数据源。开发者无需为不同数据源重新编译应用程序代码。当应用程序需要访问特定数据源时,可通过调用相应的数据库驱动程序(动态链接库)实现连接。这种架构使得应用程序能够灵活访问所有支持ODBC的数据源。

1.2 KingbaseES ODBC 传输流程

在这里插入图片描述

KingbaseES ODBC 是一款基于标准 C 语言开发的 ODBC 驱动程序,完全兼容 Microsoft ODBC 3.5 及以上标准规范。该驱动程序支持应用程序实现以下核心功能:建立数据库连接、执行 SQL 语句、获取查询结果、检索状态及错误信息,以及管理事务和连接的生命周期。

1.3 环境配置要求

需要当前环境支持 Odbc 开发

  • Linux:请确认系统已安装 unixOdbc 组件
  • Windows:系统默认自带 Odbc 支持
  • 所有平台:需确保开发环境已配置 Odbc 功能

系统架构

  • Linux:支持 x86_64、ARM、LoongArch、MIPS 和 SW 架构
  • Windows:V9 版本新增 64 位系统支持

编译器

  • Linux:仅兼容基于 glibc 的编译器
  • Windows:需要 MSVC 2013 运行时库支持

满足上述条件后,可通过官方发布的数据库安装包、官网下载页的接口侧(https://www.kingbase.com.cn/download.html)下载与系统架构匹配的 ODBC 驱动程序

二、Linux 环境安装并部署驱动

2.1 unixOdbc 包下载

命令:

./configure --prefix=`pwd`/release
make
make install

安装完成后,通过一下命令查看版本

odbcinst --version

结果:

unixODBC 2.3.4

2.2 创建文件夹

接下来我们创建测试程序文件夹 test_odbc,后面的所有操作都在这个路径下面进行

目录:

test_odbc  
├── lib  
│   ├── kdbodbcw.so  
│   ├── libcrypto.so.1.1  
│   ├── libkci.so.5  
│   ├── libodbcinst.so.2  
│   └── libssl.so.1.1  
├── Makefile  
├── odbc.ini  
├── odbcinst.ini  
└── test_odbc.c   

2.3 配置 Odbc 数据源

第一步:新建文件 odbcinst.ini

配置 odbcinst.ini 文件如下,其中创建了一个名为 kdbodbc test driver 的驱动配置项,通过 Driver 参数指定了 Odbc 驱动的具体路径:

[kdbodbc test driver]
Description = KingbaseES ODBC driver (Unicode version), for regression tests
Driver = /home/kingbase/test_odbc/lib/kdbodbcw.so

第二步:新建文件 odbc.ini

配置 odbc.ini 文件如下,创建名为 KingbaseES 的 ODBC 数据源配置,其中驱动程序路径指向 kdbodbc test driver,该配置文件用于设置 ODBC 连接参数和相关配置信息:

[KingbaseES]
Description     = kdbodbc regression test DSN
Driver          = kdbodbc test driver
Servername      = 127.0.0.1
Port            = 54321
Username        = system
Password        = 123456
Database        = test

修改配置文件后,将配置路径添加到当前命令行窗口的环境变量,即可让 unixOdbc 正确识别 Odbc 驱动配置。

下面以当前目录下的 odbcinst.ini 和 odbc.ini 文件为例,演示如何将其添加到环境变量中:

export ODBCSYSINI=.
export ODBCINSTINI=./odbcinst.ini
export ODBCINI=./odbc.ini

配置完成后,通过 odbcinst -j 查看信息进行验证:

unixODBC 2.3.4
DRIVERS............: ./
SYSTEM DATA SOURCES: ./odbc.ini
FILE DATA SOURCES..: ./ODBCDataSources
USER DATA SOURCES..: ./odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

2.4 测试 Odbc 驱动能否连接到数据库

使用 unixOdbcisql DSNName 命令可以快速测试驱动是否成功加载并验证数据库连接状态

$ isql KingbaseES
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

三、程序源码开发

3.1 导入 unixOdbc 的头文件

#include "sql.h"
#include "sqlext.h"

3.2 初始化 Odbc 环境

通过 SQLAllocHandle() 函数创建 SQLHENV 环境句柄实例,成功创建后,再调用 SQLSetEnvAttr() 函数对该环境句柄进行属性设置

SQLHENV hEnv;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);

3.3 连接数据库

通过 SQLAllocHandle() 函数创建 SQLHDBC 实例后,调用 SQLConnect() 方法建立数据库连接。

SQLHDBC hDbc;
SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
// SQLConnect(hDbc, DSN, SQL_NTS, user, SQL_NTS, password, SQL_NTS)
SQLConnect(hDbc, (SQLCHAR*)"KingbaseES", SQL_NTS, (SQLCHAR*)"system", SQL_NTS, (SQLCHAR*)"123456", SQL_NTS);

3.4 创建测试表

通过 SQLAllocHandle() 创建 SQLHSTMT 句柄后,可使用 SQLExecDirect() 直接执行建表 SQL 语句,无需进行参数绑定操作

SQLHSTMT hStmt;const char *sqlDropTb = "drop table if exists test_odbc;";
const char *sqlCreateTb = "create table test_odbc (id int, name varchar(100));";// 创建表
SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);SQLExecDirect(hStmt, (SQLCHAR*)sqlDropTb, SQL_NTS);
SQLExecDirect(hStmt, (SQLCHAR*)sqlCreateTb, SQL_NTS);

3.5 插入数据

要插入数据,首先通过SQLPrepare()创建预处理语句,然后使用SQLBindParameter()绑定参数值,最后调用SQLExecute()执行操作

const char *sqlInsertTb = "insert into test_odbc values (?, ?)";
SQLINTEGER inId = 1;
SQLCHAR inName[] = "KKKingbase";SQLPrepare(hStmt, (SQLCHAR*)sqlInsertTb, SQL_NTS);SQLBindParameter(hStmt, 1, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &inId, 0, NULL);
SQLBindParameter(hStmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 100, 0, inName, 0, NULL);SQLExecute(hStmt);

3.6 结果查询

SQLRETURN ret;
const char *sqlSelectTb = "select * from test_odbc";
SQLINTEGER outId;
SQLCHAR outName[100];SQLExecDirect(hStmt, (SQLCHAR*)sqlSelectTb, SQL_NTS);// 绑定查询结果
SQLBindCol(hStmt, 1, SQL_C_LONG, &outId, 0, NULL);
SQLBindCol(hStmt, 2, SQL_C_CHAR, outName, sizeof(outName), NULL);// 获取查询结果并打印
while ((ret = SQLFetch(hStmt)) != SQL_NO_DATA) {if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {printf("ID: %d, Name: %s\n", outId, outName);} else {CHECK_ERROR(ret, hStmt, SQL_HANDLE_STMT);}
}

3.7 释放资源

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
SQLDisconnect(hDbc);
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

四、KingbaseES ODBC扩展连接属性

在连接串中处理必须设定的连接属性有Driver,Servername,Port,Username(UID),Password(PWD),Database,在设置上述六个属性值时应避免包含没有用大括号“”包围的字符“[] (),;?=*!@”。更多SQLDriverConnect()方法的调用,参考疑难解答部分的内容。其中,需要注意的是连接串中关键字的大小写。

配置的选项值将应用于该连接上的所有语句,但部分选项可通过设置连接属性或语句属性进行覆盖。这种情况下,原设定值将被新设置的选项值取代。具体连接属性下图列出:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、总结

本文通过完整的技术解析和实操案例,展示了如何通过ODBC连接KingbaseES数据库并完成基本数据操作。从环境配置到高级调优,每个环节都提供了可复现的代码示例和最佳实践建议。掌握这些技术不仅能帮助开发者快速构建企业级应用,更能深入理解数据库连接的本质原理。

博主使用感受:在国产化数据库快速发展的今天,KingbaseES凭借其高性能、高兼容性的ODBC接口,正在成为越来越多企业数据库迁移和新建项目的首选。技术探索永无止境,愿每位开发者都能在数据库连接的道路上越走越远,创造出更多价值。

http://www.dtcms.com/a/392200.html

相关文章:

  • springboot川剧科普平台(代码+数据库+LW)
  • Vue中的监听方式
  • CentOS 7系统解决yum报错
  • GD32VW553-IOT V2开发版【温湿度检测】
  • Perplexica - 开源AI搜索引擎,让搜索更智能
  • Windows在VSCode Cline中安装Promptx
  • 深入解析 Spring AI 系列:解析返回参数处理
  • LeetCode:34.合并K个升序链表
  • 精细化关键词优化:提升SEO效果的长尾策略解析
  • Go基础:Go语言详细介绍,环境搭建,及第一个程序详解
  • 【开题答辩全过程】以 HL新闻为例,包含答辩的问题和答案
  • docker运行wonderShaper实现网卡限速
  • Windows 安装 Docker Desktop 到 D 盘完整教程(含迁移方案)
  • 基于陌讯AI检测算法本地化部署教程:基于Docker的环境配置与性能测试
  • Docker Docker Compose 完整入门与实用技巧
  • ARP协议工作原理分析(基于Wireshark)
  • CKS-CN 考试知识点分享(14) Istio网络策略
  • TCP 协议全解析:握手、挥手、重传与流控的深度剖析
  • 计算机视觉(opencv)实战二十七——目标跟踪
  • 深度学习中神经网络与损失函数优化
  • 整体设计 完整的逻辑链条 之1 点dots/线lines/面faces 的三曲:三进三出的三个来回
  • 微调基本理论
  • LeetCode算法日记 - Day 48: 课程表II、火星词典
  • 【面板数据】地级市中国方言多样性指数数据集
  • C++编程学习(第35天)
  • SS443A 霍尔效应传感器:高性能磁感应解决方案
  • MIT新论文:数据即上限,扩散模型的关键能力来自图像统计规律,而非复杂架构
  • GitHub 热榜项目 - 日榜(2025-09-20)
  • 怎么判断 IP是独享的
  • Linux多进程编程(上)