发新话题
打印

用jsqlparser过滤数据集,使用sql 查询的语法

使用jsqlparser分析SQL語句

您好,請教admin大大

我想使用jsqlparser純粹分析我輸入Update的SQL語句

例如我輸入UPDATE table1 SET column1 = 1 column2 = 2 WHERE column3 = 3;

要如何使用jsqlparser的API來取得使用的UPDATE 指令(如UPDATE和INSERT)、table名、SET之後的參數、WHERE之後的參數呢?

像是如下使用:
xxx.statement => update
xxx.tablename => table1
xxx.set => {column1, 1, column2, 2}
xxx.where => {column3, 3}

不好意思,我是JAVA新手,還請多多觀照

TOP

非常感恩Admin大大

非常感恩Admin大大
抱歉這幾天回家鄉辦點事,現在才回覆您
我在使用Admin大大所教導的方式,出現了些錯誤訊息,不知是哪裡操作錯誤

非常感謝您

----------原始碼----------

import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import java.io.StringReader;
import net.sf.jsqlparser.statement.update.Update;
import java.util.List;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.expression.Expression;

public class JsqlparserTest
  {
    public static void main( String[] args)
      {
        String sql = new String("UPDATE table1 SET column1 = 1 column2 = 2 WHERE column3 = 3;");
        try
          {
            Statement stat = new CCJSqlParserManager().parse(new StringReader(sql));
            Update update = (Update) stat;
            
            //System.out.println("Get table name: " + (String)update.getTable().getName());
            //System.out.println("Get table schema name: " + (String)update.getTable().getSchemaName());
            //System.out.println((String)update.getWhere());
            //System.out.println((String)update.getColumns());
            //System.out.println((String)update.getExpressions());
          }
        catch(Exception e)
          {
            System.err.println("Error occured-");
            e.printStackTrace();
          }
      }
  }

----------錯誤訊息----------

Error occured-

net.sf.jsqlparser.JSQLParserException
        at net.sf.jsqlparser.parser.CCJSqlParserManager.parse(CCJSqlParserManager.java:40)
        at JsqlparserTest.main(JsqlparserTest.java:34)

Caused by: net.sf.jsqlparser.parser.ParseException: Encountered "<EOF>" at line 1, column 13.

Was expecting one of:
    "AS" ...
    "SET" ...
    <S_IDENTIFIER> ...
    <S_QUOTED_IDENTIFIER> ...

        at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:5450)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:5326)
        at net.sf.jsqlparser.parser.CCJSqlParser.Update(CCJSqlParser.java:162)
        at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:114)
        at net.sf.jsqlparser.parser.CCJSqlParserManager.parse(CCJSqlParserManager.java:38)
        ... 1 more

Caused by:

net.sf.jsqlparser.parser.ParseException: Encountered "<EOF>" at line 1, column 13.

Was expecting one of:
    "AS" ...
    "SET" ...
    <S_IDENTIFIER> ...
    <S_QUOTED_IDENTIFIER> ...

        at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:5450)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:5326)
        at net.sf.jsqlparser.parser.CCJSqlParser.Update(CCJSqlParser.java:162)
        at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:114)
        at net.sf.jsqlparser.parser.CCJSqlParserManager.parse(CCJSqlParserManager.java:38)
        at JsqlparserTest.main(JsqlparserTest.java:34)

TOP

抱歉,原来是我SQL打错了

抱歉,原来是我SQL打错了「String sql = new String("UPDATE table1 SET column1 = 1 column2 = 2 WHERE column3 = 3;");」中

SET的不同COLUMN中间要有「,」号
虚惊一场
不过还是非常感恩Admin大大的教导^^

----------修改後的原始碼----------

import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import java.io.StringReader;
import net.sf.jsqlparser.statement.update.Update;
import java.util.List;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.expression.Expression;

public class JsqlparserTest
  {
    public static void main( String[] args)
      {
        String sql = new String("UPDATE table1 SET column1 = 1, column2 = 2 WHERE column3 = 3;");
        try
          {
            Statement stat = new CCJSqlParserManager().parse(new StringReader(sql));
            Update update = (Update) stat;
            
            System.out.println("Get table name: " + (String)update.getTable().getName());
            System.out.println("Get table schema name: " + (String)update.getTable().getSchemaName());
          }
        catch(Exception e)
          {
            System.err.println("Error occured-");
            e.printStackTrace();
          }
      }
  }

TOP

发新话题