01.接口说明
ODBC 提供访问不同类型的数据库的途径。结构化查询语言 SQL 是一种用来访问数据库的语言。通过使用 ODBC,应用程序能够使用相同的源代码和各种各样的数据库交互。这使得开发者不需要以特殊的数据库管理系统 DBMS 为目标,或者了解不同支撑背景的数据库的详细细节,就能够开发和发布客户/服务器应用程序。
DM ODBC 3.0 遵照 Microsoft ODBC 3.0 规范设计与开发,实现了 ODBC 应用程序与 DM 数据库的互连接口。用户可以直接调 DM ODBC 3.0 接口函数访问 DM,也可以使用可视化编程工具如 C++ Builder、PowerBuilder 等利用 DM ODBC 3.0 访问 DM 数据库。
02.安装测试
基础环境:DM8.0+kylinsp3
安装:
1.挂载iso镜像找到系统包的位置:
[root@dameng ~]# mount /dev/cdrom /mnt
[root@dameng Packages]# ls -lrt unix*
-r–r--r-- 1 dmdba dinstall 48020 5月 8 2024 unixODBC-devel-2.3.7-3.h1.ky10.x86_64.rpm
-r–r--r-- 1 dmdba dinstall 403740 5月 8 2024 unixODBC-2.3.7-3.h1.ky10.x86_64.rpm
2.安装 unixODBC 和 unixODBC-devel
[root@dameng Packages]# rpm -ivh unixODBC-devel-2.3.7-3.h1.ky10.x86_64.rpm
[root@dameng Packages]# rpm -ivh unixODBC-2.3.7-3.h1.ky10.x86_64.rpm
3.查看安装结果
[root@dameng Packages]# odbcinst -j
4.配置DM数据源
在/etc/odbcinst.ini文件后添加,Driver后路径按需修改
[DM8 ODBC DRIVER]
Description = DM ODBC DRIVER FOR DM8
Driver = /dmdba/data/bin
配置/etc/odbc.ini文件,添加以下信息
[DM]
DRIVER = DM8 ODBC DRIVER
SERVER = 10.10.122.16
UID = SYSDBA
PWD = Wangbowen123!
TCP_PORT = 51236
5.gcc环境检查
[root@dameng etc]# gcc --version
6.创建项目
项目目录结构:
odbctest
├── odbc_bind.c // 绑定变量示例
├── odbc_conn.c // 数据库连接示例
├── odbc_dml.c // 基本操作示例
├── odbc_lob.c // 大字段操作示例
├── file // 大字段操作示例中导入和导出文件目录
| ├── DM8_SQL.pdf // 大字段操作示例中导入文件
├── makfile // makefile 编译脚本
[root@dameng etc]# mkdir -p /odbctest
[root@dameng etc]# chown -R dmdba:dinstall /odbctest/
创建makefile编译脚本(使用dmdba用户创建项目)
[dmdba@dameng odbctest]$ vi makefile
[dmdba@dameng odbctest]$ ls -lrt
总用量 4
-rw-r–r-- 1 dmdba dinstall 982 2月 28 17:03 makefile
CC=gcc
includepath=$(DM_HOME)/include
libpath=$(DM_HOME)/bin
vpath=./
CFLAGS=-I$(includepath) -DDM64 -Wall
LINKFLAGS=-L$(libpath) -ldodbc -Wall -Wl,-rpath $(libpath)
%.o:%.c
$(CC) -g -c $(CFLAGS) $< -o $@
object_file1=odbc_conn.o
object_file2=odbc_dml.o
object_file3=odbc_bind.o
object_file4=odbc_lob.o
object_files=odbc_conn.o odbc_dml.o odbc_bind.o odbc_lob.o
final_objects=odbc_conn odbc_dml odbc_bind odbc_lob
all : $(final_objects)
.PHONY : all clean rebuild
odbc_conn : $(object_file1)
$(CC) -o $@ $(object_file1) -g $(LINKFLAGS)
@echo make ok.
odbc_dml : $(object_file2)
$(CC) -o $@ $(object_file2) -g $(LINKFLAGS)
@echo make ok.
odbc_bind : $(object_file3)
$(CC) -o $@ $(object_file3) -g $(LINKFLAGS)
@echo make ok.
odbc_lob : $(object_file4)
$(CC) -o $@ $(object_file4) -g $(LINKFLAGS)
@echo make ok.
clean :
@rm -rf $(object_files)
@rm -rf $(final_objects)
rebuild : clean all
创建 odbc_conn.c 数据库连接
[dmdba@dameng odbctest]$ vi /odbctest/odbc_conn.c
#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqltypes.h>
#include <sqlext.h>
/* 检测返回代码是否为成功标志,当为成功标志返回 TRUE,否则返回 FALSE */
#define RC_SUCCESSFUL(rc) ((rc) == SQL_SUCCESS || (rc) == SQL_SUCCESS_WITH_INFO)
/* 检测返回代码是否为失败标志,当为失败标志返回 TRUE,否则返回 FALSE */
#define RC_NOTSUCCESSFUL(rc) (!(RC_SUCCESSFUL(rc)))
HENV henv;/* 环境句柄 */
HDBC hdbc;/* 连接句柄 */
HSTMT hsmt;/* 语句句柄 */
SQLRETURN sret; /* 返回代码 */
int main(void)
{
/* 申请一个环境句柄 */
SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
/* 设置环境句柄的 ODBC 版本 */
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,
SQL_IS_INTEGER);
/* 申请一个连接句柄 */
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
sret = SQLConnect(hdbc, (SQLCHAR *)"DM", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"Wangbowen123!", SQL_NTS);
if (RC_NOTSUCCESSFUL(sret)) {
/* 连接数据源失败! */
printf("odbc: fail to connect to server!\n");
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
exit(0);
}
printf("odbc: connect to server success!\n");
/* 断开与数据源之间的连接 */
SQLDisconnect(hdbc);
/* 释放连接句柄 */
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
/* 释放环境句柄 */
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
[dmdba@dameng odbctest]$ make -f makefile
此处仅作连接测试。所以没有其他的目标规则。
测试连接:
[dmdba@dameng odbctest]$ ./odbc_conn
JDBC (Java Database Connectivity) 是 Java 应用程序与数据库的接口规范,旨在让各数据库开发商为 Java 程序员提供标准的数据库应用程序编程接口 (API) 。JDBC 定义了一个跨数据库、跨平台的通用 SQL 数据库 API。
DM JDBC 数据库驱动程序是一个能够支持基本 SQL 功能的通用应用程序编程接口,支持一般的 SQL 数据库访问。通过 JDBC 驱动程序,用户可以在应用程序中实现对 DM 数据库的连接与访问,JDBC 驱动程序的主要功能包括:
• 建立与 DM 数据库的连接。
• 转接发送 SQL 语句到数据库。
• 处理并返回语句执行结果。
环境搭建
1.下载并安装好jdk
[root@dameng ~]# tar -zvxf jdk-8u202-linux-x64.tar.gz
[root@dameng soft]# mv jdk1.8.0_202/ /usr/local/java
2.编辑/etc/profile文件写入以下内容
[dmdba@dameng ~]$ vi .bash_profile
#需要在dmdba下配置环境变量,按照实际的安装路径填写
export JAVA_HOME=/usr/local/java/jdk1.8.0_202
export JRE_HOME=${JAVA_HOME}/jre:/dmdata/data/drivers/jdbc
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:/dmdata/data/drivers/jdbc/DmJdbcDriver8.jar
export PATH=${JAVA_HOME}/bin:$PATH
3.使配置生效并查看当前版本
[dmdba@dameng ~]$ source .bash_profile
[dmdba@dameng ~]$ java -version
4.创建项目:
[root@dameng ~]# mkdir /jdbctest
[root@dameng ~]# chown -R dmdba:dinstall /jdbctest
[root@dameng jdbctest]# chmod 755 -R /jdbctest/*
[root@dameng ~]# su - dmdba
[dmdba@dameng ~]$ cd /jdbctest/
[dmdba@dameng jdbctest]$ vi jdbc_conn.java
package java_jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class jdbc_conn {
static Connection conn = null;
static String cname = "dm.jdbc.driver.DmDriver";
static String url = "jdbc:dm://10.10.122.16:5237";
static String userid = "SYSDBA";
static String pwd = "Wangbowen123!";
public static void main(String[] args) {
try {
Class.forName(cname);
conn = DriverManager.getConnection(url, userid, pwd);
conn.setAutoCommit(true);
System.out.println("[SUCCESS]conn database");
} catch (Exception e) {
System.out.println("[FAIL]conn database:" + e.getMessage());
}
}
public void disConn(Connection conn) throws SQLException {
if (conn != null) {
conn.close();
}
}
}
[dmdba@dameng jdbctest]$ javac -d . jdbc_conn.java
[dmdba@dameng jdbctest]$ ls -lrt
5.测试连接:
[dmdba@dameng jdbctest]$ java java_jdbc.jdbc_conn
其他关于JDBC接口和ODBC的详细内容请参考官方手册
https://eco.dameng.com/document/dm/zh-cn/app-dev/c_c++_odbc.html
https://eco.dameng.com/document/dm/zh-cn/app-dev/java-jdbc.html
达梦社区地址:https://eco.dameng.com
文章
阅读量
获赞
