2013-04-10 51 views
2

所以我寫了一些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); 
} 
+1

你的代碼在選擇數據時的樣子是什麼? – Xymostech 2013-04-10 02:40:03

+0

我將編輯我的問題以添加循環。 – muttley91 2013-04-10 02:49:17

+0

行252是否違反了您的任何約束? – 2013-04-10 03:02:06

回答

1

某些C運行時庫具有。

顯然,您的程序正在爲每個INSERT操作打開數據庫,並忘記關閉它。

您應該只打開一次數據庫。

+0

我正在關閉數據庫,或者至少我正在嘗試,但是我沒有最終確定我準備好的語句,所以它實際上並沒有正確關閉。 隨着最終聲明,現在的代碼。感謝您指出了這一點! – muttley91 2013-04-10 15:46:27