JDBC(Java Database Connectivity)是 Java 定义的数据库访问标准接口,不直接操作数据库,由数据库厂商提供驱动实现接口。应用程序通过 JDBC API 调用驱动,建立连接、执行 SQL、获取结果集。
核心组件:
Driver:数据库驱动,负责协议通信
Connection:数据库连接对象
Statement / PreparedStatement:SQL 执行对象
ResultSet:查询结果集
DriverManager:驱动管理类
驱动包:DmJdbcDriver8.jar(JDK1.8)
驱动类:dm.jdbc.driver.DmDriver
URL 格式:jdbc:dm://IP:PORT? 参数
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class DmJdbcDemo {
public static void main(String[] args) {
String driverClass = "dm.jdbc.driver.DmDriver";
String url = "jdbc:dm://192.168.121.151:5236";
String user = "SYSDBA";
String pwd = "******";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//加载驱动
Class.forName(driverClass);
//获取连接
conn = DriverManager.getConnection(url,user,pwd);
System.out.println("数据库连接成功!");
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM SYS.ALL_USERS;");
while(rs.next()){
System.out.println(rs.getString(1));
}
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭资源
if(rs!=null) try{rs.close();}catch(Exception e){}
if(stmt!=null) try{stmt.close();}catch(Exception e){}
if(conn!=null) try{conn.close();}catch(Exception e){}
}
}
}
项目引入DmJdbcDriver8.jar,Maven 可配置本地jar依赖
开放数据库端口5236,防火墙放行,账号授予连接、查询权限
达梦数据库开启远程访问,修改dm.ini中LISTEN_IP(生产环境为了安全,指定ip)
ODBC(Open Database Connectivity)微软制定的数据库访问标准,C 语言接口,多用于 Windows 平台。应用程序调用 ODBC API,通过 ODBC 驱动程序连接数据库。
1)打开ODBC数据源管理器
地址:C:\Windows\System32\odbcad32.exe
在【系统DSN】页签下添加数据源 → 选择 DM8 ODBC DRIVER,完成后页面填写信息,点击【测试连接】,提示连接成功即配置完成
2)C语言ODBC简单示例
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <stdio.h>
void PrintOdbcError(SQLHANDLE hHandle, SQLSMALLINT hType)
{
SQLCHAR szSqlState[6];
SQLCHAR szMsg[256];
SQLINTEGER nNativeErr;
SQLSMALLINT nMsgLen;
SQLRETURN ret;
int i = 1;
while ((ret = SQLGetDiagRec(hType, hHandle, i, szSqlState, &nNativeErr, szMsg, sizeof(szMsg), &nMsgLen)) == SQL_SUCCESS)
{
printf("ODBC错误[%d]: SQLSTATE=%s, 错误码=%d, 信息:%s\n", i, szSqlState, nNativeErr, szMsg);
i++;
}
}
int main()
{
SQLHENV hEnv;
SQLHDBC hDbc;
SQLRETURN ret;
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc);
ret = SQLConnect(hDbc,
(SQLCHAR*)"DM8", SQL_NTS,
(SQLCHAR*)"SYSDBA", SQL_NTS,
(SQLCHAR*)"*****", SQL_NTS);
if (SQL_SUCCEEDED(ret))
{
printf("达梦ODBC连接成功!\n");
SQLDisconnect(hDbc);
}
else
{
printf("连接失败,打印错误信息:\n");
PrintOdbcError(hDbc, SQL_HANDLE_DBC);
}
SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
system("pause");
return 0;
}
ODBC是跨语言标准接口,unixODBC作为驱动管理器,加载达梦libdodbc.so驱动;C/C++、Python、PowerBuilder 等可调用统一 ODBC 函数访问数据库。Linux 需要配置两个核心文件:
odbcinst.ini:注册驱动
odbc.ini:定义数据源DSN
1)安装依赖
yum install -y unixODBC unixODBC-devel
2)/etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /home/dmdba/dm/dmdbms/bin/libdodbc.so
3)/etc/odbc.ini
[DM8_DSN]
Description = DM8 Database
Driver = DM8 ODBC DRIVER
Server = 127.0.0.1
UID = SYSDBA
PWD = ******
TCP_PORT = 5236
4)环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dmdba/dm/dmdbms/bin
export ODBCINI=/etc/odbc.ini
source ~/.bash_profile
5)测试连接
isql DM8_DSN
DBLINK(数据库链接):本地数据库创建一个远程数据库访问对象。本地库通过 DBLINK 访问远端库表,透明执行跨库查询。
达梦DBLINK底层:本地数据库作为客户端,使用达梦原生通信协议连接远端达梦实例。
访问语法:表名@DBLINK名称
前提条件:
本地库、远端达梦网络互通,5236 端口通
远端数据库账号,具备对象访问权限
本地库创建 DBLINK 的用户必须有 CREATE DATABASE LINK 权限
前提:
两台机器的dm.ini均配置MAL_INI=1,且在/dbdata/dmdata/DAMENG/下创建了dmmal.ini文件:
1)远端库准备
远端达梦(192.168.121.143)创建测试用户和表,授权:
CREATE USER TEST_USER IDENTIFIED BY "DmTEST123456!";
GRANT RESOURCE,PUBLIC TO TEST_USER;
CREATE TABLE TEST_USER.TAB1(ID INT,NAME VARCHAR(50));
INSERT INTO TEST_USER.TAB1 VALUES(1,'达梦dblink测试');
COMMIT;
2)本地库创建DBLINK
创建dm到dm的dblink
CREATE OR REPLACE LINK DM_REMOTE CONNECT WITH TEST_USER IDENTIFIED BY "DmTEST123456!" USING '192.168.121.143/5282';
查看所有dblink
SELECT * FROM DBA_DB_LINKS;
SELECT * FROM TEST_USER.TAB1@DM_REMOTE;
插入数据
INSERT INTO TEST_USER.TAB1@DM_REMOTE VALUES(2,'达梦dblink插入数据');
文章
阅读量
获赞
