c++使用mysql数据库的两种跨平台方法

c++使用mysql数据库的两种跨平台方法:
1、使用MySQL开发包
2、使用OTL
这两种方法都是跨windows/linux平台的,第二种方法不限于mysql,还可以是sql server。
Ubuntu 18.04下安装MySQL开发包以及C++连接MySQL
https://blog.csdn.net/ggm0928/article/details/83687111

apt install libmysqlclient-dev
root@yiyouserver:/home# mysql_config --cflags --libs
-I/usr/include/mysql 
-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -latomic -ldl

CREATE TABLE test(NAME VARCHAR(255),num INT(10) )
SELECT * FROM test


Ubuntu 18.04.2 LTS安装odbc及mysql驱动
apt-get install unixodbc
apt-get install unixodbc-dev
apt-get install libmyodbc
手动下载安装驱动
驱动下载地址:
https://dev.mysql.com/downloads/connector/odbc/
选择合适的版本和驱动
解压后,将库文件拷贝到合适的目录。 
tar -zxvf mysql-connector-odbc-8.0.17-linux-ubuntu18.04-x86-64bit.tar.gz
cp /home/mysql-connector-odbc-8.0.17-linux-ubuntu18.04-x86-64bit/lib/*.so /usr/lib/x86_64-linux-gnu/odbc
配置mysql驱动信息
vim /etc/odbcinst.ini
[MySQL]
Description=ODBC for MySQL
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8a.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8S.so
FileUsage=1
配置需要访问的数据库信息
vim /etc/odbc.ini
[db_log]
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc8a.so
SERVER = 127.0.0.1
PORT = 3306
DATABASE = db_log
OPTION = 67108864
USER = root
PASSWORD = 123456
root@yiyouserver:/home/yiyou/cpptest/otl# vim /etc/odbc.ini
root@yiyouserver:/home/yiyou/cpptest/otl# cat /etc/odbc.ini 
[MySql]
Driver = MySQL
Description=MySQL ODBC 3.51 Driver DSN
SERVER = 127.0.0.1
PORT = 3306
DATABASE = test
OPTION = 3
USER = root
PASSWORD = 123456
root@yiyouserver:/home/yiyou/cpptest/otl# isql MySql root 123456 
root@yiyouserver:/home# isql -v db_log
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> quit
cp /etc/odbcinst.ini /usr/local/etc/odbcinst.ini
cp /etc/odbc.ini /usr/local/etc/odbc.ini
linux c++程序运行结果:
root@yiyouserver:/home/yiyou/cpptest/otl# g++ -o otl_mysql otl_mysql.cpp -lodbc
root@yiyouserver:/home/yiyou/cpptest/otl# ./otl_mysql
f1 = 8, f2 = Name8
f1 = 9, f2 = Name9
f1 = 10, f2 = Name10
f1 = 11, f2 = Name11
f1 = 12, f2 = Name12
f1 = 13, f2 = Name13
f1 = 14, f2 = Name14
f1 = 15, f2 = Name15
f1 = 16, f2 = Name16
linux c++程序源码:
#defineOTL_ODBC// Compile MySQL
//#defineOTL_ORA10G// Compile OTL 4/OCI10G
#ifndef WIN32
#define OTL_ODBC_UNIX // uncomment this line if UnixODBC is used
#endif
#include "otlv4.h"// include the OTL 4 header file
#include <iostream>
using namespace std;

otl_connect db;// connect object

void insert()// insert rows into table

otl_stream wr
(50,// buffer size
"insert into test_tab values(:f1<int>, :f2<char[7]>)", // SQL statement
db// connect object
);

char tmp[7];

for (int i=1; i<=20; ++i)
{
sprintf(tmp, "Name%d", i);
wr << i << tmp;
}
}

void select()

otl_stream rd
(50, // buffer size
"select * from test_tab where f1>=:n1<int> and f1<=:n2<int>",// SELECT statement
db // connect object
); 

rd << 8 << 16;

int f1;
char f2[7];

while (!rd.eof())// while not end-of-data

rd >> f1 >> f2;
cout << "f1 = " << f1 << ", f2 = " << f2 << endl;
}
}

int main()
{
otl_connect::otl_initialize();// initialize OTL environment

try
{
//db.rlogon("root/[email protected]:1521/test"); // 用户/密码@数据库名
        db.rlogon("root/123456@MySql");//在test库里新建test_tab表并插入记录

otl_cursor::direct_exec
(db,
"drop table test_tab",
otl_exception::disabled// disable OTL exceptions
); // drop table

otl_cursor::direct_exec
(
db,
"create table test_tab(f1 int, f2 varchar(6))"
);  // create table

insert(); // insert records into table
select(); // select records from table

}
catch (otl_exception& e)    // intercept OTL exceptions
{
cerr << "ERROR: code[" <<e.code<<"]\n";
cerr << e.msg << endl;// print out error message
cerr << e.stm_text << endl; // print out SQL that caused the error
cerr << e.var_info << endl; // print out the variable that caused the error
}
db.logoff();    // disconnect from Oracle

return 0;
}


ftp下载unixODBC库:
root@yiyouserver:/home/hxh# ftp ftp.unixodbc.org
Connected to ftp.unixodbc.org.
220 ProFTPD 1.3.4a Server (unixODBC.org) [::ffff:87.106.19.214]
Name (ftp.unixodbc.org:root): anonymous
331 Anonymous login ok, send your complete email address as your password
Password:
230-Welcome, archive user [email protected] !
230-
230-The local time is: Sat Sep 28 13:25:15 2019
230-
230-This is an experimental FTP server.  If you have any unusual problems,
230-please report them via e-mail to <[email protected]>.
230-
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get pub/unixODBC/unixODBC-2.3.1.tar.gz /home/unixODBC-2.3.1.tar.gz
local: /home/unixODBC-2.3.1.tar.gz remote: pub/unixODBC/unixODBC-2.3.1.tar.gz
200 PORT command successful
150 Opening BINARY mode data connection for pub/unixODBC/unixODBC-2.3.1.tar.gz (1813380 bytes)
226 Transfer complete
1813380 bytes received in 182.80 secs (9.6877 kB/s)
ftp> exit
221 Goodbye.

tar -zxvf unixODBC-2.3.1.tar.gz
cd unixODBC-2.3.1
./configure --prefix=/usr/local/unixODBC --includedir=/usr/local/include --libdir=/usr/local/lib -bindir=/usr/local/bin --sysconfdir=/usr/local/etc
make && make install && make clean
root@yiyouserver:/home/unixODBC-2.3.1# find / -name libodbc.so*
/usr/local/lib/libodbc.so.2.0.0
/usr/local/lib/libodbc.so.2
/usr/local/lib/libodbc.so
/usr/lib/x86_64-linux-gnu/libodbc.so.2.0.0
/usr/lib/x86_64-linux-gnu/libodbc.so.2
/usr/lib/x86_64-linux-gnu/libodbc.so.1
/usr/lib/x86_64-linux-gnu/libodbc.so

root@yiyouserver:/home/hxh# file OTLTest.cpp
OTLTest.cpp: C source, ISO-8859 text, with CRLF line terminators
root@yiyouserver:/home/hxh# iconv OTLTest.cpp -f gbk -t utf-8 -o OTLTest1.cpp
root@yiyouserver:/home/hxh# file OTLTest1.cpp
OTLTest1.cpp: C source, UTF-8 Unicode text, with CRLF line terminators
root@yiyouserver:/home/hxh# file OTLTest.cpp
OTLTest.cpp: C source, ISO-8859 text, with CRLF line terminators
root@yiyouserver:/home/hxh# vim OTLTest1.cpp
root@yiyouserver:/home/hxh# g++ -o OTLTest OTLTest.cpp -lodbc
root@yiyouserver:/home/hxh# ./OTLTest
Connect Error: ([unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found) () ()
-1

root@yiyouserver:/home/hxh# /usr/local/freetds/bin/tsql -C
Compile-time settings (established with the "configure" script)
                            Version: freetds v1.1.16
             freetds.conf directory: /usr/local/freetds/etc
     MS db-lib source compatibility: yes
        Sybase binary compatibility: no
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 7.3
                              iODBC: no
                           unixodbc: yes
              SSPI "trusted" logins: no
                           Kerberos: no
                            OpenSSL: yes
                             GnuTLS: no
                               MARS: yes

root@yiyouserver:/home/hxh# /usr/local/freetds/bin/tsql -S 127.0.0.1 -U sa -P YiYou2019
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> use QPGameUserDB
2> go
1> SELECT * FROM [QPGameUserDB].[dbo].[AccountsInfo] where userid<2
2> go
1> select top 1 * from accountsinfo
2> go
UserIDGameIDProtectIDAccountsRegAccountsUnderWriteLogonPassInsurePassSpreaderIDFaceIDExperienceUserRightMasterRightServiceRightMasterOrderMemberOrderMemberOverDateLovelinessGenderNullityStunDownMoorMachineMachineSerialWebLogonTimesGameLogonTimesRegisterIPLastLogonIPRegisterDateLastLogonDateCustomFaceVerNickNameIsAndroidSpreadTypeMoney
100jxy918jxy9185b3cc406789bffe35b812d2945ba36595b3cc406789bffe35b812d2945ba365900000000     Jun  2 1905 12:00:00:000AM0100005000100005056C00001000000000000114131192.168.1.66192.168.1.66Nov  2 2011 10:45:02:137AM    Dec 19 2011 04:18:13:000PM0风之猎手00385.00
(1 row affected)
1> exit
 

发布了156 篇原创文章 · 获赞 10 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/u010401391/article/details/102095371
今日推荐