Linux下otl调用MySQL数据库9.1版

整体流程结构

本文主要是环境搭建
先安装unixODBC

http://www.unixodbc.org/ 下载执行

1. copy the unixODBC-2.3.2.tar.gz file somewhere you can create files and directories 
2. gunzip unixODBC*.tar.gz 
3. tar xvf unixODBC*.tar

./configure 
make 
make install

完毕


 export ODBCINI=/usr/local/etc/odbc.ini
export ODBCSYSINI=/usr/local/etc


unixODBC 提供了Linux 对ODBC 的支持,但它只是一个 ODBC的管理器, 要连接
实际的数据库还得提供这种数据库的 ODBC 驱动.


关于odbcinst.ini和odbc.ini的说明

参考:http://blog.chinaunix.net/uid-7240278-id-131816.html 这篇文章中提到了默认的odbcinst.ini的位置在/usr/local/etc,这是在安装unixODBC是产生的,可以通过odbcinst -j指令来查看其具体位置

However since beta 1.6 the location of the system files odbcinst.ini and odbc.ini are determined by the configure script. The default location is /usr/local/etc, and if a prefix is specified the location is {prefix}/etc. The location of the etc path can be broken out of the normal prefix tree by specifing --sysconfdir=DIR, so the following will expect the system files to be in the same location as pre 1.6 builds.

 


安装Connector/ODBC

下载: http://dev.mysql.com/downloads/connector/odbc/5.1.html

下载:mysql-connector-odbc-5.1.12-linux-glibc2.5-x86-32bit.tar

或者对应的64位版本

复制到/usr/local/lib

在odbcinst.ini的Driver添加/usr/loacl/lib/libmyodbc5.so

在64位版本中libodbc5a.so libodbc5w.so分别表示ANSII和Unicode,根据情况自己选择作为Driver

复制到/usr/local/lib64

连接测试

运行:isql -v DNS USER PWD 查看是不是能连接上数据库

常见错误:

Can't open lib 

[unixODBC][Driver Manager]Can't open lib '/usr/local/lib/libmyodbc5.so

这个吊问题搞了我三四天,周末也搭上了,最后搞的我跟外包的大哥诉苦,哎现在总算是搞定了。

先说整个事情的真像吧:我的odbc.ini指定了Driver 和Driver64但我以为Driver64不会用到所以就注释掉了,结果就一直提示找不到Driver指定的so。通过对比,逐步排查,我确定了原来是Driver64在起作用,所以讲对应的so拷贝了过来,就可以了。

总结,这是因为64位机使用了64位的so文件,

现在也有64位的Driver,也有32位的Driver,但还是提示

[01000][unixODBC][Driver Manager]Can't open lib '/usr/local/lib64/libmyodbc5w.so' : file not found

现在我又晕了,这次用libodbc5a.so 替换了libodbc5w.so,看来我这里适合使用ASII版本的。

Can't connect to
首先ping一下,看看是不是网络不通

[unixODBC][MySQL][ODBC 5.3(w) Driver]Can't connect to local MySQL server through socket '/tmp/mysql.sock'

可能是网络问题,比如本机的虚拟机访问本主机的数据库就会出现这种情况另外参考:

http://blog.csdn.net/junchaox/article/details/7287137

连接不上还有可能是因为端口号写错了。我记得MysQL的端口号都是默认3306,上次连接电信内网就遇到有人故意设置成13306的,又搞了我半天才找到原因。后来才知道之所以改,是因为电信内部特殊的版本升级导致。

3 Duplicate entry '0' for key 'PRIMARY'

在插入数据的时候不满足主键唯一性,即重复插入相同主键值。先删对应的数据才能插入。

4 插入数据库速度过慢

每秒钟才十几条,有时候甚至是个位数,网上搜了一下,今天突然特别快了。每秒钟两百条左右。赶紧找下到底是哪里让速度变快了。

基本配置:unixODBC,otl,Linux服务器64位MySQL本机CentOS64位

经过修改各处参数发现:

(1)宏定义原来是:-fPIC   -DOTL_ODBC  -DOTL_ODBC_UNIX  -DOTL_STL  用时:3.93 s

新定义是: -fPIC   -DOTL_ODBC_UNIX -DOTL_ODBC_MYSQL -DOTL_STL 用时:2.67 s

新定义是原来定义速度的两倍,这说明,不同的宏对代码生成产生了影响

全部的宏定义在:http://otl.sourceforge.net/otl3_compile.htm

http://otl.sourceforge.net/otl3_compile.htm

 Otl Examples

(2)数据库表结构


 数据库表引擎,如果选这个MyISAM速度可以达到两百,如果使用InnoDB速度只能每秒十几个 

(3)字符编码,如果程序提交的数据字符编码和数据库内部的字符编码不一致,则需要转换花费时间

(4)http://www.2cto.com/database/201207/143556.html

 MySQL 从最开始的时候 1000条/分钟的插入速度调高至 10000条/秒。 相信大家都已经等急了相关介绍,下面我做调优时候的整个过程。提高数据库插入性能中心思想:
      1、尽量使数据库一次性写入Data File
  www.2cto.com  
      2、减少数据库的checkpoint 操作
      3、程序上尽量缓冲数据,进行批量式插入与提交
      4、减少 系统的IO冲突
 
      根据以上四点内容,作为一个业余DBA对MySQL服务进行了下面调整:
修改负责收录记录MySQL服务器配置,提升MySQL整体写速度;具体为下面三个数据库变量值:innodb_autoextend_increment、innodb_log_buffer_size、innodb_log_file_size;此三个变量默认值分别为 5M、8M、8M,根据服务器内存大小与具体使用情况,将此三只分别修改为:128M、16M、128M。

(5)http://www.php100.com/html/webkaifa/database/Mysql/2011/0326/7789.html

MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

(6)去掉表中的索引,索引的结构会让数据库的表操作在维护其结构的时候比较费时。所以建表的时候去掉索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OTL(Ov{er} The Last Version 4)是一个开源的库,用于在C++中连接和操作数据库。我将使用OTLv4来连接MySQL数据库。 首先,我们需要准备好OTLv4库和MySQL的驱动程序。我们可以从OTL官方网站下载OTLv4库,并且从MySQL官方网站下载MySQL的驱动程序。确保将这些文件保存在适当的目录中,并设置好编译器的相关设置。 接下来,我们需要包含OTL头文件并初始化OTL库。在代码中添加以下代码: #include <otlv4.h> int main() { // 初始化OTLotl_connect::otl_initialize(); // 连接MySQL数据库 otl_connect db; try { // 使用MySQL驱动程序连接数据库 db.rlogon("mysql_user_name/mysql_password@mysql_data_source"); // 这里的mysql_user_name是你的MySQL用户名, // mysql_password是你的MySQL密码, // mysql_data_source是你的MySQL数据源地址。 // 执行查询或操作 // 断开数据库连接 db.disconnect(); } catch (otl_exception& e) { // 处理异常 std::cerr << "OTL Error: " << e.msg << std::endl; } // 清理OTLotl_connect::otl_terminate(); return 0; } 以上代码演示了如何使用OTLv4连接MySQL数据库。其中,otl_connect类用于表示数据库连接,otl_exception类用于处理异常。在try块中,我们使用驱动程序的rlogon函数连接数据库,并可以在此处执行查询或操作。最后,在catch块中,我们可以处理发生的异常。在代码的结尾处,我们清理OTL库以释放资源。 通过以上步骤,我们就可以使用OTLv4库在C++中连接MySQL数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值