张宾卡
驱动编译 数据库连接 SQL执行操作 SQL执行操作 使用SQL 使用SQL
Model类 Model类 数据呈现视图中 数据呈现窗体中
驱动编译(ODBC) 驱动编译(ODBC)
这里要提及两个数据库驱动,分别是ODBC和 这里要提及两个数据库驱动,分别是ODBC和OCI Windows操作系统中编译ODBC驱动: Windows操作系统中编译ODBC驱动: 执行以下命令,会在%QTDIR%\plugins\sqldrivers目录下面生成 执行以下命令,会在%QTDIR%\plugins\sqldrivers目录下面生成 qsqlodbc4.dll。 qsqlodbc4.dll。 cd %QTDIR%\src\plugins\sqldrivers\odbc %QTDIR%\src\plugins\sqldrivers\ qmake -o Makefile odbc.pro mingw32-make mingw32
Linux(Unix)操作系统下编译ODBC驱动: Linux(Unix)操作系统下编译ODBC驱动: 下线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/odbc qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+="LIBS+=L/usr/local/unixODBC/lib -lodbc" make
驱动编译(OCI 驱动编译(OCI )
Windows操作系统中编译OCI驱动: Windows操作系统中编译OCI驱动: 这里假定Oracle Client安装在C:\oracle。添加oci.dll动态连接库的环境变量 这里假定Oracle Client安装在C:\oracle。添加oci.dll动态连接库的环境变量 c:\oracle\bin。 c:\oracle\bin。 set INCLUDE=%INCLUDE%;c:\oracle\oci\include INCLUDE=%INCLUDE%;c:\oracle\oci\ set LIB=%LIB%;c:\oracle\oci\lib\msvc LIB=%LIB%;c:\oracle\oci\lib\ cd %QTDIR%\src\plugins\sqldrivers\oci %QTDIR%\src\plugins\sqldrivers\ qmake -o Makefile oci.pro mingw32mingw32-make
Linux(Unix)操作系统下编译OCI驱动: Linux(Unix)操作系统下编译OCI驱动: 当然根据你的oracle修正下相应的版本号。 当然根据你的oracle修正下相应的版本号。 cd $QTDIR/src/plugins/sqldrivers/oci qmake -o Makefile "INCLUDEPATH+=/usr/include/oracle/10.1.0.3/client/" "LIBS+="LIBS+=-L/usr/lib/oracle/10.1.0.3/client/lib" oci.pro make
QT中使用 QT中使用
在程序中包含头文件 #include
<QtSql> 在程序的.pro文件中添加 在程序的.pro文件中添加 QT += sql
驱动编译 数据库连接 SQL执行操作 SQL执行操作 使用SQL 使用SQL
Model类 Model类 数据呈现视图中 数据呈现窗体中
数据库连接(单一连接)
单一数据库连接: static bool sqlConnection(const QString& HostName, const QString& DatabaseName, const QString& UserName, const QString& Password) { QSqlDatabase db = 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("The database reported an error: %1").arg(db.lastError().text())); return false; } //在Qt数据库连接后,运行"SET NAMES 'UTF8'"语句或"SET NAMES 'GBK'"。 //在Qt数据库连接后,运行"SET 'UTF8'"语句或"SET 'GBK'"。 //db.exec("SET NAMES 'UTF8'"); return true; }
数据库连接(多连接)一
static bool sqlConnections() { //创建一个名为odbc的连接 //创建一个名为odbc的连接 QSqlDatabase *odbc = QSqlDatabase::addDatabase("QODBC", "ODBC"); if (! defaultDB) { qWarning("Failed to connect to odbc driver"); return false; } odbcodbc->setDatabaseName(DB_ODBC_DBNAME); odbcodbc->setUserName(DB_ODBC_USER); odbcodbc->setPassword(DB_ODBC_PASSWD); odbcodbc->setHostName(DB_ODBC_HOST); if (! odbc->open()) odbc{ qWarning("Failed to open sales database: " + odbc->lastError().driverText()); odbcqWarning(odbcqWarning(odbc->lastError().databaseText()); return false; }
数据库连接(多连接)二
//创建一个名为oracle的连接 //创建一个名为oracle的连接 QSqlDatabase *oracle = QSqlDatabase::addDatabase("QOCI", "ORACLE"); if (! oracle) { qWarning("Failed to connect to oracle driver"); return false; } oracleoracle->setDatabaseName(DB_ORACLE_DBNAME); oracleoracle->setUserName(DB_ORACLE_USER); oracleoracle->setPassword(DB_ORACLE_PASSWD); oracleoracle->setHostName(DB_ORACLE_HOST); if (! oracle->open()) oracle{ qWarning("Failed to open orders database: " + oracle->lastError().driverText()); oracleqWarning(oracleqWarning(oracle->lastError().databaseText()); return false; } return true; }
连接的调用
QSqlDatabase维护着通过addDatabase()这个静态函数返回的的连接指针。 QSqlDatabase维护着通过addDatabase()这个静态函数返回的的连接指针。 如果有移去一个连接,先调用QSqlDatabase::close()来关闭连接,然后通过静态函数 如果有移去一个连接,先调用QSqlDatabase::close()来关闭连接,然后通过静态函数 QSqlDatabase::removeDatabase()来移除连接。 QSqlDatabase::removeDatabase()来移除连接。 int main(int argc, char *argv[]) { QApplication app(argc, argv); //连接单一数据库 //连接单一数据库 if (!sqlConnection("10.0.0.3", "qjkzdb", "sa", "syth7777")) { return; } //连接多个数据库 //连接多个数据库 if (!sqlConnections()) { return; } //数据库被成功打开,得到它们的指针 //数据库被成功打开,得到它们的指针 QSqlDatabase *oracledb = QSqlDatabase::database("ORACLE"); //现在我们可以在oracle连接或默认连接上执行SQL命令 //现在我们可以在oracle连接或默认连接上执行SQL命令 …… return app.exec(); }
驱动编译 数据库连接 SQL执行操作 SQL执行操作 使用SQL 使用SQL
Model类 Model类 数据呈现视图中 数据呈现窗体中
SQL执行操作(Select) SQL执行操作(Select)
SELECT操作: SELECT操作: QSqlQuery query; query.exec("SELECT name, salary FROM employee WHERE salary > 50000"); while (query.next()) { QString name = query.value(0).toString(); int salary = query.value(1).toInt(); qDebug() << name << salary; } 通过QSqlQuery::next()、QSqlQuery::previous()、QSqlQuery::first()、 通过QSqlQuery::next()、QSqlQuery::previous()、QSqlQuery::first()、 QSqlQuery::last()、QSqlQuery::seek(), QSqlQuery::last()、QSqlQuery::seek(), 可以得到下一条、上一条、第一条、最后一条、任意一条记录的位置。
QSqlQuery(单一插入) QSqlQuery(单一插入)
INSERT操作: INSERT操作: //单一插入数据 //单一插入数据 QSqlQuery query; query.prepare("INSERT
salary) "
INTO employee (id, name,