⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csqlquery.cpp

📁 很好用的数据库连接组件
💻 CPP
字号:
#include "stdafx.h"#include <ctype.h>#include "CSqlQuery.h" #include "CSqlConnection.h" #include "csql.h" #include "comlog.h"/*****************************************************/CSqlQuery::CSqlQuery(CSqlResult*r){	d=new CSqlResultShared(r);}/*    析构。减少引用计数,如果减到0释放。*/CSqlQuery ::~CSqlQuery(){    if(d->deref())    {        delete d ;        // need delete when no ref .        d=NULL ;    }}CSqlQuery::CSqlQuery(const CSqlQuery&other):d(other.d){    d->ref();    // only need add a ref}CSqlQuery&CSqlQuery::operator=(const CSqlQuery&other){    other.d->ref();    // add a ref in other csqlquery    if(d->deref())    {        delete d ;        d=NULL ;    }    d=other.d ;    return*this ;}/*    在指定连接上执行sql。如果db为空为缺省连接*/CSqlQuery::CSqlQuery(const string&query,CSqlConnection*db){//	TRACE("临时调试");	d=new CSqlResultShared(0);	CSqlConnection*database=db ;	if(!database)	{		LOG(NULL,0,"使用默认连接创建CSqlQuery对象");		database=CSqlConnection::connection();   // 缺省连接	}	else	{		LOG(NULL,0,"使用设定连接创建CSqlQuery对象");	}	if(database)	{		*this=database->driver()->createQuery();	}	if(query!="")	{		exec(query);	}}/*    指定列的值是否为NULL(数据库列值空)*/bool CSqlQuery::isNull(int field)const {    if(!d->sqlResult)    return FALSE ;    if(d->sqlResult->isActive()&&d->sqlResult->isValid())    return d->sqlResult->isNull(field);    return FALSE ;}bool CSqlQuery::isTableExist(const string&table){    #ifdef SQL_SYBASE     string temp="select name from sysobjects where name like '" ;    temp.append(table);    temp.append("'");    #endif     #ifdef SQL_ORACLE     char cTempBuf[128];    char c ;    strcpy(cTempBuf,table.c_str());    for(int i=0;i<strlen(cTempBuf);i++)    {        c=toupper(cTempBuf[i]);        cTempBuf[i]=c ;    }    string temp="select tname from tab where tname like '" ;    temp.append(cTempBuf);    temp.append("'");    #endif     exec(temp);    if(isActive())    {        while(next())        {            return true ;        }    }    return false ;}bool CSqlQuery::useDb(const string&db){    string temp="use " ;    temp.append(db);    return exec(temp);}/*================================================================================** 函数名称:	bool CSqlQuery::exec (const string & query)** 主要功能:	执行sql** 入口参数:		** 序号	参数类新	参数名称	作用			说明** 1	const string&	query   sql语句	** 出口参数:	类型: 	bool		作用:是否成功** 修改记录:** 序号	修改人		修改日期	修改内容			修改目的**	=================================================================================== */bool CSqlQuery::exec(const string&query){//	TRACE("临时调试");	LOG1(NULL,0,"SQL[%s]",query.c_str());	if(!d->sqlResult)	{		return FALSE ;	}	d->sqlResult->setActive(FALSE);	d->sqlResult->setLastError(CSqlError());	if(!driver())	{        	ERRLOG(NULL,0,"执行SQL操作时,驱动无效");		return FALSE ;	}	// 	if(d->count>1)	{		LOG(NULL,0,"结果集已经被别的对象引用,则不要破坏,建一个新的");//		TRACE("临时调试");		*this=driver()->createQuery();	}	d->sqlResult->setQuery(query);	if(!driver()->isOpen()||driver()->isOpenError())	{//		TRACE("临时调试");		ERRLOG(NULL,0,"执行SQL操作时,数据库没有打开");		return FALSE ;	}	if(query=="")	{//		TRACE("临时调试");		ERRLOG(NULL,0,"执行SQL操作时,SQL语句为空");		return FALSE ;	}		return d->sqlResult->reset(query);	//执行sql}bool CSqlQuery::multi_exec(const string&query){    if(!d->sqlResult)    {        return FALSE ;    }    d->sqlResult->setActive(FALSE);    d->sqlResult->setLastError(CSqlError());    if(!driver())    {        //      qWarning("CSqlQuery::exec: no driver" );        return FALSE ;    }    // 结果集已经被别的对象引用,则不要破坏,建一个新的    if(d->count>1)    {        *this=driver()->createQuery();    }    d->sqlResult->setQuery(query);    if(!driver()->isOpen()||driver()->isOpenError())    {        //      qWarning("CSqlQuery::exec: database not open" );        return FALSE ;    }    if(query=="")    {        //      qWarning("CSqlQuery::exec: empty query" );        return FALSE ;    }    return d->sqlResult->multi_reset(query);    //执行sql}/*    i列的值*/int CSqlQuery::intValue(int i)const {    return d->sqlResult->intData(i);}char*CSqlQuery::stringValue(int i)const {    if(!d->sqlResult)    {        return NULL ;    }    return d->sqlResult->stringData(i);}CVariant CSqlQuery::value(int i)const {    if(!d->sqlResult)    {        return CVariant();    }    /*      if (isActive () && isValid () && (i > CSql::BeforeFirst))      {        return d->sqlResult->data (i);      }      return CVariant ();      */    return d->sqlResult->data(i);}/*   上个sql语句*/string CSqlQuery::lastQuery()const {    if(!d->sqlResult)    return "" ;    return d->sqlResult->lastQuery();}/*    绑定*/bool CSqlQuery::bind(char buf[][256],int len){    if(!d->sqlResult)    {        return false ;    }    return d->sqlResult->bind(buf,len);}int CSqlQuery::get_result(){    return d->sqlResult->get_result();}bool CSqlQuery::cancel(bool bAll){    return d->sqlResult->cancel(bAll);}int CSqlQuery::get_columns(){    return d->sqlResult->get_columns();}const CSqlDriver*CSqlQuery::driver()const {    if(!d->sqlResult)    return 0 ;    return d->sqlResult->driver();}const CSqlResult*CSqlQuery::result()const {    return d->sqlResult ;}bool CSqlQuery::next(){    // if (!isSelect () || !isActive ())    if(!isActive())    return FALSE ;    return d->sqlResult->fetch();}/*   查询结果的行数*/int CSqlQuery::size()const {    if(!d->sqlResult)    return-1 ;    if(isActive())    return d->sqlResult->size();    return-1 ;}/*   查询结果的行数   或者其他sql影响的行数*/int CSqlQuery::numRowsAffected()const {    if(!d->sqlResult)    return-1 ;    if(isActive())    return d->sqlResult->numRowsAffected();    return-1 ;}CSqlError CSqlQuery::lastError()const {    if(!d->sqlResult)    return CSqlError();    return d->sqlResult->lastError();}/*!    Returns TRUE if the query is currently positioned on a valid    record; otherwise returns FALSE.*/bool CSqlQuery::isValid()const {    if(!d->sqlResult)    return FALSE ;    return d->sqlResult->isValid();}/*!    Returns TRUE if the query is currently active; otherwise returns    FALSE.*/bool CSqlQuery::isActive()const {    if(!d->sqlResult)    return FALSE ;    return d->sqlResult->isActive();}/*!    Returns TRUE if the current query is a \c SELECT statement;    otherwise returns FALSE.*/bool CSqlQuery::isSelect()const {    if(!d->sqlResult)    return FALSE ;    return d->sqlResult->isSelect();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -