qt和sqlite实现排行榜或者解决我写代码问题

1、共三列五行,三列分别是排名与两个模式的得分
2、能根据游戏得分自动排名,允许同分
3、超出前5的排名被删除
4.完整代码(有注释更好)

img

我代码问题

img

img

img

img

img

Sqlite是一个小型的本地数据库管理软件,对于保存一些软件配置参数或量不是很大的数据是相当的方便,Qt本身已经自带了Sqlite的驱动,直接使用相关的类库即可。

个人总结: 利用Qt实现sqlite的交互主要就是利用Qt内部封装的类库,将SQLite语句发送给SQLite软件,实现创建、修改、获取数据库的操作,QSqlDatabase类实现数据库的连接,QSqlQuery执行指定的SQLite语句。

使用过程中的参考文档:SQL 教程;SQLite 教程;MySQL 教程

Qt交互sqlite参考地址:QT-QSqlQuery类操作SQLite数据库(创建、查询、删除、修改)详解,在Qt中使用SQLite数据库

  1. Sqlite软件下载安装

本人使用的是sqlite expert personal 5.3,它是主流SQLite数据库管理工具SQLite Expert的个人免费版,拥有我们最常用的SQLite数据库管理和开发功能,虽然不如SQLite Expert Professional强大,但是对于个人用户来说已经够用了。
具体的安装下载地址大家可以百度(本来我是想上传博客的,但是显示已经有相关资源了)
软件包:

软件打开后:

通过这个界面可以手动的创建database、table和record(不是我想说英文,是你会发现后期编程会经常碰到相关词汇,中文写出来怕大家对应不上)。

  1. Qt代码讲解

2.1 .pro中增加对应的基类

QT += core gui sql
2.2 数据交互代码讲解

操作的代码很简单,主要就是使用 QSqlDatabase类实现数据库的连接, QSqlQuery执行指定的SQLite语句。
QSqlDatabase类指定驱动建立数据库连接
//创建QSQLITE驱动连接
sqliteDb=QSqlDatabase::addDatabase("QSQLITE");
1
2
可以看到Qt内部已经封装了多种数据库操作的驱动。

在open之前给连接的数据库设置name,如果已经存在不会覆盖,直接进行操作
sqliteDb.setDatabaseName("SqliteDb.db");
1

open数据库后才能进行相关操作
sqliteDb.open();
1
QSqlQuery执行指定的SQLite语句,将程序中的sql语言发送给SQLite软件执行操作
//创建table
sqliteQuery->exec("create table user1(u,p)");
//创建table下的record
sqliteQuery->exec("insert into user1(u,p) values('sss','123')");
sqliteQuery->exec("insert into user1(u,p) values('sss','123')");
sqliteQuery->exec("insert into user1(u,p) values('sss','123')");
1
2
3
4
5
6
2.3 详细代码

SqliteTest.h
#ifndef SQLITETEST_H
#define SQLITETEST_H

#include
#include
#include

class SqliteTest : public QWidget
{
Q_OBJECT

public:
SqliteTest(QWidget *parent = 0);
~SqliteTest();

private:
QSqlDatabase sqliteDb;
QSqlQuery *sqliteQuery;
};

#endif // SQLITETEST_H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SqliteTest.cpp
#include "SqliteTest.h"

SqliteTest::SqliteTest(QWidget *parent)
: QWidget(parent)
{
sqliteDb=QSqlDatabase::addDatabase("QSQLITE");
sqliteDb.setDatabaseName("SqliteDb.db");
sqliteDb.open();

sqliteQuery=new QSqlQuery();
sqliteQuery->exec("create table user1(u,p)");
sqliteQuery->exec("insert into user1(u,p) values('sss','123')");
sqliteQuery->exec("insert into user1(u,p) values('sss','123')");
sqliteQuery->exec("insert into user1(u,p) values('sss','123')");

}

SqliteTest::~SqliteTest()
{

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

题主,你调用QSql创建sqlit数据库失败了吧
具体使用可以参考
QSql数据库_Lusion324的博客-CSDN博客

QString sql = "create table if not exists Score (Ranking int primery key, hard int, easy int)";

你这个程序肯定不止运行了一遍吧,其中 Score 表应该已经存在与你的电脑中,创建表的时候使用 if not exists 就可以解决这个错误。
或者你把表名 Scroe 换成其他的,或者找到你的 Database 所在的路径把他删掉等等。