Linux下c++连接sql server FreeTDS配置笔记

最近做一个项目,需要在Linux下通过C++连接sql server 2005,这里列出FreeTDS配置笔记,以作分享和留存。

1. 编译安装FreeTDS

[root@localhost software]# wget ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
[root@localhost software]# tar zxvf freetds-stable.tgz
[root@localhost software]# cd freetds-0.82/
[root@localhost freetds-0.82]# ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib
[root@localhost freetds-0.82]# make && make install
[root@localhost freetds-0.82]# cd ../

2. 修改配置文件

[root@localhost software]# vi /usr/local/freetds/etc/freetds.conf

在该文件添加如下内容:

[test]
    host = 192.168.1.143
    port = 1433
    tds version = 8.0
    client charset = UTF-8

3. 测试连接,如果出现1>则说明成功

[root@localhost software]# /usr/local/freetds/bin/tsql -S test -U test -P test
locale is "zh_CN.UTF-8"
locale charset is "UTF-8"
1 >
2 >quit

4. 编写c++代码测试

[root@localhost software]# vi test.cc
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include </usr/local/freetds/include/sybfront.h>
#include </usr/local/freetds/include/sybdb.h>
int main(void)
{
    //初始化db库
    dbinit();

    //设置数据库信息
    LOGINREC *loginrec = dblogin();
    DBSETLUSER(loginrec, "test");
    DBSETLPWD(loginrec, "test");
    // 设置UTF-8编码
    DBSETLCHARSET(loginrec, "UTF-8");
   
    //连接数据库
    DBPROCESS *dbprocess = dbopen(loginrec, "192.168.1.147:1433");
    if(dbprocess == FAIL)
    {
        printf("Connect fail\n");
        return 0;

    }
    printf("Connect success\n");
   
    //打开test数据库
    if(dbuse(dbprocess, "test") == FAIL)
    {
        printf("Open database fail\n");
    }
    else
    {
        printf("Open database success\n");
    }

    //查询test表
    dbcmd(dbprocess, "select id,test from test");
    if(dbsqlexec(dbprocess) == FAIL)
    {
        printf("Query table error\n");
    }
    DBINT result_code;
    char id[1024];
    char value[1024];
    while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS){
        if (result_code == SUCCEED){
            dbbind(dbprocess, 1, CHARBIND, (DBINT)0, (BYTE*)id);
            dbbind(dbprocess, 2, CHARBIND, (DBCHAR)0, (BYTE*)value);
            while (dbnextrow(dbprocess) != NO_MORE_ROWS){
                printf("id=%s\n", id);
                printf("value=%s\n", id);
            }
        }
    }
     //关闭数据库连接
    dbclose(dbprocess);
    return 0;
}

5. 编译test.cc,注意编译前需要导入环境变量,否则会编译失败。

[root@localhost software]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/freetds/lib/
[root@localhost software]# g++ test.cc /usr/local/freetds/lib/libsybdb.so.5.0.0 -o test
[root@localhost software]# ./test
Connect success
Open database success
id=1
value=test

本站文章皆为原创,如需转载,请注明出处:http://blog.liubijian.com/linux_c_connect_sql_server_by_freetds.html和本站声明,谢谢!

Posted in C++, FreeTDS, Sql Server at 八月 6th, 2010. 2 Comments.

php与memcached服务器交互的分布式实现源码分析[memcache版]

前段时间,因为一个项目的关系,研究了php通过调用memcache和memcached PECL扩展库的接口存储到分布式缓存服务器的机制,在此做我根据他们各自的源码进行分析,希望能对这方面感兴趣的人有些帮助。

本篇文章我会针对php和memcache扩展库的交互根据源码展开分析。
PHP调用memcache的接口通常会是如下过程:

<?php
   $mmc = new Memcache();
   $mmc->addServer('node1', 11211);
   $mmc->addServer('node2', 11211, MemcacheConfig::MEMCACHE_PERSISTENT, 2);
   $mmc->set('key', 'value');
   echo $mmc->get('key');
   $mmc->delete('key');

短短几行代码,一个缓存key的生命周期就已经完整层现。从Memcache的初始化,到addServer添加两个服务器节点,接着set一个key到服务器上,然后get到这个key输出,最后delete这个key。在这个生命周期里,Memcache在底层究竟做了哪些事情,保证了数据存储服务器的均匀分布,数据的完整性?
接下来,我会根据上述生命周期的顺序,循序渐进的分析(由于主题是分布式算法的分析,所以接下来不相干的代码我会略去,很多分析我会直接备注在源码上)。

Posted in Memcached, PHP at 七月 30th, 2010. 3 Comments.

php-cgi进程内存占用高的问题

这几天,部署好vps环境后,我发现一个现象,我的php-cgi进程的内存占用达到了30m左右,而公司的服务器单个进程基本就是12m左右的占用量,以下是内存占用情况:

经过一番配置的查找后发现,原来是加载了xapian.so导致了这个问题,关掉xapian.so后,内存的占用情况:

Posted in PHP, Xapian at 七月 27th, 2010. No Comments.

PHP HipHop实战之安装篇

背景:HipHop是Facebook在今年早些时候放出的一个php开源项目,主要的特征就是把php翻译成了c++执行,HipHop所带来的性能提升用Facebook官方博客上项目负责人赵海平的话说:

With HipHop we’ve reduced the CPU usage on our Web servers on average by about fifty percent, depending on the page. Less CPU means fewer servers, which means less overhead. This project has had a tremendous impact on Facebook.

HipHop的官网是http://github.com/facebook/hiphop-php,上面有说明了HipHop的安装步骤,但是我个人感觉那还是不够详细具体的,实际的安装过程中会碰到了不少问题。

在此我详细罗列出安装步骤和分享出解决所碰到问题的过程和方法,以便能帮助到那些喜爱php技术,想要了解HipHop的人,能对HipHop有更深层次的认识。

Posted in HipHop, PHP at 七月 26th, 2010. 1 Comment.

记录,分享

接触互联网已有些年头,web开发之路从大一下开始后一直走到了现在,从中获取的经验教训之前一直想找个地方总结存放,如今总算是找了个家。这几年的开发中,从很多人的blog分享中得到了启示和指导,很感谢那些有开源精神的人们。虽然目前我还只是个菜鸟,但希望我的实战开发中遇到的经验教训的总结也能帮助到一些人,大家互助共勉!

Posted in 生活琐事 at 七月 19th, 2010. 5 Comments.