QT数据库使用案列【联系人】-- 使用sqlite和QStringListModel

【简要功能介绍】

使用sqlite数据库和Qt搭建界面,实现联系人数据库记录。联系人有id编号,姓名,年龄.可对联系人

【表增加联系人】

【删除联系人】

【更新联系人信息】

【显示全部联系人信息】

【运行界面】

【源码下载】【http://pan.baidu.com/s/1o6OGley

使用sqlitebrowser 查看

【初始化数据库】

 QLibrary sqlib("./sqldrivers/qsqlited.dll");
    sqlib.load ();
    qDebug()<<"my library loaded"<<sqlib.isLoaded();

    db = QSqlDatabase::addDatabase("QSQLITE","SQLITE");
#ifdef Q_OS_LINUX
    QString path(QDir::home().path());
    path.append(QDir::separator()).append("my.db.sqlite");
    path = QDir::toNativeSeparators(path);
    db.setDatabaseName(path);
#else
    db.setDatabaseName("my.db.sqlite");
#endif

    /*
     * create my.db.sqlite file if not exist
     */
    db.open ();
    db.close ();

【创建表】

    if(db.open ()){
        sql_query = QSqlQuery (db);
        sql_query.prepare(create_sql);
        if(!sql_query.exec())
        {
            qDebug()<<sql_query.lastError();
        }
        else
        {
            qDebug()<<"table created!";
        }
    }
    updateDataBaseShow();

【插入记录】

 if(db.open ()){
        sql_query = QSqlQuery (db);
        int max_id = 0;
        sql_query.prepare(select_max_sql);
        if(!sql_query.exec())
        {
            qDebug()<<sql_query.lastError();
        }
        else
        {
            while(sql_query.next())
            {
                max_id = sql_query.value(0).toInt();
                qDebug()<<QString("max id:%1").arg(max_id);
            }
        }
        sql_query.prepare(insert_sql);
        sql_query.addBindValue(max_id+1);
        sql_query.addBindValue(ui->lineEdit_name->text ());
        sql_query.addBindValue(ui->lineEdit_age->text ().toInt ());
        if(!sql_query.exec())
        {
            qDebug()<<sql_query.lastError();
        }
        else
        {
            qDebug()<<"inserted!";
        }

        updateDataBaseShow();
    }

【显示全部数据(两列,id和name)】

 if(db.open ()){
        sql_query = QSqlQuery (db);
        if(!sql_query.exec(select_sql))
        {
            qDebug()<<sql_query.lastError();
        }
        else
        {
            while(sql_query.next())
            {
                int id = sql_query.value("id").toInt();
                QString name = sql_query.value("name").toString();
                qDebug()<<QString("id:%1    name:%2").arg(id).arg(name);
            }
        }
    }

【显示全部数据】

if(db.open ()){
        sql_query = QSqlQuery (db);
        sql_query.prepare(select_all_sql);
        if(!sql_query.exec())
        {
            qDebug()<<sql_query.lastError();
        }
        else
        {
            ui->textEdit->clear ();
            while(sql_query.next())
            {
                int id = sql_query.value(0).toInt();
                QString name = sql_query.value(1).toString();
                int age = sql_query.value(2).toInt();
                ui->textEdit->append (QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age));
                qDebug()<<QString("id:%1    name:%2    age:%3").arg(id).arg(name).arg(age);
            }
        }
    }

【清除表】

 if(db.open ()){
        sql_query = QSqlQuery (db);
        sql_query.prepare(clear_sql);
        if(!sql_query.exec())
        {
            qDebug()<<sql_query.lastError();
        }
        else
        {
            qDebug()<<"cleared";
        }
    }
    updateDataBaseShow();

【删除一条记录】combobox选中的记录删除

  if(db.open ()){
         sql_query = QSqlQuery (db);
         sql_query.prepare(delete_sql);
         sql_query.addBindValue(ui->comboBox->currentText ().toInt ());
         if(!sql_query.exec())
         {
             qDebug()<<sql_query.lastError();
         }
         else
         {
             qDebug()<<"deleted!";
         }
     }
     updateDataBaseShow();

【更新联系人信息】

if(db.open ()){
         sql_query = QSqlQuery (db);
         sql_query.prepare("update student set name = :name ,age = :age where id = :id");
         sql_query.bindValue(":name", ui->lineEdit_name->text ());
         sql_query.bindValue(":age", ui->lineEdit_age->text ());
         sql_query.bindValue(":id", ui->comboBox->currentText ().toInt ());
         if(!sql_query.exec())
         {
             qDebug()<<sql_query.lastError();
         }
         else
         {
             qDebug()<<"updated!";
         }
     }
     updateDataBaseShow();

  

【删除数据库】

 #ifdef Q_OS_LINUX
        QString path(QDir::home().path());
        path.append(QDir::separator()).append("my.db.sqlite");
        path = QDir::toNativeSeparators(path);
        QFile::remove(path);
    #else
        QFile::remove("my.db.sqlite");
    #endif
        ui->comboBox->clear ();
        ui->textEdit->clear ();
时间: 2024-10-24 20:43:56

QT数据库使用案列【联系人】-- 使用sqlite和QStringListModel的相关文章

Qt数据库(sqlite) — 总结

#include <QtSql>QT += sql QSqlDatabase类实现了数据库连接的操作QSqlQuery类用来执行SQL语句QSqlRecord类 封装数据库所有记录 第一:QSqlDatabase类QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  采用QSQLITE数据库,QMYSQL数据库有问题?db.setHostName("localhost"); //设置数据库主机名

基于sqlite的Qt 数据库封装

[代码] mydata.h 10 #ifndef MYDATA_H 11 #define MYDATA_H 12 #include <QObject> 13 #include <QString> 14 #include <QtSql/QSqlTableModel> 15 #include <QtSql/QSqlQuery> 16 #include <QStringList> 17 #include <QtSql/QSqlDatabase&g

qt 数据库操作总结

#include <QtSql>QT += sql QSqlDatabase类实现了数据库连接的操作QSqlQuery类用来执行SQL语句QSqlRecord类 封装数据库所有记录 第一:QSqlDatabase类QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  采用QSQLITE数据库,QMYSQL数据库有问题?db.setHostName("localhost"); //设置数据库主机名

qt数据库多线程问题的解决(QSqlDatabase只能在创建它的线程中使用)

Qt数据库由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在创建它的线程中使用, 在多线程中共用连接或者在另外一个线程中创建query都是不支持的几乎国内没有文章提到这个问题,这几天在做数据库压力测试时遇到了 假设有如下代码: bool openDatabase() { QSqlDatabase db; QString connectionName = "sqlite"; db = QSqlDatabase::addDatabase("

QT开发(四十六)——QT数据库编程基础

QT开发(四十六)--QT数据库编程基础 一.Qt SQL模块简介 1.Qt SQL模块简介 QT通过Qt SQL模块提供了对SQL数据库的支持,Qt SQL模块中的API分为三层:驱动层.SQL接口层.用户接口层. 如果要使用Qt SQL模块中的类,需要在工程文件(.pro文件)中添加QT += sql代码. 2.驱动层 驱动层为具体的数据库和SQL接口层之间提供了底层的桥梁,主要类包括Qt SQL模块中的QSqlDriver.QSqlDriverCreator.QSqlDriverCreat

qt数据库多线程问题的解决

Qt数据库由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在创建它的线程中使用, 在多线程中共用连接或者在另外一个线程中创建query都是不支持的 几乎国内没有文章提到这个问题,这几天在做数据库压力测试时遇到了 假设有如下代码: <span style="font-size:14px;">bool openDatabase() { QSqlDatabase db; QString connectionName = "sql

原文地址:Qt数据库总结 作者:ImmenseeT

分类: 原文地址:Qt数据库总结 作者:ImmenseeT #include <QtSql>QT += sql QSqlDatabase类实现了数据库连接的操作QSqlQuery类用来执行SQL语句QSqlRecord类 封装数据库所有记录 第一:QSqlDatabase类QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  采用QSQLITE数据库,QMYSQL数据库有问题?db.setHostName(&quo

Linux平台QT数据库编程(来自网络)

Linux平台QT数据库编程 在linux平台使用qt来编写GUI程序,在进行数据库编程的时候,有两种选择方式,分别是:基于linux平台的数据库接口函数编程,另一种是使用qt自带的有关数据库类.那在这里我分别来讲一下这两种方式的实现. 一.使用linux平台的数据库接口编程: 在这里我使用的是一款免费的数据库sqlite,从网络上下一个sqlite-3.0.8.tar.gz源码包,然后进行安装,安装好后就可以使用它提供的函数接口.接下来我们用安装好的sqlite提供的函数接口,在QT中使用的,

linux下mysql函数的详细案列

1 MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, 2 const char *user, 3 const char *passwd, 4 unsigned int port, 5 const char *unix_socket, 6 unsigned int clientflag); 1.  如何连接数据mysql数据库.... [[email protected] Mysql]$ cat demo.c 1