在 debian 上使用 qt 访问 oracle 数据库

之前的一个使用 oracle 的项目自从我把数据库装好之后就没有下文了,最近迎来了另一个也需要使用 oracle 的项目。由于 oracle 不是开源的,为了能在 Linux 下使用 qt 访问,只好自己编译对应的驱动。在网上找了一堆资料,又折腾了好几天,终于在今天晚上成功了,在这里记录一下。

先说一下环境:debian 6.0,qt sdk 4.8.1,oracle 11gR2。本文主要记录的是怎样编译驱动和怎样连接,关于 oracle 数据库服务器端安装中的一些问题可以参考之前的一篇 笔记

准备工作

下载 qt sdk。因为编译的时候 qt 工具链和源代码要保持一致,而 debian 6 源里的 qt 版本是 4.6.3,官网上已经找不到对应的源码包了,所以下载 sdk 安装(sdk 包含工具链和对应版本的源码),安装的时候要注意把安装 source code 的选项勾上。这里使用 QTDIR 表示 …

阅读全文…

项目总结 (2)

很累的一个月,为了赶项目天天码代码,第一次在看到代码的时候有想吐的感觉。

用 lua 作为配置文件

因为在之前的一个项目中师兄采用了网络作为前后端交互的方式,这样两部分分开调试比较方便,从此以后实验室的项目不管是否需要联网都采用这种方法,结果在项目中除了根据甲方的需求把控件拖来拖去之外剩下的就是解析各种各样的报文格式。

前段时间另一个项目需要写一个报文测试的小工具,就是有一堆自定义的报文格式,界面上有下拉条选择或者让用户自己输入某个字段的值,然后把报文发出去,收到返回信息并且把内容解析一下。我已经不怎么碰这个项目了,但是这次时间有点紧,于是哥又“被”当仁不让地充当临时工把活接了下来。在前一个项目中师兄使用了 xml 作为报文格式配置文件,这个小工具我打算用 lua 来试一下,也算是一个实际应用的机会。界面用了 qt,因为现在 qt 俨然成为本人实验室项目界面开发的默认工具了。

先说说使用 lua 作为配置文件吧。报文格式是常见的 TLV 格式(“T”表示 type,“L”表示长度,“V”表示数据),有些字段会有限定的范围:

packet = {
    "报文名称",
    {"字段名称1", "字段类型", 个数, {可选值1, "说明1"}, {可选值2}, {起始值, 结束值, 步长}, ...},
    ......
}

其中字段类型定义了一些常见的类型并规定了长度,例如“int”就是 4 字节,“double”就是 8 个字节等。个数表示该字段中包含了多少个这样的类型。例如…

阅读全文…

项目总结 (1)

年前开始做这个项目,虽然主要的功能放假前已经完成,但是老板为了体现实验室的主题——并行计算,要求把一个简单的 hash 查找功能弄成复杂的“多线程并行计算”,尽管最后的多线程实现比串行的还慢(通过使用 gprof 分析发现花在同步上的开销超过了多线程带来的并行效益,因为实际的 hash 查找不怎么耗时间)。当然这些我是无力改变的,不过有个好处就是老板虽然不懂具体技术,但是却不会瞎指挥,所以在实现上倒是挺自由的,因此可以随便尝试自己想学的东西,只要最后项目完成就行。

好了,发完牢骚之后总结一下从中学到的东西吧。

生产者-消费者问题

我觉得所有的问题基本都可以归结为生产者-消费者问题:输入是生产者,程序处理是消费者。刚开始写的是串行的代码,使用惯用的套路:

int main(void)
{
    ......

    while ((rec = producer()))
        consumer(rec);

    ......
}

串行程序需要由 main() 函数驱动,主要逻辑由 main() 函数搭建,这样的话如果非要把多线程嵌到这个模型中,看起来会有点奇怪:

void* producer(void)
{
    /* blcok until data arrives */
    return get_resource_from(resource_pool);
}

void consumer(void* 

阅读全文…