import java.util.*; /** * Tämä luokka etsii SQL kyselystä kyselyssä esiintyvät taulujen nimet */ public class TableNameParser { /** * Etsii parametrina annetusta SQL-kyselystä esiintyvät taulujen nimet. * Metodi palauttaa nimet Vectoriin sijoitettuna. */ public static Vector getTableNames (String query ){ System.err.println("tabnameParser:"+query); Vector result=new Vector(); // jaetaan kysely osiin. erottimena tässä ' ' ( välilyönti ) StringTokenizer st = new StringTokenizer(query," "); while ( st.hasMoreTokens()) { String tmp = st.nextToken(); // taulujen nimet aina from sanan jälkeen if ( tmp.equalsIgnoreCase("from")){ tmp = st.nextToken(); // nämä sanat ilmoittavat, että taulujen nimien osa on tämän osan osalta valmis while (! tmp.equalsIgnoreCase("select") && ! tmp.equalsIgnoreCase("where") && ! tmp.equalsIgnoreCase("orderby") && ! tmp.equalsIgnoreCase("having") && ! tmp.equalsIgnoreCase("groupby") ){ // varotaan null arvoja. if (tmp != null && ! tmp.equals ("") ) { StringTokenizer st2 = new StringTokenizer(tmp,","); while ( st2.hasMoreTokens()){ tmp = st2.nextToken(); // puolipiste pois lopusta if (tmp.charAt(tmp.length()-1) ==';'){ tmp=tmp.substring (0,tmp.length() -1 ); } if ( tmp.charAt(0) == '(' ){ tmp=tmp.substring(1); } if ( tmp.charAt(tmp.length()-1) == ')' ){ tmp=tmp.substring(0,tmp.length()-1); } while(tmp.charAt(tmp.length()-1) =='\n' || tmp.charAt(tmp.length()-1) =='\t' || tmp.charAt(tmp.length()-1) ==' ' ){ if (tmp.length() == 1) tmp = ""; else tmp=tmp.substring(0,tmp.length()-1); tmp = tmp.trim(); if (tmp.length() == 0) break; } //while tmp = tmp.trim(); if (tmp.length() != 0) result.add(tmp); } //while } //if if ( st.hasMoreTokens() ){ tmp=st.nextToken(); } else { // loppu break; } } //while } //if } //while System.err.println("TabnameParser result::::" + result); return result; } // getTableNames /** * Tämä metodi etsii ylläpito operaation taulut * */ public static String getNamesOfUpdate( String query){ String mqry=query.toLowerCase(); int start=0; int end=0; Vector result = new Vector(); //set the starting point of table name if (mqry.startsWith("delete")) start=(mqry.indexOf("from")+4); if (mqry.startsWith("insert")) start=(mqry.indexOf("into")+4); if (mqry.startsWith("update")) start=6; if ( start != 0 ) { while (java.lang.Character.isWhitespace(mqry.charAt(start)) ) start++; end=start; //search end of table name while (!java.lang.Character.isWhitespace(mqry.charAt(end)) && end