SQL" />

国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

利用JAVACC將HQL->SQL

2019-11-18 13:12:40
字體:
來源:轉載
供稿:網友

  首先下載javaCC,編寫.jj文件
  
  1.定義要空開的分隔符
  
  SKip :
  {
   " "
   "/t"
   "/n"
   "/r"
   "/f"
  }
  
  2.定義要害字。from 為HQL的要害字,Teacher是用戶輸入的類名,應當是一個任意由字母和數字組成的單詞,我們可以用正則表達式:["A"-"Z","a"-"z","0"-"9"]來表示。
  
  TOKEN: /*RESERVED TOKENS FOR UQL */
  {
    <FROM:"from">
    <FROM_OBJECT:(["A"-"Z","a"-"z","0"-"9"])+ >
  }
  3.接下來定義一下輸入的順序與規范
  
  void eXPRession() :
  {
   Token tTable;
  }
  {
   (
   <FROM>
   tTable = <FROM_OBJECT>
   )
   {
   sqlSB.append("SELECT *");
   sqlSB.append(" FROM ").append(tTable.image);
   }
  }
  最后就是寫解析代碼,以便生成java代碼
  
  PARSER_BEGIN(HQLParser)
  
  import java.lang.StringBuffer;
  import java.io.StringReader;
  import java.io.Reader;
  
  public class HQLParser {
  
    private static StringBuffer sqlSB;
  
  /** 
   A String based constrUCtor for ease of use.
   **/
    public HQLParser(String s)
    {
      this((Reader)(new StringReader(s)));
   sqlSB = new StringBuffer();
    }
  
    public String getSQL()
    {
      return sqlSB.toString();
    }
     
    public static void main(String args[])
    {
      try
      {
         String query = args[0];
         HQLParser parser = new HQLParser(query);
      parser.parse();
         System.out.println("SQL:"+parser.getSQL());
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }
    }
  
    public void parse()
    {
   try
   {
     expression();
   }
   catch(Exception e)
      {
        e.printStackTrace();
      }
    }
  }
  PARSER_END(HQLParser)
  
  接下來到dos下輸入:
  
  javacc -debug_parser test.jj
  
  -debug_parser:用來輸出語法樹
  
  這時候會生成7個java文件,每個文件的作用以后會具體說明
  
  這時候只需要
  
  javac *.java即可編譯全部的java文件
  
  然后執行java HQLParser “from Teacher“
  
  這時候屏幕上就會顯示出“select * from Teacher“

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 娄烦县| 涟源市| 霍山县| 塔城市| 施甸县| 含山县| 永胜县| 岱山县| 铜梁县| 和硕县| 吉安市| 定陶县| 安岳县| 长泰县| 黑山县| 班玛县| 广宗县| 确山县| 杭锦后旗| 和政县| 平远县| 汉寿县| 宣汉县| 收藏| 大足县| 凭祥市| 清徐县| 滦南县| 北安市| 长乐市| 砀山县| 卢龙县| 腾冲县| 开平市| 长岛县| 共和县| 锡林浩特市| 伊宁市| 杭锦后旗| 绥滨县| 九江县|