Qt SQlite實現級聯刪除

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QSqlDatabase"
#include "qdebug.h"
#include "QSqlQuery"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("Test.db");
    if(!db.open())
    {
        qDebug()<<"open false!";
    }

    QSqlQuery query(db);


     if(!query.exec("PRAGMA foreign_keys = ON"))//使外鍵功能生效
     {
         qDebug()<<"No Effect!";
     }
    // -- 創建測試主表. ID 是主鍵.
    query.exec("CREATE TABLE test_main ("
               "id      INT   NOT null,"
               "value   varchar(10),"
               "PRIMARY key(id)"
               ")");

    //-- 插入測試主表數據.
    query.exec("INSERT INTO test_main(id, value) VALUES (1, 'ONE')");
    query.exec("INSERT INTO test_main(id, value) VALUES (2, 'TWO')");

    //-- 創建測試子表.   (  注意,  這裏要有一個 ON DELETE cascade )
    query.exec("CREATE TABLE test_sub ("
               "id      INT   PRIMARY key,"
               "main_id INT   REFERENCES  test_main(id)  ON DELETE cascade,"
               "value   varchar(10)"
               ")");

    //-- 插入測試子表數據.
    query.exec("INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE')");
    query.exec("INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO')");

    //-- 測試刪除主表.
    query.exec("DELETE FROM test_main WHERE id = 1");
}

MainWindow::~MainWindow()
{
    delete ui;
}

發佈了82 篇原創文章 · 獲贊 131 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章