所以我寫了一些C++代碼來從一個數據庫中選擇數據,並將INSERT
轉換成另一個。源數據庫中有超過50,000個條目。對於目標數據庫的表定義如下:SQLite停止在252個條目
CREATE TABLE evidence_master
(id INTEGER NOT NULL,
person_id TEXT NOT NULL,
message TEXT,
eid INTEGER NOT NULL,
frequency INTEGER,
string TEXT,
CONSTRAINT id_pk PRIMARY KEY (id),
CONSTRAINT eid_fk FOREIGN KEY (eid) REFERENCES evidences(eid)
);
CREATE TABLE evidences
(
eid INTEGER NOT NULL,
evidence_name TEXT,
CONSTRAINT eid_pk PRIMARY KEY (eid)
);
源數據庫是一個在這裏找到:http://wing.comp.nus.edu.sg/SMSCorpus/
我的問題是,當它到達的第252項,它聲稱它無法打開數據庫(編輯:目標數據庫)。儘管已成功完成了251項作品的工作。
爲什麼會發生這種情況?
編輯:這裏是從源選擇代碼:256打開文件的默認限制每個進程處理
dbOpenFail=sqlite3_open("../../../db/smscorpus.db", &dbCorpus);
if(dbOpenFail)
{
cerr << "Can't open sms corpus: " << sqlite3_errmsg(dbCorpus);
}
if(sqlite3_prepare(dbCorpus,
queryCorpus.data(),
queryCorpus.length() + 1,
&preparedCorpusQuery, NULL) != SQLITE_OK)
{
cerr << "Failed to prepare corpus query: " << queryCorpus << zErrMsg << endl;
sqlite3_free(zErrMsg);
}
rowSelectCorpus=sqlite3_step(preparedCorpusQuery);
while(rowSelectCorpus != SQLITE_DONE) //need to go through 51652 messages from corpus
{
if(rowSelectCorpus == SQLITE_ROW)
{
personID = sqlite3_column_text(preparedCorpusQuery, 0); //get sender ID
messageContent = sqlite3_column_text(preparedCorpusQuery, 1); //get message itself
db_entry d1(string(reinterpret_cast<const char *>(personID)),
string(reinterpret_cast<const char *>(messageContent)));
insertResult = d1.insertIntoDatabase();
if(insertResult == -1)
{
return 0; //exit
}
}
rowSelectCorpus=sqlite3_step(preparedCorpusQuery);
}
你的代碼在選擇數據時的樣子是什麼? – Xymostech 2013-04-10 02:40:03
我將編輯我的問題以添加循環。 – muttley91 2013-04-10 02:49:17
行252是否違反了您的任何約束? – 2013-04-10 03:02:06