2012-01-25 37 views
3

我有一些字符串,我必須存儲在一個數據庫中,我想稍後使用String.split方法進行拆分。但是,由於至少有一個字段可能包含任何字符,並且字段數可能會有所不同,所以我擔心分隔符衝突。 我正在考慮只用一個不太可能的字符組的分隔符。但我不確定它是否合適。避免定界符衝突的Java最佳實踐?

有沒有其他的技巧可以想到?

由於事先

回答

2

同樣的技術在XML與CDATA段被使用。如果你自己創建你的字符串,你可以在連接它們之前進行一些轉義。你可以從一些長期死亡(或還沒有活着)的語言中選擇分隔符作爲分隔符 - 例如克林貢語,楔形文字或腓尼基語。

選擇你喜歡的東西:http://en.wikipedia.org/wiki/Unicode

+2

所以你說克林貢是......不是還活着?對不起,無法抗拒那一個;-) –

+0

......該死的,現在我必須看着我的背部爲鉚接皮革衣服揮舞奇怪的刀片的大個子;) –

+1

我喜歡暗淡的分隔符的想法,但我確實感受到需要提到的是,將預先轉義的值存儲在數據庫中通常是不好的做法。您可能是數據的唯一發布者和使用者,但是誰知道未來會發生什麼變化 - 然後他們將不得不解決當前逃脫的模型。存儲原始數據和處理一次是最佳實踐。 –

2

可以使用的辦法,在CSV使用(但不是唯一的):字符串被包裹成的雙配額。逗號顯然是一個分隔符。然後(一些摘錄):

  • 帶有嵌入逗號的字段必須包含在雙引號 字符中。
  • 帶嵌入式雙引號字符的字段必須包含在 雙引號字符內,並且每個嵌入式雙引號字符 必須用一對雙引號字符表示。
  • 等...

詳情請參閱http://en.wikipedia.org/wiki/Comma-separated_values

CSV也支持換行和其他一切,我猜。所以我會在這種情況下使用它(或簡化版本) - 以CSV格式存儲整個字符串數組。然後使用現有解析器之一解析它。

4

不要在要分割的數據庫中存儲字符串。如果您有1:N關係,請使用一個數據庫表進行建模,該數據庫表的一側具有一個唯一鍵,另一個是N側的自由格式列。

如果沒有什麼會說服您不將列表推入到DB列中,那麼可以使用integrity constraint來確保列中的值具有預期的格式。

+0

這取決於任務,但通常情況下,任何應用於數據庫的非DB風格決策都可能在未來造成問題:例如,升級架構可能變得不夠簡單。 – Wizart