您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > QT4连接数据库的各种方法
QT4连接数据库的各种方法驱动编译数据库连接SQL执行操作SQL执行操作使用SQL使用SQLModel类Model类数据呈现视图中数据呈现窗体中驱动编译(ODBC)这里要提及两个数据库驱动,分别是ODBC和OCIWindows操作系统中编译ODBC驱动:Windows操作系统中编译ODBC驱动:执行以下命令,会在%QTDIR%\plugins\sqldrivers目录下面生成执行以下命令,会在%QTDIR%\plugins\sqldrivers目录下面生成qsqlodbc4.dll。qsqlodbc4.dll。cd%QTDIR%\src\plugins\sqldrivers\odbc%QTDIR%\src\plugins\sqldrivers\qmake-oMakefileodbc.promingw32-makemingw32Linux(Unix)操作系统下编译ODBC驱动这里假定ODBC安装在/usr/local/unixODBC。下线ODBC驱动。这里假定ODBC安装在/usr/local/unixODBC。执行以下命令,会在$QTDIR/plugins/sqldrivers目录下面生成qsqlodbc4.a。执行以下命令,会在$QTDIR/plugins/sqldrivers目录下面生成qsqlodbc4.a。cd$QTDIR/src/plugins/sqldrivers/odbcqmakeINCLUDEPATH+=/usr/local/unixODBC/includeLIBS+=LIBS+=L/usr/local/unixODBC/lib-lodbcmake驱动编译(OCI驱动编译(OCI)Windows操作系统中编译OCI驱动:这里假定OracleClient安装在C:\oracle。添加oci.dll动态连接库的环境变量这里假定OracleClient安装在C:\oracle。添加oci.dll动态连接库的环境变量c:\oracle\bin。c:\oracle\bin。setINCLUDE=%INCLUDE%;c:\oracle\oci\includeINCLUDE=%INCLUDE%;c:\oracle\oci\setLIB=%LIB%;c:\oracle\oci\lib\msvcLIB=%LIB%;c:\oracle\oci\lib\cd%QTDIR%\src\plugins\sqldrivers\oci%QTDIR%\src\plugins\sqldrivers\qmake-oMakefileoci.promingw32mingw32-makeLinux(Unix)操作系统下编译OCI驱动:Linux(Unix)操作系统下编译OCI驱动:当然根据你的oracle修正下相应的版本号。当然根据你的oracle修正下相应的版本号。Cd$QTDIR/src/plugins/sqldrivers/ociqmake-oMakefileINCLUDEPATH+=/usr/include/oracle/10.1.0.3/client/LIBS+=LIBS+=-L/usr/lib/oracle/10.1.0.3/client/liboci.promakeQT中使用QT中使用在程序中包含头文件#includeQtSql在程序的.pro文件中添加在程序的.pro文件中添加QT+=sql驱动编译数据库连接SQL执行操作SQL执行操作使用SQL使用SQLModel类Model类数据呈现视图中数据呈现窗体中数据库连接(单一连接)单一数据库连接:staticboolsqlConnection(constQString&HostName,constQString&DatabaseName,constQString&UserName,constQString&Password){QSqlDatabasedb=QSqlDatabase::addDatabase(QODBC);db.setHostName(HostName);db.setDatabaseName(DatabaseName);db.setUserName(UserName);db.setPassword(Password);if(!db.open()){QMessageBox::critical(0,QObject::tr(Error),QObject::tr(Thedatabasereportedanerror:%1).arg(db.lastError().text()));returnfalse;}//在Qt数据库连接后,运行SETNAMES'UTF8'语句或SETNAMES'GBK'。//在Qt数据库连接后,运行SET'UTF8'语句或SET'GBK'。//db.exec(SETNAMES'UTF8');returntrue;}数据库连接(多连接)一staticboolsqlConnections(){//创建一个名为odbc的连接QSqlDatabase*odbc=QSqlDatabase::addDatabase(QODBC,ODBC);if(!defaultDB){qWarning(Failedtoconnecttoodbcdriver);returnfalse;}odbc-setDatabaseName(DB_ODBC_DBNAME);odbc-setUserName(DB_ODBC_USER);odbc-setPassword(DB_ODBC_PASSWD);odbc-setHostName(DB_ODBC_HOST);if(!odbc-open()){odbc-qWarning(Failedtoopensalesdatabase:+odbc-lastError().driverText());odbc-qWarning(odbc-qWarning(odbc-lastError().databaseText());returnfalse;}数据库连接(多连接)二//创建一个名为oracle的连接QSqlDatabase*oracle=QSqlDatabase::addDatabase(QOCI,ORACLE);if(!oracle){qWarning(Failedtoconnecttooracledriver);returnfalse;}oracle-setDatabaseName(DB_ORACLE_DBNAME);oracle-setUserName(DB_ORACLE_USER);oracle-setPassword(DB_ORACLE_PASSWD);oracle-setHostName(DB_ORACLE_HOST);if(!oracle-open()){qWarning(Failedtoopenordersdatabase:+oracle-lastError().driverText());qWarning(oracleqWarning(oracle-lastError().databaseText());returnfalse;}returntrue;}连接的调用QSqlDatabase维护着通过addDatabase()这个静态函数返回的的连接指针。如果有移去一个连接,先调用QSqlDatabase::close()来关闭连接,然后通过静态函数QSqlDatabase::removeDatabase()来移除连接.intmain(intargc,char*argv[]){QApplicationapp(argc,argv);//连接单一数据库//连接单一数据库if(!sqlConnection(10.0.0.3,qjkzdb,sa,syth7777)){return;}//连接多个数据库//连接多个数据库if(!sqlConnections()){return;}//数据库被成功打开,得到它们的指针QSqlDatabase*oracledb=QSqlDatabase::database(ORACLE);//现在我们可以在oracle连接或默认连接上执行SQL命令……returnapp.exec();}SQL执行操作(Select)SELECT操作:QSqlQueryquery;query.exec(SELECTname,salaryFROMemployeeWHEREsalary50000);while(query.next()){QStringname=query.value(0).toString();intsalary=query.value(1).toInt();qDebug()namesalary;}通过QSqlQuery::next()、QSqlQuery::previous()、QSqlQuery::first()、QSqlQuery::last()、QSqlQuery::seek(),QSqlQuery::last()、QSqlQuery::seek(),可以得到下一条、上一条、第一条、最后一条、任意一条记录的位置。QSqlQuery(单一插入)INSERT操作://单一插入数据QSqlQueryquery;query.prepare(INSERTsalaryINTOemployeeVALUES(:id,:name,:salary));query.bindValue(:id,1001);query.bindValue(:name,ThadBeaumont);query.bindValue(:salary,65000);query.exec();QSqlQuery(批量插入)//批量插入数据QSqlQueryquery;query.prepare(insertintomyTablevalues(?,?));QVariantListints;ints1234;query.addBindValue(ints);QVariantListnames;namesHaraldBorisTrondQVariant(QVariant::String);query.addBindValue(names);if(!query.execBatch()){qDebug()query.lastError();}QSqlQuery(update,delete)UPDATE操作:QSqlQueryquery;query.prepare(UPDATEemployeeSETsalary=?WHEREid=1003);query.bindValue(0,70000);query.exe();DELETE操作:QSqlQueryquery;query.exec(DELETEFROMemployeeWHEREid=1007);QSqlQuery(事务处理)事务处理:QSqlDatabase::database().transaction();QSqlQueryquery;query.exec(SELECTidFROMemployeeWHEREname='TorildHalvorsen');if(query.next()){intemployeeId=query.value(0).toInt();query.exec(INSERTINTOproject(id,name,ownerid)VALUES(201,'ManhattanProject',+QString::number(employeeId)+));}QSqlDatabase::database().commit();如果数据库引擎支持事务处理,则函数QSqlDriver::hasFeature(QSqlDriver::Transactions)将返回真。可以通过调用QSqlDatabase::transaction()来初始化一个事务处理。之后执行你想在该事务处理的工作。完了再执行QSqlDatabase::commit
本文标题:QT4连接数据库的各种方法
链接地址:https://www.777doc.com/doc-2854590 .html