sqlite Qt -将表从一个数据库复制到另一个数据库[复制]

uklbhaso  于 2023-01-17  发布在  SQLite
关注(0)|答案(1)|浏览(428)
    • 此问题在此处已有答案**:

(9个答案)
SQLite: Easiest way to copy a table from one database to another?(2个答案)
3天前关闭。
我正在尝试使用以下命令将表数据从一个数据库复制到另一个数据库:
INSERT INTO database2.table2 SELECT * from database1.table1
但我遇到了一个错误。
我有两个名为database1.db和database2.db的数据库
下面是我的代码:

database1_path = "/home/user/Desktop/database1.db";
database2_path = "/home/user/Documents/database2.db";

{
    QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE");
    db1.setDatabaseName(database1_path);

    QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE");
    db2.setDatabaseName(database2_path);

    if(!db1.open() && !db2.open())
    {
        qDebug() << "databases are NOT open!";
    }
    else
    {
        QString insert = QString("INSERT INTO '/home/user/Desktop/database1.db'.table1 SELECT * FROM '/home/user/Documents/database2.db'.table2;");

        QSqlQuery query(insert, db1);

        if(!query.exec(insert))
        {
            qDebug() << "Error:" << query.lastError().text();
        }
    }
}

这是我得到的错误:
错误:"无此表:/home/user/桌面/数据库1.db.table1无法执行语句"
我也试过:"INSERT INTO database1.table1 SELECT * FROM database2.table2;"
和:"INSERT INTO db1.table1 SELECT * FROM db2.table2;"
但同样的错误发生了...
我怎样才能解决这个问题?

q5iwbnjs

q5iwbnjs1#

您不能打开具有两个不同连接的两个数据库,并从另一个连接引用另一个数据库。对于您的使用情况,您需要在sql中使用attach命令,以便您的连接可以同时引用这两个数据库。

ATTACH DATABASE '/home/user/Documents/database2.db' AS second_database;
INSERT INTO table1 SELECT * FROM second_database.table2;

当然,这是假设两个数据库/表都具有兼容模式。

相关问题