- QT对数据库的支持
- QtSql类用于对数据库的支持
- 使用是需包含<QtSql>库
- 包含以下类:
- QSqlDatabase 类用于新建数据库
- QSqlQuery用来来执行sql语句,如QSqlQuery query;query.exec("create table student(ID int primary key,name varchar(20)");
- 需要在.pro文件底部加上 QT +=sql 一句
- Qt支持的数据库类型:
- 显示可用数据库驱动:
-
qDebug()<< "avalible sql drivers:";QStringList drivers= QSqlDatabase::drivers();foreach( QString driver,drivers){qDebug()<< "/t"<<driver;}return a.exec();
- linux系统下查看QT支持的数据库
- 进入此目录:pyd@ubuntu:/usr/local/Trolltech/Qt-4.6.3/plugins/sqldrivers$
- pyd@ubuntu:/usr/local/Trolltech/Qt-4.6.3/plugins/sqldrivers$ ls
libqsqlite.so libqsqlite.so.debug libqsqlmysql.so - ldd .so文件,查看是否有not found
- Qt中使用sqlite
- #include <QtCore/QCoreApplication>
- #include <QtSql>
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”); //添加数据库驱动
- db.setDatabaseName(“:memory:”); //数据库连接命名
- //也可以写“e:test.db"
- if(!db.open()) //打开数据库
- {
- return fals e;
- }
- QSqlQuery query; // 以下执行相关QSL 语句
- query.exec(“create table student(id int primary key,name varchar)”);
- //新建student 表,id设置为主键,还有一个name项
- query.exec(“insert into student values(1,’xiaogang’)”);
- query.exec(“insert into student values(2 ,’xiaoming’)”);
- query.exec(“insert into student values(3,’xiaohong’)”);
- //向表中插入3 条记录
- query.exec(“select id,name from student where id >= 2″);
- //查找表中id >=2 的记录的id项和name项的值
- while(query.next()) //query.next()指向查找到的第一条记录,然后每次后移一
- 条记录
- {
- int ele0 = query.value(0).toInt(); //query.value(0)是id的值,将其
- 转换为int 型
- QString ele1 =query.value(1).toString();
- qDebug() << ele0 <<ele1 ; //输出两个值
- }
- return a.exec();
- }
- 我们使用了SQLite数据库,连接名为“:memory:”表示这是建立在内存中的数据库,也就是
- 说该数据库只在程序运行期间有效。如果需要保存该数据库文件,我们可以将它更改为实际的
- 文件路径
- 示例:
- Qt中使用其他数据库
- QT需要手动编译其他数据库的驱动代码,以插件的形式使用它们。
- 在QT帮助文档里搜索SQL Database drivers可以看到每种驱动的方法
- sqlite数据库
- sqlite是一款轻量级的数据库,经常被用在嵌入式,免费的Qt自带sqlite的驱动
- 在本地生成数据库,没有用户与密码设置
- linux下sqlite的安装:
- sudo apt-get install sqlite3
- linux下sqlite的使用:
- sqlite在当前目录下生成、打开数据库文件
- 命令行里输入“sqlite3 1.db”,如果1.db文件存在则会打开,不存在则创建,实际似乎在.database后创建
- .database
- .tables
- .quit .exit
- QT中使用myssql
- setDatabaseName("test");//不能指定目录,不能加.db
- //连接数据库
- QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");//选择数据库类型
- db.setDatabaseName("ods1");//设置数据库名称
- if(isSqlConnected)
- {
- }
- else
- {
- db.setHostName(ui->hostNameLineEdit->text());
- db.setUserName(ui->userNameLineEdit->text());
- db.setPort(ui->sqlPortLineEdit->text().toInt());
- db.setPassword(ui->passwdLineEdit->text());
- qDebug("set completed");
- qDebug()<<ui->hostNameLineEdit->text()<<ui->userNameLineEdit->text()<<ui->sqlPortLineEdit->text().toInt()<<ui->passwdLineEdit->text();
- }
- if(db.open())//open! not isopen() !!!
- {
- qDebug("sql connected");
- isSqlConnected = true;
- }
- else
- {
- qDebug("not connected");
- }
- 注意事项
- QSqlTableModel 和 QSqlQuery 等与数据库相关的类必须在数据库连接后建立才有效