c++ - tools - sqlite3_exec




如何將數組存儲在Sqlite3的一列中? (3)

有沒有辦法將一個整數數組存儲在一列的表中? 我想要這樣的o / p:

ident | value                                                            | count 
----------------+------------------------------------------------------------------------------------------------------------------------+-------
563 | [0:10]={"(0,0)","(1,100)","(2,200)","(3,300)","(4,400)","(5,500)"} |    6

這我已經acheieved通過postgres,但我想同樣的O / P從SQLite也。 這裡列值存儲一個數組。 我試圖通過BLOB,但它不工作。 有人告訴我的序列化的方式,但我不知道如何做到這一點。


SQLite3不直接支持數組。 看到這裡支持的類型。 基本上只有Ints,Floats和Text。

為了完成你所需要的,你必須使用一個自定義的編碼,或者使用一個FK,即創建另一個表,其中數組中的每個項目都被存儲為一行。


對不起Necro只是可以自己解決問題,並找到了解決方案。

正如已經聲明的SQLite不支持數組,所以你不能像這樣存儲它們。 試試這個,我有同樣的問題;

不要單獨存儲數組元素,你可以把它們當作一個大的字符串來使用,並使用字符串函數或正則表達式來解析它們的類型。 一些C#的例子

int[] myArray = new int[] {8,4,345,378,34456,7};

string Arraystring = myArray[0].ToString();

for(int i = 1; i < myArray.Length; i++) { 
Arraystring += "," + myArray[i].ToString();

}

這將把數組變成一個單一的字符串,現在我們把這個字符串作為一個字符串插入到表中,當你讀取這個字符串時,使用這個代碼來獲取數組。 另一個C#的例子

string value; //assign this via Reader
string[] tokens = values.Split(',');

int[] myItems = Array.ConvertAll<string, int>(tokens, int.Parse);

這將只適用於單維數組,在解析字符串時,多重diemnesional會變得棘手。


這是我設想的,雖然它可能是不正確的:

<table>
  <citation>
    <citation ID>
    <citation content>
    <citation publication date>

CREATE TABLE citation
(
    citation_ID INTEGER PRIMARY KEY AUTOINCREMENT,
    citation VARCHAR(255)
    published datetime
    )


<table>
  <source doc>
    <source doc ID>
    <source doc content>

CREATE TABLE source
(
    source_ID INTEGER PRIMARY KEY AUTOINCREMENT,
    source VARCHAR(5000)
    )

<citation_to_source table> //table in question
  <relationship>
    <relationship ID>
    <citation ID>
    <source doc ID>

CREATE TABLE citation_to_source //table in question
(
    relationship_id INTEGER,
    citation_ID INTEGER,
            source_ID INTEGER,
            FOREIGN KEY(citation_ID) REFERENCES citation(citation_ID)
            FOREIGN KEY(source_ID) REFERENCES source(source_ID)
    )

輸出格式:

<content>
  <relationship ID>
  <unique source document content>
  <enumerate citation IDs>




sqlite3