发新话题
打印

解决 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",
       "\u005f",
       "\u0061"-"\u007a",
       "\u00c0"-"\u00d6",
       "\u00d8"-"\u00f6",
       "\u00f8"-"\u00ff",
       "\u0100"-"\u1fff",
       "\u3040"-"\u318f",
       "\u3300"-"\u337f",
       "\u3400"-"\u3d2d",
       "\u4e00"-"\u9fff",
       "\uf900"-"\ufaff"]
>

TOP

这个是经过楼上方法,处理过的 jsqlparser-0.6.2。欢迎下载!
附件: 您所在的用户组无法下载或查看附件

TOP

不错,谢了,这个问题困扰我好长时间了。

不错,谢了,这个问题困扰我好长时间了。

TOP

为啥我的中文还是报错

这是报错信息,能给看一下吗?
Caused by: net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 5, column 70.  Encountered: "\u6570" (25968), after : "\'\u66f4\u65b0\u57fa"
        at net.sf.jsqlparser.parser.CCJSqlParserTokenManager.getNextToken(CCJSqlParserTokenManager.java:1375)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_scan_token(CCJSqlParser.java:5415)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_241(CCJSqlParser.java:5140)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_217(CCJSqlParser.java:5198)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_184(CCJSqlParser.java:5210)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_134(CCJSqlParser.java:4076)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_79(CCJSqlParser.java:4209)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_44(CCJSqlParser.java:4231)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_131(CCJSqlParser.java:4479)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_76(CCJSqlParser.java:4486)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_43(CCJSqlParser.java:4558)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_239(CCJSqlParser.java:4645)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_214(CCJSqlParser.java:4657)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_207(CCJSqlParser.java:5149)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_156(CCJSqlParser.java:4585)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_116(CCJSqlParser.java:4743)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_72(CCJSqlParser.java:4337)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_38(CCJSqlParser.java:4473)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_139(CCJSqlParser.java:4813)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_92(CCJSqlParser.java:4872)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_50(CCJSqlParser.java:3468)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_112(CCJSqlParser.java:4164)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_69(CCJSqlParser.java:4389)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_58(CCJSqlParser.java:4519)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_94(CCJSqlParser.java:4650)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_57(CCJSqlParser.java:4667)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_93(CCJSqlParser.java:4860)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_54(CCJSqlParser.java:5009)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_51(CCJSqlParser.java:4924)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_136(CCJSqlParser.java:5032)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_85(CCJSqlParser.java:5076)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_219(CCJSqlParser.java:5172)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_184(CCJSqlParser.java:5214)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_134(CCJSqlParser.java:4076)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_79(CCJSqlParser.java:4209)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_44(CCJSqlParser.java:4231)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_131(CCJSqlParser.java:4479)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_76(CCJSqlParser.java:4486)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_43(CCJSqlParser.java:4558)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_239(CCJSqlParser.java:4645)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_214(CCJSqlParser.java:4657)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_207(CCJSqlParser.java:5149)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_156(CCJSqlParser.java:4585)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_116(CCJSqlParser.java:4743)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_72(CCJSqlParser.java:4337)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3R_38(CCJSqlParser.java:4473)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_3_5(CCJSqlParser.java:4756)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_2_5(CCJSqlParser.java:3155)
        at net.sf.jsqlparser.parser.CCJSqlParser.SelectBody(CCJSqlParser.java:565)
        at net.sf.jsqlparser.parser.CCJSqlParser.Select(CCJSqlParser.java:557)
        at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:113)
        at net.sf.jsqlparser.parser.CCJSqlParserManager.parse(CCJSqlParserManager.java:38)
        ... 63 more

TOP

你一定是没替换正确,或者,老的版,仍然在起作用!

TOP

你们对JSQLParser的原理有了解吗?有一些函数JSQLParser不支持,我想基于JSQLParser做二次开发,让他支持一些函数,有木有实现思路或者做过的,可以讨论一下了,我的扣:34655442

TOP

发新话题