主题:[求助]linux访问数据库时,速度太慢
在linux下编译如下PROC程序后运行
查询结果大约在2分钟后显示
不光这一个程序
所有对数据库的访问操作都很慢
请大侠们指点下
谢谢
我用的是oracle数据库
#include "/usr/local/ora/precomp/public/sqlca.h"
#ifndef ORA_PROC
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#endif
void sql_error(char *msg)
{
printf("\n%s %s\n", msg,(char *)sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(0);
}
int main()
{
EXEC SQL INCLUDE sqlca; /* 定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。 */
EXEC ORACLE OPTION (RELEASE_CURSOR = YES); /*使PROC 在执行完后释放与嵌入SQL有关资源 */
EXEC SQL WHENEVER SQLERROR DO sql_error(" <ERROR> ");
/*声明宿主变量*/
EXEC SQL BEGIN DECLARE SECTION;
char oraCN[50];
char name[25];
char id[3];
EXEC SQL END DECLARE SECTION;
/*设置连接数据库的用户名、密码和数据库服务名*/
memset(oraCN, 0, 50);
strcpy(oraCN,"zy/zy@//192.168.152.130:1521/orcl");
/* oraCN.len = strlen(oraCN.arr);
oraCN.arr[oraCN.len] = '\0';*/
/*以test用户连接数据库*/
EXEC SQL CONNECT :oraCN;
printf("Connect!\n");
/*声明游标*/
EXEC SQL DECLARE stu_cursor CURSOR FOR
SELECT bank_code,bank_name from par_bank WHERE IS_JW = 1;
printf("DECLARE CURSOR OK!\n");
/*打开游标*/
EXEC SQL OPEN stu_cursor;
if(sqlca.sqlcode == 0)
{
printf("OPEN CURSOR OK!\n");
}
else {
printf("open err![%d]", sqlca.sqlcode);
}
while(1)
{
EXEC SQL FETCH stu_cursor INTO :id,:name;
if(sqlca.sqlcode != 0 && sqlca.sqlcode != 1403)
{
printf("error!");
}
else if (sqlca.sqlcode == 1403)
{
break;
}
printf("Id=%s Name=%s \n",id,name);
}
/*关闭游标*/
EXEC SQL CLOSE stu_cursor;
/*提交事务并断开与数据库的连接*/
EXEC SQL COMMIT WORK RELEASE;
printf("Disconnect!\n");
return 0;
}
查询结果大约在2分钟后显示
不光这一个程序
所有对数据库的访问操作都很慢
请大侠们指点下
谢谢
我用的是oracle数据库
#include "/usr/local/ora/precomp/public/sqlca.h"
#ifndef ORA_PROC
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#endif
void sql_error(char *msg)
{
printf("\n%s %s\n", msg,(char *)sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(0);
}
int main()
{
EXEC SQL INCLUDE sqlca; /* 定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。 */
EXEC ORACLE OPTION (RELEASE_CURSOR = YES); /*使PROC 在执行完后释放与嵌入SQL有关资源 */
EXEC SQL WHENEVER SQLERROR DO sql_error(" <ERROR> ");
/*声明宿主变量*/
EXEC SQL BEGIN DECLARE SECTION;
char oraCN[50];
char name[25];
char id[3];
EXEC SQL END DECLARE SECTION;
/*设置连接数据库的用户名、密码和数据库服务名*/
memset(oraCN, 0, 50);
strcpy(oraCN,"zy/zy@//192.168.152.130:1521/orcl");
/* oraCN.len = strlen(oraCN.arr);
oraCN.arr[oraCN.len] = '\0';*/
/*以test用户连接数据库*/
EXEC SQL CONNECT :oraCN;
printf("Connect!\n");
/*声明游标*/
EXEC SQL DECLARE stu_cursor CURSOR FOR
SELECT bank_code,bank_name from par_bank WHERE IS_JW = 1;
printf("DECLARE CURSOR OK!\n");
/*打开游标*/
EXEC SQL OPEN stu_cursor;
if(sqlca.sqlcode == 0)
{
printf("OPEN CURSOR OK!\n");
}
else {
printf("open err![%d]", sqlca.sqlcode);
}
while(1)
{
EXEC SQL FETCH stu_cursor INTO :id,:name;
if(sqlca.sqlcode != 0 && sqlca.sqlcode != 1403)
{
printf("error!");
}
else if (sqlca.sqlcode == 1403)
{
break;
}
printf("Id=%s Name=%s \n",id,name);
}
/*关闭游标*/
EXEC SQL CLOSE stu_cursor;
/*提交事务并断开与数据库的连接*/
EXEC SQL COMMIT WORK RELEASE;
printf("Disconnect!\n");
return 0;
}