odbc mysql 配置文件_ODBC连接主流数据库的配置方法

准备工作

安装ODBC基本组件:

# yum install -y unixODBC unixODBC-devel

安装完成后可用odbcinst -j命令查看安装配置文件所在的位置,有两个比较常用的配置,一个是ODBC驱动配置,默认在/etc/odbcinst.ini,另一个是系统数据源配置,默认在/etc/odbc.ini。

连接MySQL

1. 安装MySQL连接驱动

# yum install -y mysql-connector-odbc

安装好驱动后,驱动信息会自动追加到驱动配置odbcinst.ini中,像这样:

[MySQL]

Description=ODBC for MySQL

Driver=/usr/lib/libmyodbc5.so

Setup=/usr/lib/libodbcmyS.so

Driver64=/usr/lib64/libmyodbc5w.so

Setup64=/usr/lib64/libodbcmyS.so

FileUsage=1

2. 配置MySQL数据源(DSN)

数据源可定义在系统DSN中,也可以定义在用户DSN中,视需要而定。以下是一个配置例子。

[mysql223]

driver = MySQL

server = 192.1.1.223

port = 3306

user = root

password = 11111111

其中:driver是MySQL驱动库的名称,要与odbcinst.ini中配的名字一致,另外也可以直接写.so文件的位置,但不推荐这么做。

如果配置不指定user和password,那么在连接时必须给定,命令行和API都有相应的选项或参数。

3. 连接测试

isql命令格式:isql DSN [user [password]] [options]

如果配置指定了用户名和密码,连接时指定DSN即可:isql mysql223。

在连接时指定用户名和密码:isql mysql223 root 62960909。

连接SQLServer

1. 安装SQLServer连接驱动

# yum install -y freetds freetds-devel

安装好后可用tsql -C查看编译时的选项信息。

如果驱动安装完后没有将驱动信息更新到odbcinst.ini中,则需要手工配置。

[SQLServer]

Description = ODBC for SQLServer

Driver = /usr/lib/libtdsodbc.so

Setup = /usr/lib/libtdsS.so

FileUsage = 1

其中.so文件的路径要与实际安装位置相符。

2. 配置数据源

数据源配置文件为freetds.conf,一般在/etc目录下。以下是个示例:

[sqlsever224]

host = 192.1.1.224

port = 1433

tds version = 7.0

3. 连接测试

# tsql -S sqlserver224 -U test -P test123

连接Oracle

1. 安装驱动

不同版本的Oracle对应驱动版本也不太一样,可到官网下载与数据库版本对应的驱动,至少要安装basic,develop,odbc包,建议安装sqlplus包,便于排障。

# rpm -ivh *.rpm

2. 配置环境变量

export ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

注意路径要与实际相符。

3. 测试连通性

# sqlplus test/test123@192.1.1.225:1521/orcl

如果连不通,检查客户端与Oracle服务器网络是否连通,另外检查服务器上tnsnames.ora文件中使用的主机名还是IP地址,建议用IP,确保客户端能正常访问。连接成功后再往下配置ODBC。

4. 配置ODBC

在odbcinst.ini中添加Oracle驱动。

[Oracle]

Description = ODBC for Oracle

Driver = /usr/lib/oracle/10.2.0.4/client/lib/libsqora.so.10.1

Setup =

在odbc.ini中配置数据源。

[oracle225]

driver = Oracle

server = 192.1.1.225

port = 1521

servername = orcl255

其中servername是tnsnames.ora中配置的SID,而tnsnames.ora的位置由TNS_NAMES环境变量指定。

# export TNS_NAMES=/etc

# cat /etc/tnsnames.ora

orcl255 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP) (HOST = 192.1.1.225) (PORT = 1521))

(CONNECT_DATA = (SERVICE_NAME = ORCL))

)

配置好后可用isql命令测试连接。

# isql oracle225 system keyouhac

连接达梦数据库

达梦数据库是款国产数据库,应用还有待推广。

在Linux环境下通过-i选项进行交互式安装,这里选择自定义安装方式,安装组件选择客户端和ODBC相关驱动,安装完成后即可用客户端工具连接数据库测试。

$ sudo ./DMInstall.bin -i

$ /opt/dmdbms/tool/disql

SQL> conn SYSDBA/SYSDBA@192.1.1.190

SQL> select * from dmhr.job;

也可以通过unixODBC提供的isql工具连接,但需要配置驱动和数据源。

$ cat /etc/odbcinst.ini

[DM7]

Description = ODBC DRIVER FOR DM7

Driver = /opt/dmdbms/bin/libodbc.so

$ cat /etc/odbc.ini

[dm190]

Description = dmdb

Driver = DM7

SERVER = 192.1.1.190

UID = SYSDBA

PWD = SYSDBA

TCP_PORT = 5236

$ isql dm190

$ isql dm190 SYSDBA SYSDBA

ODBC编程

以下是通过ODBC连接mysql数据库并执行sql语句的示例,其他类型数据库类似。

#include

#include

#include

#include

HENV henv;

HDBC hdbc;

HSTMT hsmt;

SQLRETURN rc;

int Success(SQLRETURN ret) {

return ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO;

}

int Failed(SQLRETURN ret) {

return !Success(ret);

}

void ODBCError(SQLSMALLINT handleType, SQLHANDLE handle) {

BYTE buf[256], sqlstate[256];

SQLGetDiagRec(handleType, handle, 1, sqlstate, NULL, buf, sizeof(buf), NULL);

printf("[%s]%s", sqlstate, buf);

}

int main() {

if (Failed(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv))) {

ODBCError(SQL_HANDLE_ENV, henv);

return -1;

}

SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);

if (Failed(SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc))) {

ODBCError(SQL_HANDLE_DBC, hdbc);

return -1;

}

if (Failed(SQLConnect(hdbc, (SQLCHAR*)"mysql", SQL_NTS, (SQLCHAR*)"root", SQL_NTS,

(SQLCHAR*)"123456", SQL_NTS))) {

ODBCError(SQL_HANDLE_DBC, hdbc);

return -1;

}

{

char user[128], host[128], pass[128];

long cbuser = 0, cbhost = 0, cbpass = 0;

if (Failed(SQLAllocStmt(hdbc, &hsmt))) {

ODBCError(SQL_HANDLE_STMT, hsmt);

return -1;

}

SQLExecDirect(hsmt, (SQLCHAR*)"select user, host, password from mysql.user", SQL_NTS);

SQLBindCol(hsmt, 1, SQL_C_CHAR, user, sizeof(user), &cbuser);

SQLBindCol(hsmt, 2, SQL_C_CHAR, host, sizeof(host), &cbhost);

SQLBindCol(hsmt, 3, SQL_C_CHAR, pass, sizeof(pass), &cbpass);

while (Success(SQLFetchScroll(hsmt, SQL_FETCH_NEXT, 0)))

printf("user=[%s], host=[%s], pass=[%s]\n", user, host, pass);

}

SQLFreeHandle(SQL_HANDLE_STMT, hsmt);

SQLDisconnect(hdbc);

SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

SQLFreeHandle(SQL_HANDLE_ENV, henv);

return 0;

}

「❤️ 感谢大家」点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)

欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2017的结尾

2017马上就要结束了,这一年感觉进步不太大,年尾学习了《C和指针》,没有学太多东西,人有点疲惫,同时感觉身体不如以前了,以后一定要好好保重身体,希望一家人健康幸福快乐,学习上&…

.NET6中关于Minimal API的简单使用

微信公众号:趣编程ACE收集并分享日常的.NET实战开发技巧,源码获取关注后回复 源码;**如果觉得本公众号对您有帮助,欢迎关注本文来自社区群粉丝投稿.NET6中关于Minimal API的简单使用详细文档参考官网 https://docs.microsoft.com/en-us/aspnet/core/fund…

大数据量分页查询方法(转)

本文旨在介绍一种对数据库中的大数据量表格进行分页查询的实现方法,该方法对应用服务器、数据库服务器、查询客户端的cpu和内存占用都较低,查询速度较快,是一个较为理想的分页查询实现方案。 1.问题的提出 在软件开发中&#xff…

DVR分布式路由

1. 背景 没有使用DVR的场景: 从图中可以明显看到东西向和南北向的流量会集中到网络节点,这会使网络节点成为瓶颈。 如果启用DVR,如下图: 对于东西向的流量, 流量会直接在计算节点之间传递。 对于南北向的流量&#xff…

浏览器兼容性很重要

<meta http-equiv"X-UA-Compatible" content"IEedge,chrome1">转载于:https://www.cnblogs.com/yeahdwb/p/4203428.html

SQL函数获取一年中每个月的天数

第一步&#xff1a;编写判断一年是否是闰年的函数IsLeapYear <strong>CREATE FUNCTION IsLeapYear( Year INT) RETURNS BIT AS BEGIN IF (Year % 4 0) and ((Year % 100 <> 0) or (Year % 400 0)) RETURN 1 RETURN 0 END</strong> 第二步&#xff1a…

求斐波那契数列的特征方程和通项公式

1、斐波那契数列 f(1) 1; f(2) 1; f(3) f(1) f(2);以此内推1 x 1f(x) 1 x 2f(x - 1) f(x - 2) x > 32、特征方程 解释&#xff1a;特征方程是为研究相应的数学对象而引入的一些等式&#xff0c;它因数学对象不同而不…

php实现pdf文件的生成与下载

2019独角兽企业重金招聘Python工程师标准>>> 这个有点复杂的&#xff0c;我们一步一步来说明。 受先我们要下载pdf需要的文件&#xff0c;搜索‘php生成pdf’找到相关进行下载&#xff0c;这里不做介绍 //pdf下载$name $_SESSION[ex_uname];$name_pdf$name..pdf;$u…

C#-线程

多线程通常一个应用就是一个进程&#xff0c;进程中一般是一个线程&#xff0c;执行一个操作&#xff0c;其他操作等待。多线程&#xff0c;看起来是一个进程&#xff0c;有多个线程同时运行&#xff0c;互相不必等待&#xff0c;实际是把cpu的空闲时间利用起来&#xff0c;cpu…

window 效率神器:Wox

官方网站 http://www.getwox.com/ 下载后以管理员身份运行&#xff0c;右下角可以看到Wox的图标。点击setting可以进入主界面 如果看不懂可以将语言设置为中文 默认快捷键是Alt space 热键呼出。你理应习惯这个风格。这是你高效率的开始 进入主题&#xff08;Theme&#xff09…

Visual Studio listView控件绑定SQL Server数据库并动态显示数据,调整列宽

在Visual Studio中,可以用listView控件直接从SQL Server数据库中动态读取数据,并自动调整列宽。本文讲解如何通过ADO.net连接SQL Server数据库,并用SqlDataReader读取数据,并显示到listview控件中。 代码中的MyDBase为自定义的使用ADO.NET方法交互数据库的类。代码获取:《…

趣学算法之斐波拉契数列实现

1、斐波拉契数列 f(1) = 1; f(2) = 1; f(3) = f(1) + f(2);以此内推1 x = 1 f(x) = 1 x = 2f(x - 1) + f(x - 2) x >= 3 2、代码实现 #include <stdio.h> #include <stdlib.h>int fib1(int n)…

java mysql数据去重_java使用MySQL和HQL数据去重

思路先查询出满足某种条件的数据的最小ID&#xff0c;然后删除最小ID以外的数据就实现了去重实例查询最小ID的重复数据select * from oms_relation_model ormwhere orm.fd_id(select min(t.fd_id) from oms_relation_model twhere orm.fd_ekp_idt.fd_ekp_id and orm.fd_ekp_idt…

scala入门-01-IDEA安装scala插件

2019独角兽企业重金招聘Python工程师标准>>> 由于本人一直使用IDEA开发Java项目&#xff0c;目前scala也可以使用IDEA开发&#xff0c;下载地址&#xff1a;http://www.jetbrains.com/idea/ Community Edition FREE 和 Ultimate Edition Free 30-day trial都支撑s…

GeneralUpdate20220323里程碑版本发布

大家好我是juster&#xff0c;GeneralUpdate的开源项目作者。这次将发布GeneralUpdate里程碑版本&#xff0c;该版本发生了巨大改变历时4个月的时间终于要和大家见面了。开源不易希望大家能多多支持。可能或多或少会有些bug希望大家多多反馈&#xff0c;这里也有一个小小的心愿…

信息安全系统设计基础第七周学习总结

存储器的层次结构 存储技术 静态RAMSRAM将每一位存储在双稳态的存储器单元中 动态RAMDRAM将每一位存储为对电容充电。 传统的DRAMd*w的DRAM存储dw位信息 增强的DRAM 非易失性存储器 访问主存 磁盘存储 磁盘构造 磁盘容量公式&#xff1a;磁盘容量&#xff08;字节数/扇区) *…

FFmpeg的HEVC解码器源码简单分析:解码器主干部分

HEVC源码分析文章列表&#xff1a;【解码 -libavcodec HEVC 解码器】FFmpeg的HEVC解码器源码简单分析&#xff1a;概述FFmpeg的HEVC解码器源码简单分析&#xff1a;解析器&#xff08;Parser&#xff09;部分FFmpeg的HEVC解码器源码简单分析&#xff1a;解码器主干部分FFmpeg的…

C#输入姓名或者拼音码(姓名的首字母,大小写均可)进行快速模糊查找

第一步:在SQL Server中编写获取输入汉字的拼音码函数,详见SQL Server编写函数获取汉字的拼音码(首字母) 第二步:增加含有拼音码字段的人员记录 private void button_Insert_Click(object sender, EventArgs e){string NAME = textBox_name.Text.Trim();string SEX = com…

趣学算法之哥德巴赫猜想的实现

1、哥德巴赫猜想 任意大于2的偶数,都可以表示成为2个素数之和 2、代码实现 #include <iostream> #include <math.h>using namespace std;//判断是否是质数 bool isPrime(int n) {if (n < 2)return false;if (n == 2)return true;for (int i = …

.NET 产品组问卷调查|和我们分享你的 .NET 使用情况

作为一名 .NET 开发者&#xff0c;是什么让你开始学习 .NET&#xff1f;在你看来 .NET 在哪些场景下最有效&#xff1f;在平时的工作或学习中&#xff0c;你都在哪里学习 .NET 资源&#xff1f;你更希望在哪里看到更多 .NET 本地化内容&#xff1f;你觉得 .NET 的社区推动力如何…