本人目前在开发一个认证系统,每次有用户请求过来都会去数据库中查询该用户是否合法用户。
因此连接数据库比较频繁。目前的情况是有时连接数据库的时会出现3秒左右才能连上的情况,所以在考虑能不能用连接池代替下面的连接以提高连接速度。
但用proc做连接池我还不太懂,所以不知哪位可否赐教一二或者能分享一下代码示例。
下面是我目前的数据库连接情况,每个用户来请求后都会运行一次下面的代码。void connect_db() {
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR user[LENGTH_ONE]; // used for connect database
VARCHAR pass[LENGTH_ONE]; // used for connect database
VARCHAR tnsname[LENGTH_ONE]; // used for connect database
EXEC SQL END DECLARE SECTION; strcpy(user.arr,"usename");
user.len=(unsigned short)strlen((char *)user.arr);
strcpy(pass.arr,"password");
pass.len=(unsigned short)strlen((char *)pass.arr);
strcpy(tnsname.arr,"dbname");
tnsname.len=(unsigned short)strlen((char *)tnsname.arr); /* connect to database */
EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :tnsname;
}

解决方案 »

  1.   

    其实,不需要你在代码上做多少工作。而是在预编译阶段生成带有pool功能的代码。
    我将相应的说明帖到下边,希望对你有所帮助。(CPOOL=yes)How to Enable Connection Pooling
    To enable connection pooling while precompiling an application, user must set the
    command line option CPOOL=YES. Based on CPOOL=YES/NO, the connection pool
    feature is enabled or disabled.Note: By default, CPOOL is set to NO and hence the connection
    pool feature is disabled. This feature cannot be enabled or disabled inline.给一个建议:最有效的工作方式(coder),手头一定要放着相应编程的说明文档或联机文档,
    先查询文档,直到自己确实找不到答案。因为说明文档一定是最一线的资料。
      

  2.   


    您说的是不是如下在makefile中这样描述:...
    PROC =$(ORACLE_HOME)/bin/proc
    PROCFLAGS = SEMANTICS THREADS=YES CPOOL=YES CMAX=40 CMIN=1 CINCR=1 include=$(INC_DIR)
    ...
    .pc.o:
    $(PROC) $(PROCFLAGS) iname=$*.pc oname=$*.c