QT中操作数据库(ACCESS、MySql)
2014-05-09 03:33
489 查看
(一)QODBC数据库编程连接详细介绍
QT QODBC数据库编程连接详细介绍是本文所介绍的内容,QT为数据库编程提供了一个类似JDBC的统一操作模型,它的底层是具体数据库或数据库接口的插件,由它们负责完成真正的数据库操作。
QT自带有QODBC Driver,在Windows平台上通过系统提供的ODBC Driver可以访问支持ODBC的数据库,如Ms Access、SQL Server等 (Windows XP 自带有Access和SQL Server的ODBC Driver)。
QT数据库模型的基础类是QSqlDatabase对象,拥有一个QSqlDatabase对象代表着拥有一个数据库的连接,在一个已经Open的QSqlDatabase对象上,我们就可以执行各种数据库操作。
要得到一个QSqlDatabase对象的方法是QSqlDatabase的静态函数addDatabase,它创建一个新的QSqlDatabase对象,并注册在内部的Hash表中,最后返回该对象。 (另外静态函数database可用于查询一个已经注册的QSqlDatabase对象)
当我们得到一个新的还没有Open的QSqlDatabase对象,我们要先设置数据库的DSN(Data Source Name),DSN的设置是通过成员函数setDatabaseName,在QODBC中,DSN可以是多种形式
1、操作系统注册的DSN名字
2、一个外部的DSN文件
3、可以被解释的字符串
1和2我们可以在管理面板的ODBC管理面板里面设置或者生成,但是无疑第3种形式更具备灵活性,连接Access的DSN字符串具备类似的形式:
下面是一段用于获得某个指定的mdb文件的数据库连接的代码,函数会先检测是否系统已有该文件的数据库连接,如果有则再检查该连接是否已打开,如果已打开则直接返回,如果有连接但处于关闭状态中则打开后返回,如果还未有任何连接则创建一个新的连接,打开后返回。最后打开失败会抛出一个KDBException异常。
小结:QT QODBC数据库编程连接详细介绍的内容介绍完了,希望本文对你有帮助,关于数据库的更多内容请参考编辑推荐。
(二)QT与数据库连接实例(!!!)
本文介绍的是QT与数据库连接实例,首先加载驱动db=QSqlDatabase::addDatabase("QODBC","db"); // 使用odbc数据库驱动,详细内容请看下文。
连接数据库需要的头文件:
1、连接微软的Access
2、连接mssql2000 数据库
3、连接mysql 数据库
小结:QT与数据库连接实例的内容介绍完了,对于数据库,本人觉得连接时要慎重点,好像很难连接似得,老是出错,不顾本篇文章相信能帮你解决问题。
QT QODBC数据库编程连接详细介绍是本文所介绍的内容,QT为数据库编程提供了一个类似JDBC的统一操作模型,它的底层是具体数据库或数据库接口的插件,由它们负责完成真正的数据库操作。
QT自带有QODBC Driver,在Windows平台上通过系统提供的ODBC Driver可以访问支持ODBC的数据库,如Ms Access、SQL Server等 (Windows XP 自带有Access和SQL Server的ODBC Driver)。
QT数据库模型的基础类是QSqlDatabase对象,拥有一个QSqlDatabase对象代表着拥有一个数据库的连接,在一个已经Open的QSqlDatabase对象上,我们就可以执行各种数据库操作。
要得到一个QSqlDatabase对象的方法是QSqlDatabase的静态函数addDatabase,它创建一个新的QSqlDatabase对象,并注册在内部的Hash表中,最后返回该对象。 (另外静态函数database可用于查询一个已经注册的QSqlDatabase对象)
当我们得到一个新的还没有Open的QSqlDatabase对象,我们要先设置数据库的DSN(Data Source Name),DSN的设置是通过成员函数setDatabaseName,在QODBC中,DSN可以是多种形式
1、操作系统注册的DSN名字
2、一个外部的DSN文件
3、可以被解释的字符串
1和2我们可以在管理面板的ODBC管理面板里面设置或者生成,但是无疑第3种形式更具备灵活性,连接Access的DSN字符串具备类似的形式:
"DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=xxx.mdb"
下面是一段用于获得某个指定的mdb文件的数据库连接的代码,函数会先检测是否系统已有该文件的数据库连接,如果有则再检查该连接是否已打开,如果已打开则直接返回,如果有连接但处于关闭状态中则打开后返回,如果还未有任何连接则创建一个新的连接,打开后返回。最后打开失败会抛出一个KDBException异常。
QSqlDatabase KDBConnection::getAccessConnection( const QString& accessFile, const QString& userName, const QString& password) ...{ const QString PREFIX("puremilk.access.connection"); QString connID = PREFIX + "-" + accessFile; QSqlDatabase connection = QSqlDatabase::database(connID, false); if (connection.isValid()) ...{ if (connection.isOpen()) return connection; } else connection = QSqlDatabase::addDatabase("QODBC", connID); QString dsn = QString( "DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=%1").arg(accessFile); qDebug()<<"Get Access Database connection - "<<dsn; connection.setDatabaseName(dsn); if (!connection.open(userName, password)) ...{ THROW_EXCEPTION(KDBException, connection.lastError().text()); } return connection; }
小结:QT QODBC数据库编程连接详细介绍的内容介绍完了,希望本文对你有帮助,关于数据库的更多内容请参考编辑推荐。
(二)QT与数据库连接实例(!!!)
本文介绍的是QT与数据库连接实例,首先加载驱动db=QSqlDatabase::addDatabase("QODBC","db"); // 使用odbc数据库驱动,详细内容请看下文。
连接数据库需要的头文件:
#include <QSqlDatabase> #include <QSqlQuery>
1、连接微软的Access
QSqlDatabase ldb = QSqlDatabase::addDatabase("QODBC"); ldb.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=system.mdb;UID=;PWD=xiaozhuset"); bool ok = ldb.open(); //新定义一个查询集合,并指定 链接关键字。 如果有多个连接,可以随意指定一个你需要的。 QSqlQuery mquery=QSqlQuery::QSqlQuery(ldb); if(ok) { bool isok=mquery.exec("select * from sql_set;"); if (!isok) { ldb.close(); return -1; } //这个是必须的,因为查处的结果集当前位置不在第一条记录上。 mquery.next(); QString sHostName=mquery.value(1).toString(); QString sDatabaseName=mquery.value(2).toString(); QString sUserName=mquery.value(3).toString(); QString sPassword=mquery.value(4).toString(); //清除结果集 mquery.clear(); // 如果该连接不再使用,就可以关闭。 ldb.close(); //这里是将从数据库读出的数据写到一个list控件里 ui.list_out->insertItem(ui.list_out->count(),sHostName); ui.list_out->insertItem(ui.list_out->count(),sDatabaseName); } else { // 打开本地数据库失败, QMessageBox::critical(0, QObject::tr("读取Access数据库错误!"),db.lastError().text()); return -1; }
2、连接mssql2000 数据库
QString strDatabaseName = QString("DRIVER={SQL Server};Server=(%1);Database=%2").arg("local").arg(sDatabaseName); db=QSqlDatabase::addDatabase("QODBC","db"); // 使用odbc数据库驱动 db.setHostName(sHostName); db.setPort(1433); db.setDatabaseName(strDatabaseName); // 我们之前建立的数据库连接关键字 db.setUserName(sUserName); db.setPassword(sPassword); bool ok = db.open(); //尝试连接数据库 if(ok) { menuset_set->dbdb=db; // 这里用sa已经成功连上数据库 return 0; } else { // 打开数据库失败, QMessageBox::critical(0, QObject::tr("数据库连接错误!"),db.lastError().text()); return -2; } mssql2000数据库连接的使用和Access连接使用方法一样。 QSqlQuery mquery=QSqlQuery::QSqlQuery(db); bool ok1=mquery.exec("select * from CarteMenu;"); if (ok1==false)return -1; QString menu_mkey=mquery.value(13).toString(); QString strmenu_lang=mquery.value(3).toString(); //清除结果集 mquery.clear();
3、连接mysql 数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql数据库驱动 db.setHostName("localhost"); db.setDatabaseName("exampledb"); // 数据库名称 db.setUserName("sa"); // 用户名 db.setPassword("1"); // 密码 bool ok = db.open(); // 尝试连接数据库 if(ok) { QSqlQuery myquery; if(myquery.exec("select * from employeedb")) { int num = 0; if(db.driver()->hasFeature(QSqlDriver::QuerySize)) { num = myquery.size(); // 如果支持结果影响的行数,那么直接记录下来 } else { myquery.last(); //否则定位到结果最后 num = myquery.at() + 1; } //这里添加数据库的查询结果处理操作 } else // 如果查询失败 { QSqlError error = myquery.lastError(); } } else // 打开数据库失败 { }
小结:QT与数据库连接实例的内容介绍完了,对于数据库,本人觉得连接时要慎重点,好像很难连接似得,老是出错,不顾本篇文章相信能帮你解决问题。
相关文章推荐
- QT中操作数据库(ACCESS、MySql)
- QT中操作数据库(ACCESS、MySql)
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(三)
- QT-数据库操作(以MYSQL为例)
- 【备用】非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等
- 【经典】c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)
- 【经典】c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)
- MFC中使用ADO操作各类数据库的封装类,包括MySql、Access、Oracle、MSSql
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(一)
- MFC中使用ADO操作各类数据库的封装类,包括MySql、Access、Oracle、MSSql
- qt 5 数据库操作(mysql)
- 【备用】非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)2
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(二)
- 通过Qt5.4.2访问MySQL5.5与Access 2013数据库
- 【备用】非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(三)
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(一)
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(1)