分享:解决 jsqlparser不支持中文的问题
解决 jsqlparser不支持中文的问题
今天下载了 jsqlparser,打算用在简表中,不曾想不持中文,运行以下代码,出现如下错误:
复制内容到剪贴板
代码:
public static void main(String[] args) {
try {
Statement stat = new CCJSqlParserManager().parse(new StringReader("select 年份,月份,sum(金额) from 订单查询 group by 年份,月份 order by 年份,月份"));
System.out.println();
} catch (JSQLParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Caused by:
net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 9. Encountered: "\u5e74" (24180), after : ""
at net.sf.jsqlparser.parser.CCJSqlParserTokenManager.getNextToken(CCJSqlParserTokenManager.java:1328)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_scan_token(CCJSqlParser.java:5244)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_140(CCJSqlParser.java:4531)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_107(CCJSqlParser.java:4568)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_65(CCJSqlParser.java:4045)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_35(CCJSqlParser.java:4145)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_3_5(CCJSqlParser.java:4591)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_2_5(CCJSqlParser.java:3059)
at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:562)
at net.sf.jsqlparser.parser.CCJSqlParser.Select(CCJSqlParser.java:554)
at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:110)
at net.sf.jsqlparser.parser.CCJSqlParserManager.parse(CCJSqlParserManager.java:38)
at jatools.designer.data.DatasetPreviewer.main(DatasetPreviewer.java:231)
网上查了一圈,不得要领,后来查看JSqlParserCC.jj文件,发现id只支持以a-z,A-Z字符开始的串,为此,加上相应的unicode字符即可以了,以下粗体部分是加上去的部分,这样重新javacc一下,就可以了
如下所示
TOKEN:
{
< S_IDENTIFIER: ( <LETTER> )+ ( <DIGIT> | <LETTER> |<SPECIAL_CHARS>)* >
| < #LETTER:
["a"-"z",
"A"-"Z",
"\u0024",
"\u0041"-"\u005a",