linux mariadb odbc

news/2024/11/17 4:41:43/文章来源:https://www.cnblogs.com/searchstar/p/18437714

参考:
https://blog.csdn.net/mei777387/article/details/75331428
https://www.cnblogs.com/pycode/p/9495793.html

mariadb与mysql非常像,甚至安装mariadb后可以使用mysql命令运行mariadb。

安装软件

sudo apt install -y mariadb-server mariadb-client

我这里安装的是mariadb19。如果是mariadb18,请把下面的mariadb19换成mariadb18。

设置密码

刚安装是没有密码的。先设置密码

sudo -s
mysql
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('a') WHERE User = 'root';
FLUSH PRIVILEGES;

这里密码设置成了a

以后就可以使用

mysql -u root -p

登录了

安装unixodbc

sudo apt install -y unixodbc

测试一下是否安装成功

odbcinst -j

成功:
在这里插入图片描述
失败的话看参考链接。

安装MariaDB Connector/ODBC

https://downloads.mariadb.org/connector-odbc/+releases/

这是目前的最新版本

然后cd到下载目录

mkdir mariadb-connector-odbc-3.1.6-ga-debian-x86_64
tar -zxvf mariadb-connector-odbc-3.1.6-ga-debian-x86_64.tar.gz -C mariadb-connector-odbc-3.1.6-ga-debian-x86_64
cd mariadb-connector-odbc-3.1.6-ga-debian-x86_64/lib
sudo cp libmaodbc.so /lib/x86_64-linux-gnu/mariadb19/

编辑/etc/odbcinst.ini

# Example driver definitions
# Driver from the postgresql-odbc package
# Setup from the unixODBC package# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[mariadb]
Description = ODBC for mariadb
Driver = /usr/lib/x86_64-linux-gnu/mariadb19/libmaodbc.so
Setup = /usr/lib/x86_64-linux-gnu/mariadb19/libmaodbc.so
FileUsage = 1

这里实际上是定义了一个叫做mariadb的driver。

编辑/etc/odbc.ini

[dbexp2]
Description = mariadb
Driver = mariadb
Server = 127.0.0.1
Port = 3306
USER = root
Password = a
CHARSET = UTF8

测试

isql dbexp2 -v

大概率会出错。

[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/x86_64-linux-gnu/mariadb19/libmaodbc.so' : file not found
[ISQL]ERROR: Could not SQLConnect

其实是因为libmaodbc.so的依赖不满足。
看看它的依赖:

ldd /usr/lib/x86_64-linux-gnu/mariadb19/libmaodbc.so

输出:

	linux-vdso.so.1 (0x00007ffe223e4000)libodbcinst.so.2 => /lib/x86_64-linux-gnu/libodbcinst.so.2 (0x00007f78c000a000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f78bfe87000)libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f78bfe82000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f78bfe61000)libssl.so.1.0.0 => not foundlibcrypto.so.1.0.0 => not foundlibc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f78bfc9e000)libltdl.so.7 => /lib/x86_64-linux-gnu/libltdl.so.7 (0x00007f78bfc93000)/lib64/ld-linux-x86-64.so.2 (0x00007f78c04d0000)

可以看到找不到libssl.so.1.0.0和libcrypto.so.1.0.0。
解决方案:https://blog.csdn.net/qq_41961459/article/details/105141622
再查看依赖

linux-vdso.so.1 (0x00007fff634cb000)libodbcinst.so.2 => /lib/x86_64-linux-gnu/libodbcinst.so.2 (0x00007fe427f12000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe427d8f000)libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe427d8a000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe427d69000)libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fe427b08000)libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fe42770b000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe427548000)libltdl.so.7 => /lib/x86_64-linux-gnu/libltdl.so.7 (0x00007fe42753d000)/lib64/ld-linux-x86-64.so.2 (0x00007fe4283d9000)

已经满足了。

再跑一遍

isql dbexp2 -v

成功:

searchstar@searchstar-debian10-minimum:~/SetupFiles$ isql dbexp2 -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

在C/C++中使用

参考:
https://blog.csdn.net/techtitan/article/details/6774859
https://blog.csdn.net/qq_40861091/article/details/89345860

先安装头文件

sudo apt install -y unixodbc-dev

之后相关头文件就在/usr/include/下了。编译的时候不需要用-I选项。

如果还需要mysql的头文件

sudo apt install -y default-libmysqlclient-dev

之后相关头文件就在/usr/include/mysql下了。编译的时候需要用-I"/usr/include/mysql",或者代码里头文件前加mysql/,例如#include <mysql/mysql.h>

建议使用纯odbc,以保证可移植性。

示例:
(代码参考自https://blog.csdn.net/buptlihang/article/details/80275641)

#include <iostream>
#include <sqlext.h>using namespace std;int main() {sqlhenv serverhenv;sqlhdbc serverhdbc;sqlhstmt serverhstmt;sqlreturn ret;static sqlchar dname[45], dno[10];sqllen length;//分配环境句柄ret = sqlallochandle(sql_handle_env,sql_null_handle,&serverhenv);//设置环境属性ret = sqlsetenvattr(serverhenv,sql_attr_odbc_version,(void*)sql_ov_odbc3,0);if(!sql_succeeded(ret)){cout<<"allocenvhandle error!"<<endl;return 0;}//分配连接句柄ret = sqlallochandle(sql_handle_dbc,serverhenv,&serverhdbc);if(!sql_succeeded(ret)){cout<<"allocdbchandle error!"<<endl;return 0;}//数据库连接ret = sqlconnect(serverhdbc,(sqlchar*)"dbexp2",sql_nts,(sqlchar*)"root",sql_nts,(sqlchar*)"a",sql_nts);//第二个参数是之前配置的数据源,后面是数据库用户名和密码if(!sql_succeeded(ret)){cout<<"sql_connect error!"<<endl;return 0;}//分配执行语句句柄ret = sqlallochandle(sql_handle_stmt,serverhdbc,&serverhstmt);//执行sql语句ret=sqlexecdirect(serverhstmt,(sqlchar*)"select dname, dno from company.department;",sql_nts);if(ret == sql_success || ret == sql_success_with_info){//绑定数据sqlbindcol(serverhstmt,1, sql_c_char, (void*)dname,sizeof(dname), &length);sqlbindcol(serverhstmt,2, sql_c_char, (void*)dno,sizeof(dno), &length);//将光标移动到下行,即获得下行数据cout << "dname\t\tdno\n";while(sql_no_data != sqlfetch(serverhstmt)){cout << dname << "\t\t" << dno << endl;}}//释放语句句柄ret=sqlfreehandle(sql_handle_stmt,serverhstmt);if(sql_success!=ret && sql_success_with_info != ret)cout<<"free hstmt error!"<<endl;//断开数据库连接ret=sqldisconnect(serverhdbc);if(sql_success!=ret&&sql_success_with_info!=ret)cout<<"disconnected error!"<<endl;//释放连接句柄ret=sqlfreehandle(sql_handle_dbc,serverhdbc);if(sql_success!=ret&&sql_success_with_info!=ret)cout<<"free hdbc error!"<<endl;//释放环境句柄句柄ret=sqlfreehandle(sql_handle_env,serverhenv);if(sql_success!=ret&&sql_success_with_info!=ret)cout<<"free henv error!"<<endl;cout << "done" << endl;return 0;
}

因为之前数据源中已经定义了用户名和密码,所以这里用户名和密码可以省掉,即

ret = sqlconnect(serverhdbc,(sqlchar*)"dbexp2",sql_nts,(sqlchar*)"root",sql_nts,(sqlchar*)"a",sql_nts);//第二个参数是之前配置的数据源,后面是数据库用户名和密码

可以换成

ret = SQLConnect(serverhdbc,(SQLCHAR*)"dbexp2",SQL_NTS, NULL, 0, NULL, 0);
g++ main.cpp -lodbc -o main
./main

输出:

dname		dno
Economy Department		000
Sales Department		001
Human Resource Department		010
Produce Department		011
Research Department		100
done

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

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

相关文章

深入汇编:计算机工作机制解析

深入汇编:计算机工作机制解析 计算机的工作原理 计算机的工作原理可以概括为以下几个步骤:输入:用户通过键盘、鼠标或其他输入设备提供数据。 处理:CPU(中央处理单元)根据程序指令处理数据。 存储:内存和硬盘等存储设备用于保存数据和程序。 输出:处理结果通过显示器、…

结对项目——小学四则运算题目自动生成器

这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 <结对项目>这个作业的目标 <实现一个自动生成小学四则运算题目的命令行程序(也可以用图像界面,具有相似功能)>团队成员 <杨富国(3122004587)、李思柔(3222004638)>Github项目地址 https…

XSS攻击和CSRF攻击

一、XSS XSS,即跨站脚本攻击。是值攻击者在网站上注入恶意的客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。 比如在论坛上或者输入框内输入 "<alert>document.cookie</alert&…

解决win10无法用独显玩游戏的问题

首先要下载独显驱动。 https://www.nvidia.cn/Download/index.aspx?lang=cn 这时任务管理器里就可以看到独显占用率了。 然后桌面右键打开nvidia控制面板,把要使用独显的游戏设置为使用独显(如果默认不使用独显的话)如果还不行,可能是还需要装上CPU的核显驱动(很奇怪吧?…

day8[OpenCompass 评测 InternLM-1.8B 实践]

环境配置 创建开发机和 conda 环境数据准备 评测数据集启动评测 (10% A100 8GB 资源) 使用命令行配置参数法进行评测评测完成后,将会看到:

sha256sum文件哈希值和直接哈希字符串的哈希值不一样

例如在文件test.txt里写入 test没有换行。 然后 sha256sum test.txt出来的结果是 f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2 test.txt但是在这个网站上 http://encode.chahuo.com/ 输入test,然后以sha256方式哈希得到的结果是 9f86d081884c7d659a2f…

F-Droid使用教程

F-Droid下载地址:https://f-droid.org/ 默认的官方源太慢了。建议更换清华源。官方教程:https://mirrors.tuna.tsinghua.edu.cn/help/fdroid/ 先打开F-Droid,进入设置->存储库点进F-Droid存储库,可能会看到一些官方镜像:如果啥也没有,可能等一段时间就会出现。 把这些…

WPF 的Image 控件 设置 Image.Source 的数据源,可能存在跨线程调用的问题。

相信很多WPF 的开发,应该都很多用到 Image 这个控件来显示图片。这个图片的来源可以来自各种各样的方式获取到。 我们的组内白板、批注的扫码的功能也用到这个去生成二维码,生成后,二维码显示不出来,由于触发到了全局捕获,界面又没有崩溃,遇到了好几个坑,记录一下。 开始…

7-访问控制技术原理与应用

7.1 访问控制概述 1)概念 访问控制是指对资源对象的访问者授权、控制的方法及运行机制。 访问者又称为主体,可以是用户、进程、应用程序等; 资源对象又称为客体,即被访问的对象,可以是文件、应用服务、数据等; 授权是访问者可以对资源对象进行访问的方式,如文件的读、写、…

【赵渝强老师】基于大数据组件的平台架构

在了解了大数据各个生态圈所包含的组件及其功能特性后,就可以利用这些组件来搭建一个大数据平台从而实现数据的存储和数据的计算。下图展示了大数据平台的整体架构。视频讲解如下:大数据平台的Lambda架构大数据平台的Kappa架构大数据平台的总体架构可以分为五层,分别是:数据…

ctfshow-web-信息搜集(11-17)

web11 题目提示:域名其实也可以隐藏信息,比如ctfshow.com就隐藏了一条信息。 原理:通过Dns检查查询Flag。这里可以用阿里云的网站: Dns查询网站:阿里云网站运维检测平台 (aliyun.com)web12 题目提示:有时候网站上的公开信息,就是管理员常用密码 原理:查看robots.txt文件…

设备管理平台-支持快速开发

技术路线(同时支持前后端分离 / 前后端一体,可用于网关或者服务器部署) 前端:layui-v2.9.17 后端:Net8.0 使用组件 Swagger、Jwt、Freesql、MiniExcel、MemoryCache(存储登录用户信息,代替HttpContext.Session,也可使用Redis)系统架构 非市面上繁杂的架构(Model、Ser…