当前位置: 技术问答>linux和unix
求助!关于多线程下数据库操作的问题,请大家帮忙看看
来源: 互联网 发布时间:2015-10-09
本文导语: 我在main函数里用以下方法连接数据库: void connect_db(void) { EXEC SQL BEGIN DECLARE SECTION; char username[30]; char password[30]; char serverName[30]; char ...
我在main函数里用以下方法连接数据库:
void connect_db(void)
{
EXEC SQL BEGIN DECLARE SECTION;
char username[30];
char password[30];
char serverName[30];
char DBName[20];
EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER SQLERROR CALL error_handler();
EXEC SQL WHENEVER SQLWARNING CALL warning_handler();
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler();
......
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :serverName;
EXEC SQL USE :DBName;
}
在主程序里对数据库的访问是成功的,但是在线程中却返回数据库没有连接成功。
于是我在每个线程开始时再去连接数据库,一开始的操作都是对的。由于我在每个线程里的操作都是对同一个数据库的同一个表的不同行进行读写操作,当其中一个线程的操作完成,线程结束时,整个表好像都被锁住了,不仅其他线程的操作被堵住,我直接在控制台登陆数据库,登陆成功,但对这张表也不能进行任何操作,请问这是什么原因造成的?请高手指点。
void connect_db(void)
{
EXEC SQL BEGIN DECLARE SECTION;
char username[30];
char password[30];
char serverName[30];
char DBName[20];
EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER SQLERROR CALL error_handler();
EXEC SQL WHENEVER SQLWARNING CALL warning_handler();
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler();
......
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :serverName;
EXEC SQL USE :DBName;
}
在主程序里对数据库的访问是成功的,但是在线程中却返回数据库没有连接成功。
于是我在每个线程开始时再去连接数据库,一开始的操作都是对的。由于我在每个线程里的操作都是对同一个数据库的同一个表的不同行进行读写操作,当其中一个线程的操作完成,线程结束时,整个表好像都被锁住了,不仅其他线程的操作被堵住,我直接在控制台登陆数据库,登陆成功,但对这张表也不能进行任何操作,请问这是什么原因造成的?请高手指点。
|
1、proc threads=yes ....
2、EXEC SQL ENABLE THREADS;
EXEC SQL CONTEXT ALLOCATE :ctx;
EXEC SQL CONTEXT USE :ctx;
EXEC SQL CONTEXT FREE :ctx;
2、EXEC SQL ENABLE THREADS;
EXEC SQL CONTEXT ALLOCATE :ctx;
EXEC SQL CONTEXT USE :ctx;
EXEC SQL CONTEXT FREE :ctx;
|
什么数据库?
你设置的是什么锁?行锁?页锁??
你设置的是什么锁?行锁?页锁??