2012-08-22 67 views
2

我想從MS Access轉換到DerbyDB。然而,一些VARCHAR領域具有「特殊」字符,如換行符,製表符,百分比標記,外文字符等在插入derbyDB之前搜索'特殊'字符的java字符串varchar字段

我創建了一個快速的方法...

public String charCheck(String s) 
{ 


    errLog.add(1, "converting string from " + s); 
    s.replaceAll("'", "''");//an apostrophe is escaped with an apostrophy in Derby... 
    s.replaceAll("%", "\\%");//a percent sign 
    s.replaceAll("\\s+n", " ");//whitespace characters (newlines and tabs etc) 
    s.replaceAll("/", "\\/");//the 'divide' \ character, 
    s.replaceAll("<", "\\<");//mathematical symbol less than 
    s.replaceAll(">", "\\>");//mathematical symbol greater than 
    errLog.add(1, "to " + s); 

    return s; 
}//end method 

它在我奔跑時,我確定我需要一個varchar(或long varchar)數據類型。奇怪的是,我的錯誤日誌打印出來的消息,但在輸出空白字符似乎並沒有改變(即製表符和換行符,不要轉換爲簡單的空間),字符串中的任何撇號都不會被替換。

此方法的輸出樣本產生以下內容。

converting string from 2. FIN DE L’ESSAI 
to 2. FIN DE L’ESSAI 

所以字符串仍保持明顯的不變,這打亂derbyDB當我運行的INSERT語句,還我沒有找到關於轉義序列的任何明顯的文檔中插入多個記錄到一個表,我想用一個聲明再加入逃逸關鍵字後,即

stmt.execute("{call "+ sqlInsertStatement +"}{escape '" + escapeCharacter +"'"); 

我也是從文檔讀取的逃逸關鍵字可能無法在上面的語句有用的,如果是的話我怎麼能て

我需要知道去哪裏排序我得到的插入錯誤。

如果我複製和過去的INSERT語句直接進入IJ,然後取出特殊字符的記錄將插入細,我只是不明白爲什麼它沒有被一審轉換。

我也試圖與周圍的雙引號VARCHAR和LONGVARCHAR領域,但同樣德比踢了一個錯誤,指出雙引號被發現!

我想爲您答疑解惑,因爲我覺得像我這麼近......提前

回答

2

字符串是不可變

謝謝,你對它們執行的所有操作導致新的字符串。您需要將當前引用分配給新的String。

實施例:

s= s.replaceAll("'", "''");

如果只需更換,然後replace()可以比使用replaceAll()

+0

我只是想到這一點,並相應地改變了我的方法,目前正在測試... – DaveM

+0

行,所以這是我忘卻的字符串是不可變的......現在嘗試進行排序爲什麼德比不喜歡他們,並相應地調整。我會問另一個問題 – DaveM

1

代替通過String工作最好的選擇,打開Stringchar陣列,然後使用do ... while循環依次使用每個char,如果測試替換每個字符。然後陣列回頭一字符串然後返回它

+0

我雖然這樣做了,如果thinksteep的評論沒有解決問題,這將是我的下一步。我給你+1,因爲這是一個好主意。 – DaveM

+0

你的問題是一個很好的問題 - 我只是約2回覆贊成:) – imulsion

+0

小心,這是一個好問題,有點'荷馬辛普森',如果你問我。 – DaveM

相關問題