1.Oracle 8i 下使用最新的oracle thin driver時(shí)用DatabaseMetaData獲取主鍵等信息時(shí),需要將
connection.getMetaData().getPrimaryKeys(connection.getCatalog(),null,tableName);
中的tableName轉(zhuǎn)為大寫,否則無法得到數(shù)據(jù)。
2.正則表達(dá)式中,需要以","分割字符串,但是要分割的字串中含有","號(hào),為了避免沖突,引入前置轉(zhuǎn)義字符"\",這樣的正則怎么寫呢?
例如:
String txt = "STATE_COUNTY=kj\\\\,,ADDR_LINE1=l=j,ADDR_LINE2=mj\n\n,ADDR_LINE3=n\\,o,\n\nADDR_LINE4=\np";
需要把鍵值對(duì)切分出來:
?Pattern.compile("[^\\\\],)");這個(gè)是不行的,會(huì)將","號(hào)前一個(gè)字符消耗掉。
?Pattern.compile("(?![\\\\]),)");也不行
Pattern?p?=?Pattern.compile,",(?![\\\\])");倒是可以,但是把轉(zhuǎn)義字符放后面似乎有點(diǎn)詭異。
找了一個(gè)折衷辦法,不切割使用正則獲取"鍵=值"子串:
Pattern?p?=?Pattern.compile("\\w+\\s*=.*?[,]*.*?(?=,|$)",Pattern.DOTALL);但是還是帶來了子串中不能含有"="的問題。
最后查了一個(gè)JDK1.4 DOC,發(fā)現(xiàn)了一個(gè)反向的非匹配串寫法:
Pattern?p?=?Pattern.compile("(?<!\\\\),\\s*");這樣一來就解決了以上問題。