- 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支持的数据库
- 进入此目录:[email protected]:/usr/local/Trolltech/Qt-4.6.3/plugins/sqldrivers$
- [email protected]:/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 等与数据库相关的类必须在数据库连接后建立才有效
时间: 2024-12-16 13:14:27