1.Oracle 8i 下使用最新的oracle thin driver时用DatabaseMetaData获取主键等信息时,需要将
connection.getMetaData().getPrimaryKeys(connection.getCatalog(),null,tableName);
中的tableName转为大写,否则无法得到数据。
2.正则表达式中,需要以","分割字符串,但是要分割的字串中含有","号,为了避免冲突,引入前置转义字符"\",这样的正则怎么写呢?
例如:
String txt = "STATE_COUNTY=kj\\\\,,ADDR_LINE1=l=j,ADDR_LINE2=mj\n\n,ADDR_LINE3=n\\,o,\n\nADDR_LINE4=\np";
需要把键值对切分出来:
Pattern.compile("[^\\\\],)"); 这个是不行的,会将","号前一个字符消耗掉。
Pattern.compile("(?![\\\\]),)"); 也不行
Pattern p = Pattern.compile,",(?![\\\\])"); 倒是可以,但是把转义字符放后面似乎有点诡异。
找了一个折衷办法,不切割使用正则获取"键=值"子串:
Pattern p = Pattern.compile("\\w+\\s*=.*?[,]*.*?(?=,|$)",Pattern.DOTALL); 但是还是带来了子串中不能含有"="的问题。
最后查了一个JDK1.4 DOC,发现了一个反向的非匹配串写法:
Pattern p = Pattern.compile("(?<!\\\\),\\s*"); 这样一来就解决了以上问题。