LINUX下QT+MYSQL学习笔记-基本入门过程

来源:互联网 发布:沈阳用友软件 编辑:程序博客网 时间:2024/05/17 22:36

LINUX下QT+MYSQL学习笔记-基本入门过程

为了完成linux应用程序设计的作业,我选择了用QT+MYSQL开发一个学生管理系统

开发过程入门和注意事项如下:

只学习了一天,有不妥之处不要见怪。(word的格式直接发布到博客上真麻烦,搞了半天)

一、开发环境的搭建

  1. 在Windows XP系统下安装Vmware Workstaion,然后安装虚拟机,我安装的是Ubuntu 11.04
  2. 安装Linux下的QT环境(有很多安装方法,我用这种方法成功了,其他的都失败了,不知道为什么)

打开终端输入以下命令:(不包含井号)

#sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer

#sudo apt-get install qtcreator

 

以上两条命令安装了QT CREATOR和一些必备的,下面安装MYSQL

#sudo apt-get install libqt4-sql-mysql

#sudo apt-get install mysql-server mysql-client

#sudo apt-get install libqt4-sql-mysql

#sudo apt-get install libmysqlclient15-dev

#sudo /etc/init.d/mysql restart

 

SQL安装好后,给普通用户授权操作数据库和登录数据库

在终端输入:

#mysql -u root -p

以上一条命令是以root登录数据库

数据库的操作方式在后面介绍。

(给特定用户分配数据操作权限的格式是:

grant 权限1,权限2,...权限n on 数据库名称.表名称 to 用户名@用户ip地址 identified by '密码';)

  二、开始程序设计

1.在Ubuntu系统中,点击【Application】>>【Program】>>【QT Creator】,打开QT Creator

点击New File or Project,如下图所示,选择Qt C++ Project>>Qt Gui Application,单击Choose


 
2.给工程起名,然后点击next,如下图

 

  

 

  


 

3.现在可以看到代码界面了,如下图,

  

  
4.双击qttest.pro在工程的.pro文件里加上下面一行:

QT += sql

如下图

  

 
 

 

5.可以开始开发了,首先打开终端,输入【mysql –u root –p】登录数据库,登录成功后界面如下:

6.输入【create database stu;】新建一个名为stu的数据库,注意命令后面的分号,一定要有。如下图:

 
7.数据库建好了,可以去程序里面登录数据库,进行建表等等操作。

main.cpp里面写代码,如下:(注意登录数据库的用户名和密码应该是你的)


#include <QtGui/QApplication>

#include "mainwindow.h"

#include <QtSql/QSqlDatabase>

#include <QSqlQuery>

#include <QtGui/QTableView>

#include <QSqlQueryModel>

 

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

    MainWindow w;

 

    QSqlDatabase db;

    w.show();

 

    db = QSqlDatabase::addDatabase("QMYSQL");

                db.setHostName("localhost");

                db.setDatabaseName("stu");

                db.setUserName("root");

                db.setPassword("123456");

                db.open();

 

    return a.exec();

}



8.这样你的程序就登录数据库了,在主函数里面登录数据库,这样在子模块运行时可以不用频繁的切换登录。

三、程序设计过程
  1. 关于ui界面

    可以用QT designer画出图形界面,使用布局管理器。然后保存为.ui文件,写好main.cpp,用终端【qmake -project】【qmake xxx.pro】【make】,生成的.h文件就是等价与画的.ui文件。也可以直接用QT Creator画。

  2. 我直接用的QT Creator建立的Qt Gui Application,这样也可以直接在里面画图形界面,通过鼠标点击控件go to slot实现相应的功能。如果需要加入自己的东西,在.h文件里面类的声明里加入变量、函数等。其他的就是编程的学问了,各种类的继承,和使用类。
  3. 关于数据库操作常用命令(来自互联网

http://forum.ubuntu.org.cn/viewtopic.php?p=2196084

远程等,授权等:http://www.cppblog.com/zzg/archive/2009/05/29/86066.html

远程等,删除授权等http://www.cnblogs.com/frostbelt/archive/2011/02/22/1961186.html

 

mysql常用命令:注意(这些命令在终端登录SQL时后面的【;】分号不能省,在程序里面操作时不要分号。)

 

mysql -u 用户名 –p

 

1.增加用户

grant 权限1,权限2,...权限n on 数据库名称.表名称 to 用户名@用户ip地址 identified by '密码';

 

2.显示数据库列表

show databases;


3.使用数据库

use 数据库名;

 

4.创建数据库

create database 数据库名;

 

5.备份数据库

mysqldump -h host -u root -p 数据库名 >备份.sql

 

6.恢复数据库

mysqladmin -h myhost -u root -p create dbname

mysqldump -h host -u root -p 数据库名 < 备份.sql

 

7.删除数据库

drop database 数据库名;

 

8.显示数据库中的表格

use 数据库名;

show tables;

 

9.创建表格

use 数据库名;

create table 表格名(<字段名1> <类型1> <字段名n> <类型n>);

 

10.显示表格的结构:

describe 表格名;

 

11.向表格中添加记录

insert into 表格名(字段1 , 字段2 , ….) values(值1 , 值2 , …..);

例:insert into 表格名(name, age) values('xiaoxi', 18)

 

12.更新表格中到记录

update 表格名 set <字段名称>=<值> where <条件>

例:把ID 为2的记录用户名(username)的值更改为china.

update user set username='china' where id=2;

 

13.清空表格中的记录

delete from 表格名 条件

例:将学生表格中ID为2的记录删除掉

delete from student where id=2;


14.重命名表格

alter table 表格1 rename 表格2;

 

15.删除表格

drop table 表格名;

 

16.显示表中的记录:

select * from 表格名;

 

 

  1. 关于在程序中操作数据库的命令

    通过query.exec(cmd);操作数据库。

    cmd的拼接方式如下:

Qstring cmd = tr("select *from student where ")+ tr("Sno=") +tr("\'")+ui->seeknumlineEdit->text()+tr("\' ")+tr("and ")+tr("Sname=") +tr("\'")+ui->seeknamelineEdit->text()+tr("\'");

程序中执行query.exec(cmd);等价于在终端登录SQL后执行select *from student where Sno = '123' and Sname='123';

四、最后

现在可以开始程序设计了,剩下的问题就是QT CREATOR的使用方法和编程的方法了,希望多查资料摸索。这里简单的为设计QT+SQL的开发做最基本的准备和QT CREATOR最基本的使用方法。

你可以将下面的代码复制,替换第二步建好的工程里面的main.cpp,运行。

注意登录数据库时的账户和密码以及数据库名称(代码红色部分)

以下代码来自互联网,我自己改动了一些以便能在我的机器上运行成功。感谢这些代码的原作者。http://forum.ubuntu.org.cn/viewtopic.php?p=2196084

#include <QtGui/QApplication>

#include <QMessageBox>

#include <QStringList>

#include <QDebug>

#include <QtSql/QSqlDatabase>

#include <QSqlQuery>

#include <QtGui/QTableView>

#include <QSqlQueryModel>

 

int main(int argc, char* argv[])

{

/*QApplication app(argc, argv);

 

qDebug() << "Available drivers:";

 

QStringList drivers = QSqlDatabase::drivers();

foreach(QString driver, drivers)

qDebug() << "\t" << driver;

 

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

qDebug() << "ODBC driver valid?" << db.isValid();

return app.exec();*/

 

/*QCoreApplication a(argc, argv);

 

QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");

 

db.setHostName("localhost");

 

db.setDatabaseName("test");

 

db.setUserName("root");

 

db.setPassword("123456");

 

if(!db.open()){

 

qDebug()<<"Unable to open database";

 

}else{

 

qDebug()<<"Database connection established";

return a.exec();

 

}*/

QApplication app(argc, argv);

 

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

db.setHostName("localhost");

db.setDatabaseName("stu");

db.setUserName("root");

db.setPassword("123456");

db.open();

 

QSqlQuery query;

//Create table

query.exec("create table student(Sname CHAR(20), Sno CHAR(10),Ssex CHAR(6),Sage SMALLINT,primary key (Sno))");

//insert information

query.exec("insert into student(Sno, Sname, Ssex, Sage) values('2008441105','xcy', 'female',18)");

//query.exec("drop table student");

if(!query.exec("insert into student(Sno, Sname, Ssex, Sage) values('2008441105','xcy', 'female',18)"))

QMessageBox::warning(NULL, "waring", "Already Have!", QMessageBox::Yes);

 

//ODBC风格

/* query.prepare("insert into hello(name, age)" "values(?, ?)");

query.addBindValue("xiaoxi");

query.addBindValue(18);

query.exec();

query.addBindValue("xiaonan");

query.addBindValue(19);

query.exec();

query.addBindValue("xiaobei");

query.addBindValue(20);

query.exec();

query.addBindValue("xiaodong");

query.addBindValue(21);

query.exec();*/

 

//Oracle风格

/*query.prepare("insert into hello(name, age) values(:name, :age)");

query.bindValue(":name", "xiaoxi");

query.bindValue(":age", 18);

query.exec();

query.bindValue(":name", "xiaonan");

query.bindValue(":age", 19);

query.exec();

query.bindValue(":name", "xiaobei");

query.bindValue(":age", 20);

query.exec();

query.bindValue(":name", "xiaodong");

query.bindValue(":age", 21);

query.exec();*/

 

QSqlQueryModel *model = new QSqlQueryModel;

model->setQuery("select * from student");

model->setHeaderData(0, Qt::Horizontal, "name");

model->setHeaderData(1, Qt::Horizontal, "no");

model->setHeaderData(2, Qt::Horizontal, "sex");

model->setHeaderData(3, Qt::Horizontal, "age");

QTableView *view = new QTableView;

view->setWindowTitle("QSqlQueryModel");

view->setModel(model);

view->show();

 

/*QSqlTableModel *model = new QSqlTableModel;

model->setTable("hello");

model->select();

for (int i = 0; i < model->rowCount(); ++i)

{

QSqlRecord record = model->record(i);

int id = record.value(0).toInt();

QString name = record.value(1).toString();

int age = record.value(2).toInt();

cout << id << " " << qPrintable(name) << " " << age << endl;

}*/

db.close();

return app.exec();

}


原创粉丝点击