【发布时间】:2020-08-15 14:26:43
【问题描述】:
我正在尝试将相同的表架构和选定数量的条目从我的主数据库复制到新的辅助数据库。我能够创建第二个数据库 START.sql 并在其中创建一个名为 copied 的表,但是该表与主要 masterDatabaseTest 之间的架构不同,因此我收到错误:
table START.copied has 1 columns but 5 values were supplied
代码:
void newLog(std::string tableName, std::string timeStart, std::string timeEnd)
{
char *err_msg = NULL;
int rc= -1;
std::string dbLogName = timeStart;
std::string dbLogName2 = dbLogName + ".sql";
std::string attachQuery = "ATTACH DATABASE 'START.sql' AS 'START';";
std::string copyTable = "CREATE TABLE START.copied AS SELECT sql FROM sqlite_master WHERE type='table' and name='masterDatabaseTest';";
std::string insertCopied = "INSERT INTO START.copied SELECT * from sqlite_master where type='table' and name='masterDatabaseTest';";
std::string detach = "DETACH DATABASE START;";
std::cout << dbLogName << "\n"
<< attachQuery << "\n"
<< copyTable << "\n"
<< insertCopied << "\n"
<< detach << std::endl;
sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, 0);
rc = sqlite3_open(databaseName.c_str(), &db); // CREATES DATABASE
std::cout << "OPEN: " << rc << std::endl;
rc = sqlite3_exec(db, attachQuery.c_str(), NULL, 0, &err_msg);
std::cout << "ATTACH: " << rc << std::endl;
if(rc != 0){
std::cout << err_msg << std::endl;
}
rc = sqlite3_exec(db, copyTable.c_str(), NULL, 0, &err_msg);
std::cout << "copyTable: " << rc << std::endl;
if(rc != 0){
std::cout << err_msg << std::endl;
}
rc = sqlite3_exec(db, insertCopied.c_str(), NULL, 0, &err_msg);
std::cout << "insertCopied: " << rc << std::endl;
if(rc != 0){
std::cout << err_msg << std::endl;
}
rc = sqlite3_exec(db, detach.c_str(), NULL, 0, &err_msg);
std::cout << "detach: " << rc << std::endl;
if(rc != 0){
std::cout << err_msg << std::endl;
}
sqlite3_exec(db, "END TRANSACTION;", NULL, NULL, 0);
}
在命令行 sqlite3 database.sql 中:
sqlite> .schema
CREATE TABLE masterDatabaseTest (ID INTEGER,RECORDTIME BIGINT,TYPE INTEGER,TIMESTAMP BIGINT,ENCODER1 INTEGER,ENCODER2 INTEGER,ENCODER3 INTEGER,ENCODER4 INTEGER,ENCODER5 INTEGER);
在命令行 sqlite3 START.sql 内
sqlite> .schema
CREATE TABLE copied(sql TEXT);
【问题讨论】:
-
对。
CREATE查询创建一个包含 1 列的表;这个SELECT * from sqlite_master选择 5 列,5 合 1 不会去。目前尚不清楚,至少对我而言,您正在寻找什么结果。 -
@DinoCoderSaurus 这是我的问题...我想要 masterDatabaseTest 架构的精确副本