linzdb的应用

news/2024/7/10 21:39:12 标签: oracle, 开源
0x01 背景
    前段时间(也许是去年了吧)已经大概介绍了libzdb开源数据库连接池。后期在项目中应用过程中也遇到了一些问题,下面把一些应用场景和遇到的问题简单的说一下,希望对大家有帮助:
0x02 应用场景
    linux C程序读写数据库,利用开源数据库链接池libzdb。
0x03 应用实例和遇到的问题
1、mysql数据库:
   服务器上安装mysql客户端和服务端,然后安装libzdb库,步骤一般都是./configure;make;make install;
程序样例(具体程序怎么封装就看你们程序模块划分了):

        #include <zdb.h>
        #include <stdio.h>
        int main(void)
        {
            int i;
            PreparedStatement_T p;
            
            char insert_sql[] = "insert into user(id, name, age) value(?, ?, ?)";
            char select_sql[] = "select * from user";
            ResultSet_T r;
            
            URL_T url = URL_new("mysql://localhost:3306/db?user=user&password=123456");
            ConnectionPool_T pool = ConnectionPool_new(url);
            ConnectionPool_start(pool);
            Connection_T con = ConnectionPool_getConnection(pool);
            
            TRY
            {
                /* insert delete update*/
                p = Connection_prepareStatement(con, insert_sql);
                  PreparedStatement_setInt(p, 1, 1);
                PreparedStatement_setInt(p, 2, "庞叶蒙");
                PreparedStatement_setString(p, 2, 25);
                PreparedStatement_execute(p);
                /*select*/
                ResultSet_T r = Connection_executeQuery(con, select_sql);
                while (ResultSet_next(r))
                {
                    printf("%-22s\t %s\n", ResultSet_getString(r, 1), ResultSet_getString(r, 2));
                }
            }
            CATCH(SQLException)
            {
                    printf("SQLException -- %s\n", Exception_frame.message);
            }
            FINALLY
            {
                    Connection_close(con);
            }
            END_TRY;
            ConnectionPool_free(&pool);
            URL_free(&url);
        }
     mysql应用过程中没遇到比较困惑的地方。
2、oracle数据库:
    服务器上安装oracle客户端或者服务端,然后安装libzdb库,安装步骤和mysql有区别,因为要利用oci去操作oracle数据库,为了让客户端应用程序连上远端oracle服务器,所以必须安装oracle客户端,找到对应的头文件和库。
    ./configure --help 可以查找一些相关有用信息。
    安装步骤如下:
    ./configure --with-oci-include=/usr/include/oracle/11.1.0.1/client --with-oci-lib=/usr/lib/oracle/11.1.0.1/client/lib
    make
    make install
程序样例(具体程序怎么封装就看你们程序模块划分了):

            #include <zdb.h>
            #include <stdio.h>
            int main(void)
            {
                int i;
                PreparedStatement_T p;
                
                char insert_sql[] = "insert into user(id, name, age) value(?, ?, ?)";
                char select_sql[] = "select * from user";
                ResultSet_T r;
                
                URL_T url = URL_new("oracle://localhost:1521/db?user=user&password=123456");
                ConnectionPool_T pool = ConnectionPool_new(url);
                ConnectionPool_start(pool);
                Connection_T con = ConnectionPool_getConnection(pool);
                
                TRY
                {
                    /* insert delete update*/
                    p = Connection_prepareStatement(con, insert_sql);
                      PreparedStatement_setInt(p, 1, 1);
                    PreparedStatement_setInt(p, 2, "庞叶蒙");
                    PreparedStatement_setString(p, 2, 25);
                    PreparedStatement_execute(p);
                    /*select*/
                    ResultSet_T r = Connection_executeQuery(con, select_sql);
                    while (ResultSet_next(r))
                    {
                        printf("%-22s\t %s\n", ResultSet_getString(r, 1), ResultSet_getString(r, 2));
                    }
                }
                CATCH(SQLException)
                {
                        printf("SQLException -- %s\n", Exception_frame.message);
                }
                FINALLY
                {
                        Connection_close(con);
                }
                END_TRY;
                ConnectionPool_free(&pool);
                URL_free(&url);
            }    
    与mysql不同之处在于url;
0x04 应用中遇到的问题
    1、本想写一个兼容性较强的代码,一份代码能随时切换到不同的数据库,而且代码看起来比较简约,只需切换url就可以进行数据库的切换。
    但在实际开发中,发现有一些特殊的函数是各自数据库所特有,而在libzdb中没有这样的函数,如oracle日期的转换等。可能有吧,只是我们充分了解,也许没有,需要开发这样的接口。
    2、oracle乱码的问题:
    oracle的编码已经在另一篇博文中已经说了。我们遇到的情况是当我们把编码都设置对后,发现我们数据库中还是出现乱码的现象;
    经过分析发现,我们的程序在环境变量生效前就已经运行了,导致我们数据插入数据库中的编码出现乱码。最后在/etc/rc.d/rc.local添加对应的环境变量,才解决问题;

0x05 开源程序使用过程的感想
    1、在使用过程中要充分调研和实践,多查相关资料和应用案例。只有这样才能尽量减少新技术引入的风险。
    2、尽量熟悉开源的源码,为后期维护做好准备。

    3、如果想分析技能,可以按我转发一篇博文中方法去做。

    各位读者写得不好和错误,请大家指正!


http://www.niftyadmin.cn/n/1460643.html

相关文章

Linux解决 -bash: nc: command not found问题

问题: [hadoop@hadoop001 conf]$ nc -lk 9999 -bash: nc: command not found 1 2 从提示信息中我们可以知道,是由于nc命令无法被找到 没有配置nc的命令 解决: [root@hadoop001 ~]# yum install -y nc [root@hadoop001 ~]# yum install -y nc Loaded plugins: fastestmirror…

linux下借助图形界面操作mysql数据库

0x01缘起 最近总是觉得自己碌碌无为&#xff0c;于是想利用一些开源的东西做一个属于自己的应用&#xff0c;也不枉做一会程序员。 在linux平台下用命令行操作数据库时一件比较痛苦的事&#xff0c;于是想利用一下图形界面&#xff0c;提供开发效率。在网上找了一些工具&#…

如何在google添加到html标签_给字符串添加HTML标签 wrap() 方法

点击上方“蓝字”&#xff0c;发现更多精彩。wrap() 方法把每个被选元素放置在指定的 HTML 内容或元素中。<html><head><script type"text/javascript" src"/jquery/jquery.js">script><script type"text/javascript"&g…

C编程之core dump杂谈

0x01简单示例 开始讲前先学习C程序各内存分配情况。请看如下程序&#xff1a; #include <stdio.h> #include <stdlib.h>int a 0; //a在全局已初始化数据区 char *p1 NULL; //p1在BSS区&#xff08;未初始化全局变量&#xff09; int main() {int …

彻底卸载secureCRT,并重装,包括绿色版SecureCRT删除干净

1. winr 进入cmd , 输入regedit进入注册表&#xff0c; 删除HKEY_CURRENT_USER和HKEY_LOCAL_MACHINA两个根键下的SOFTWARE子键中的VanDyke删除即可&#xff0c;HKEY_CURRENT_USER保存的是当前用户配置&#xff0c;HKEY_LOCAL_MACHINA是当前计算机配置信息&#xff0c;务必将两…

mysql 多表查询效率优化_详解Mysql多表联合查询效率分析及优化_MySQL - join

...。MySQL数据库支持如下的联接查询&#xff1a;CROSS JOIN(交叉联接)INNER JOIN(内联接)OUTER JOIN(外联接)其它在进行各种联接操作时&#xff0c;一定要回忆一下在《SQL逻辑查询语句执...代码如下:SELECT column_name FROM table1 LEFT [OUTER] JOIN table2 ON table1.colum…

Linux kill、kill-15、kill-9区别

kill和kill -9&#xff0c;两个命令在linux中都有杀死进程的效果&#xff0c;然而两命令的执行过程却大有不同&#xff0c;在程序中如果用错了&#xff0c;可能会造成莫名其妙的现象。 kill -15 pid&#xff08;默认&#xff09; 执行完该指令后&#xff0c;操作系统会发送一个…

谈谈linux c编程过程

0x01 缘起于阶段性总结 谈谈个人在linux下c/c编程体会&#xff0c;首先基本要求是熟悉linux常用命令和C语言编程。然后一定的理论基础&#xff0c;比如熟悉网络编程&#xff08;TCP/IP协议、HTTP协议等&#xff09;、多线程编程、驱动程序开发等。有一定的理论基础后&#xff0…