/*
 * MySQLSpoj.java
 *
 *
 */
package cz.zcu.icskal.sqldb;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import cz.zcu.icskal.icsparser.*;
import cz.zcu.icskal.log.Log;
import java.io.FileInputStream;
import java.io.File;
import java.io.IOException;
/**
 *
 * @author  Martin
 *
 * Trida, ktera zajistuje veskerou komunikaci s databazi
 */
public class MySQLKonexe {
   private Connection connection = null;
   private String sqlprefix = "rekurze_";
   private String myDatabase = "pia";
   private String serverName = "localhost";
   private String username = "";
   private String password = "";
   
   /** Creates a new instance of MySQLSpoj */
   public MySQLKonexe(String atribFile) {
      nactiProperties(atribFile);
      try {
         String driverName = "org.gjt.mm.mysql.Driver"; // MySQL JDBC driver
         Class.forName(driverName);
         
         // Create a connection to the database
         //String serverName = "localhost";
         //String mydatabase = dbname;
         //String mydatabase = "testdatabase";
         String url = "jdbc:mysql://" + serverName +  "/" + myDatabase; // a JDBC url
         
         //String newUrl = "jdbc:mysql://localhost:3306/"+myDatabase+"?useUnicode=true&characterEncoding=UTF-8";
         //String newUrl = "jdbc:mysql://localhost:3306/"+dbname+"?&useUnicode=true&characterEncoding=ISO-8859-1";
         //connection = DriverManager.getConnection(newUrl, username, password);
         //jdbc:mysql://localhost:3306/edusuite?user=user&useUnicode=true&characterEncoding=UTF-8
         //java.util.Properties info = new java.util.Properties();
         //info.setProperty("DB2e_ENCODING", "UTF-8");
         //connection = DriverManager.getConnection(url, info);
         
         connection = DriverManager.getConnection(url, username, password);
         
      }
      catch (ClassNotFoundException e) {
         // Could not find the database driver
         Log.printlnErr(e.toString()+"-1");
      }
      catch (SQLException e) {
         // Could not connect to the database
         Log.printlnErr(e.getLocalizedMessage()+" 0");
      }
   }
   
   private void nactiProperties(String fileName) {
      java.util.Properties prop = new java.util.Properties();
      try {
         prop.load(new FileInputStream(new File(fileName)));
         sqlprefix = prop.getProperty("sqlprefix");
         myDatabase = prop.getProperty("myDatabase");
         serverName = prop.getProperty("serverName");
         username = prop.getProperty("username");
         password = prop.getProperty("password");
      }
      catch (IOException e) {
         System.out.println(e.toString());
      }
   }
   
   public Connection getConnection() {
      return connection;
   }
   
   /*public void nastavNaDirty(int idZdroje) {
      try {
         Statement stmt = connection.createStatement();
         int upravenychZaznamu = stmt.executeUpdate(
         "UPDATE udalosti, udelat "+
         "SET dirty='ano' "+
         "WHERE id_zdroje="+idZdroje+";");
      }
      catch (SQLException e) {
         System.out.println(e);
      }
   }*/
   
   private java.util.List vytvorSeznamProKontroluSouctu(int idZdroje) {
      java.util.ArrayList list = new java.util.ArrayList();
      IdASoucet tmpIdASoucet;
      try {
         Statement stmt = connection.createStatement();
         ResultSet rs = stmt.executeQuery(
         "SELECT " +
         sqlprefix+"udalosti.id_key, "+sqlprefix+"udalosti.kontrolni_soucet " +
         "FROM "+sqlprefix+"udalosti " +
         "WHERE "+sqlprefix+"udalosti.id_zdroje="+idZdroje+";");
         
         rs.first();
         if (rs.isFirst())
            while (rs.isAfterLast()==false) {
               tmpIdASoucet = new IdASoucet((String)rs.getObject("id_key"), (Long)rs.getObject("kontrolni_soucet"));
               list.add(tmpIdASoucet);
               rs.next();
            }
         
         
         rs = stmt.executeQuery(
         "SELECT " +
         sqlprefix+"udelat.id_key, "+sqlprefix+"udelat.kontrolni_soucet " +
         "FROM "+sqlprefix+"udelat " +
         "WHERE "+sqlprefix+"udelat.id_zdroje="+idZdroje+";");
         
         rs.first();
         if (rs.isFirst())
            while (rs.isAfterLast()==false) {
               tmpIdASoucet = new IdASoucet((String)rs.getObject("id_key"), (Long)rs.getObject("kontrolni_soucet"));
               list.add(tmpIdASoucet);
               rs.next();
            }
      }
      catch (SQLException e) {
         Log.printlnErr(e.getLocalizedMessage()+" 1");
      }
      //Log.debug("seznam pro kontrolu souctu: "+list);
      return list;
   }
   
   private void pridejUdalost(Udalost udalost, int idZdroje) {
      Log.debug("pridej udalost: "+udalost);
      try {
         Statement stmt = connection.createStatement();
         
         String sqlComm =
         "INSERT "+
         "INTO "+sqlprefix+"udalosti "+
         udalost.getSQLNazvy()+" "+
         "VALUES "+
         udalost.getSQLHodnoty(idZdroje)+";";
         
         int i = stmt.executeUpdate(sqlComm);
         //Log.debug("pridan pocet:"+i);
         if (udalost.getOpakovani()!=null)
            pridejOpakovani(udalost.getOpakovani(), udalost.getUid());
         if (udalost.getUpozorneni()!=null)
            pridejUpozorneni(udalost.getUpozorneni(), udalost.getUid());
         if (udalost.getKromeDnu()!=null)
            pridejKromeDnu(udalost.getKromeDnu(), udalost.getUid());
      }
      catch (SQLException e) {
         Log.printlnErr(e.getLocalizedMessage()+" 2");
      }
   }
   private void smazUdalost(Udalost udalost) {
      Log.debug("smaz udalost: "+udalost);
      try {
         Statement stmt = connection.createStatement();
         
         String sqlComm = "DELETE "+
         "FROM "+sqlprefix+"udalosti "+
         "WHERE "+
         sqlprefix+"udalosti.id_key='"+udalost.getUid()+"';";
         stmt.executeUpdate(sqlComm);
         
         smazOpakovani(udalost.getUid());
         smazUpozorneni(udalost.getUid());
         smazKromeDnu(udalost.getUid());
      } catch (SQLException e) {
         Log.printlnErr(e.getLocalizedMessage()+" 3");
      }
   }
   
   private void pridejUdelat(Udelat udelat, int idZdroje) {
      Log.debug("pridej udelat: "+udelat);
      try {
         Statement stmt = connection.createStatement();
         
         String sqlComm =
         "INSERT "+
         "INTO "+sqlprefix+"udelat "+
         udelat.getSQLNazvy()+" "+
         "VALUES "+
         udelat.getSQLHodnoty(idZdroje)+";";
         
         int i = stmt.executeUpdate(sqlComm);
         //Log.debug("pridan pocet:"+i);
         if (udelat.getOpakovani()!=null)
            pridejOpakovani(udelat.getOpakovani(), udelat.getUid());
         if (udelat.getUpozorneni()!=null)
            pridejUpozorneni(udelat.getUpozorneni(), udelat.getUid());
         if (udelat.getKromeDnu()!=null)
            pridejKromeDnu(udelat.getKromeDnu(), udelat.getUid());
      }
      catch (SQLException e) {
         Log.printlnErr(e.toString()+" 4");
      }
   }
   private void smazUdelat(Udelat udelat) {
      Log.debug("smaz udelat: "+udelat);
      try {
         Statement stmt = connection.createStatement();
         
         String sqlComm = "DELETE "+
         "FROM "+sqlprefix+"udelat "+
         "WHERE "+
         sqlprefix+"udelat.id_key='"+udelat.getUid()+"';";
         stmt.executeUpdate(sqlComm);
         
         smazOpakovani(udelat.getUid());
         smazUpozorneni(udelat.getUid());
         smazKromeDnu(udelat.getUid());
      }
      catch (SQLException e) {
         Log.printlnErr(e.getLocalizedMessage()+" 5");
      }
   }
   
   private void pridejOpakovani(Opakovani opakovani, String id) {
      Log.debug("pridej opakovani: "+opakovani);
      try {
         Statement stmt = connection.createStatement();
         String sqlComm =
         "INSERT "+
         "INTO "+sqlprefix+"opakovani "+
         opakovani.getSQLNazvy()+" "+
         "VALUES "+
         opakovani.getSQLHodnoty(id)+";";
         int i = stmt.executeUpdate(sqlComm);
         //System.out.println(i);
      }
      catch (SQLException e) {
         Log.printlnErr(e.toString()+" 6");
      }
   }
   
   private void smazOpakovani(String idOpakovani) {
      Log.debug("smazOpakovani: "+idOpakovani);
      try {
         Statement stmt = connection.createStatement();
         String sqlComm = "DELETE "+
         "FROM "+sqlprefix+"opakovani "+
         "WHERE "+
         sqlprefix+"opakovani.id_opakovani='"+idOpakovani+"';";
         int i = stmt.executeUpdate(sqlComm);
         //Log.debug("smazan pocet:"+i);
      }
      catch (SQLException e) {
         Log.printlnErr(e.getLocalizedMessage()+" 7");
      }
   }
   
   private void pridejUpozorneni(Upozorneni upozorneni, String id) {
      Log.debug("pridej upozorneni: "+upozorneni);
      try {
         Statement stmt = connection.createStatement();
         
         String sqlComm =
         "INSERT "+
         "INTO "+sqlprefix+"upozorneni "+
         upozorneni.getSQLNazvy()+" "+
         "VALUES "+
         upozorneni.getSQLHodnoty(id)+";";
         
         int i = stmt.executeUpdate(sqlComm);
         //System.out.println(i);
      }
      catch (SQLException e) {
         Log.printlnErr(e.toString()+" 8");
      }
   }
   
   private void smazUpozorneni(String idUpozorneni) {
      Log.debug("smazUpozorneni: "+idUpozorneni);
      try {
         Statement stmt = connection.createStatement();
         String sqlComm = "DELETE "+
         "FROM "+sqlprefix+"upozorneni "+
         "WHERE "+
         sqlprefix+"upozorneni.id_upozorneni='"+idUpozorneni+"';";
         int i = stmt.executeUpdate(sqlComm);
         //Log.debug("smazan pocet:"+i);
      }
      catch (SQLException e) {
         Log.printlnErr(e.getLocalizedMessage()+" 9");
      }
   }
   
   private void pridejKromeDnu(java.util.List kromeDnu, String idOpakovani) {
      Log.debug("pridej KromeDnu: "+kromeDnu+"  "+idOpakovani);
      try {
         Statement stmt = connection.createStatement();
         
         for (int a=0;a<kromeDnu.size();a++) {
            String sqlComm =
            "INSERT "+
            "INTO "+sqlprefix+"krome_dnu "+
            "(id_opakovani, den) "+
            "VALUES "+
            "('"+idOpakovani+"',"+(Long)(kromeDnu.get(a))+");";
            
            int i = stmt.executeUpdate(sqlComm);
         }
         //System.out.println(i);
      }
      catch (SQLException e) {
         Log.printlnErr(e.toString()+" 8");
      }
   }
   
   private void smazKromeDnu(String idOpakovani) {
      Log.debug("smazKromeDnu: "+idOpakovani);
      try {
         Statement stmt = connection.createStatement();
         String sqlComm = "DELETE "+
         "FROM "+sqlprefix+"krome_dnu "+
         "WHERE "+
         "id_opakovani='"+idOpakovani+"';";
         int i = stmt.executeUpdate(sqlComm);
         //Log.debug("smazan pocet:"+i);
      }
      catch (SQLException e) {
         Log.printlnErr(e.getLocalizedMessage()+" 9");
      }
   }
   
   private void smazToto(IdASoucet idASoucet) {
      Log.debug("smazToto: "+idASoucet);
      try {
         Statement stmt = connection.createStatement();
         
         String sqlComm = "DELETE "+
         "FROM "+sqlprefix+"udalosti "+
         "WHERE "+
         sqlprefix+"udalosti.id_key='"+idASoucet.getId()+"';";
         stmt.executeUpdate(sqlComm);
         
         sqlComm = "DELETE "+
         "FROM "+sqlprefix+"udelat "+
         "WHERE "+
         sqlprefix+"udelat.id_key='"+idASoucet.getId()+"';";
         stmt.executeUpdate(sqlComm);
         
         smazOpakovani(idASoucet.getId());
         smazUpozorneni(idASoucet.getId());
         smazKromeDnu(idASoucet.getId());
      }
      catch (SQLException e) {
         Log.printlnErr(e.getLocalizedMessage()+" 10");
      }
   }
   
   public void aktualizujVse(int idZdroje, java.util.List obsah) {
      java.util.List list = vytvorSeznamProKontroluSouctu(idZdroje);
      java.util.Collections.sort(list);
      int nalezeno;
      Udalost tmpUdalost;
      Udelat tmpUdelat;
      for (int a=0;a<obsah.size();a++) {
         if (obsah.get(a) instanceof Udalost) {
            tmpUdalost = (Udalost)obsah.get(a);
            nalezeno = java.util.Collections.binarySearch(list, tmpUdalost.getUid());
            if (nalezeno<0) pridejUdalost(tmpUdalost, idZdroje);
            else if (((IdASoucet)list.get(nalezeno)).getSoucet().longValue()!=tmpUdalost.getKontrolniSoucet()) {
               Log.debug("kontrolni soucty: "+((IdASoucet)list.get(nalezeno)).getSoucet().longValue()+"  "+tmpUdalost.getKontrolniSoucet());
               list.remove(nalezeno);
               smazUdalost(tmpUdalost);
               pridejUdalost(tmpUdalost, idZdroje);
            }
            else {
               list.remove(nalezeno);
               Log.debug("Udalost "+tmpUdalost.getUid()+" OK");
            }
         }
         if (obsah.get(a) instanceof Udelat) {
            tmpUdelat = (Udelat)obsah.get(a);
            nalezeno = java.util.Collections.binarySearch(list, tmpUdelat.getUid());
            if (nalezeno<0) pridejUdelat(tmpUdelat, idZdroje);
            else if (((IdASoucet)list.get(nalezeno)).getSoucet().longValue()!=tmpUdelat.getKontrolniSoucet()) {
               list.remove(nalezeno);
               smazUdelat(tmpUdelat);
               pridejUdelat(tmpUdelat, idZdroje);
            }
            else {
               list.remove(nalezeno);
               Log.debug("Udelat "+tmpUdelat.getUid()+" OK");
            }
         }
      }
      for (int a=0;a<list.size();a++)
         smazToto((IdASoucet)list.get(a));
   }
   
   public java.util.List getSeznamZdroju() {
      java.util.ArrayList list = new java.util.ArrayList();
      //IdASoucet tmpIdASoucet;
      try {
         Statement stmt = connection.createStatement();
         ResultSet rs = stmt.executeQuery("SELECT * FROM "+sqlprefix+"zdroje_ics;");
         rs.first();
         if (rs.isFirst())
            while (rs.isAfterLast()==false) {
               list.add(new IdASoubor((String)rs.getObject("typ_zdroje"), (Integer)rs.getObject("id_zdroje"), (String)rs.getObject("hodnota")));
               rs.next();
            }
      }
      catch (SQLException e) {
         Log.printlnErr(e.toString());
      }
      return list;
   }
   
   public java.util.List getKonfigurace() {
      java.util.ArrayList list = new java.util.ArrayList();
      try {
         Statement stmt = connection.createStatement();
         ResultSet rs = stmt.executeQuery("SELECT * FROM "+sqlprefix+"konfigurace;");
         rs.first();
         if (rs.isFirst())
            while (rs.isAfterLast()==false) {
               list.add(new NazevAHodnota((String)rs.getObject("nazev"), (String)rs.getObject("hodnota")));
               rs.next();
            }
      }
      catch (SQLException e) {
         Log.printlnErr(e.toString());
      }
      return list;
   }
   
   public boolean byloPoslanoUPozodneni(String id_key) {
      try {
         Statement stmt = connection.createStatement();
         ResultSet rs = stmt.executeQuery("SELECT * FROM "+sqlprefix+"rozeslana_upozorneni WHERE (id_upozorneni='"+id_key+"') AND (datum=CURDATE());");
         rs.first();
         if (rs.isFirst())
            while (rs.isAfterLast()==false) {
               return true;
               //rs.next();
            }
         else return false;
      }
      catch (SQLException e) {
         Log.printlnErr(e.toString());
      }
      return true;
   }
   
   public void ulozPoslaniEmailu(String id_key) {
      //Log.debug("ulozPoslaniEmailu: "+id_key);
      try {
         Statement stmt = connection.createStatement();
         
         String sqlComm =
         "INSERT "+
         "INTO "+sqlprefix+"rozeslana_upozorneni "+
         " (id_upozorneni, datum) "+
         "VALUES "+
         "('"+id_key+"', CURDATE());";
         
         int i = stmt.executeUpdate(sqlComm);
         //Log.debug("pridan pocet:"+i);
      }
      catch (SQLException e) {
         Log.printlnErr(e.getLocalizedMessage()+" 2");
      }
   }
   
   public java.util.List emaily(String tabulka) {
      //tabulka = udelat, udalosti
      //Log.debug("emaily");
      //misto start_time je cas_upozorneni
      java.util.ArrayList poslatEmaily = new java.util.ArrayList();
      try {
         Statement stmt = connection.createStatement();
         ResultSet rs = stmt.executeQuery(//"SELECT * FROM "+sqlprefix+"konfigurace;");
         "SELECT *, (YEAR(CURDATE()) - YEAR(cas_upozorneni)) AS pocet_let, "+
         "((YEAR(CURDATE())-YEAR(cas_upozorneni))*12+MONTH(CURDATE())-MONTH(cas_upozorneni)) AS pocet_mesicu, "+
         "((YEAR(CURDATE())-YEAR(cas_upozorneni))*53+WEEK(CURDATE())-WEEK(cas_upozorneni)) AS pocet_tydnu, "+
         "(TO_DAYS(CURDATE())-TO_DAYS(cas_upozorneni)) AS pocet_dni, "+
         "HOUR(cas_upozorneni) AS hodina, "+
         "(cas_upozorneni % 1000000) AS raditpodle "+
         "FROM "+sqlprefix+"upozorneni, "+
         sqlprefix+tabulka+" LEFT JOIN "+sqlprefix+"opakovani ON "+sqlprefix+tabulka+".id_key="+sqlprefix+"opakovani.id_opakovani "+
         "WHERE "+sqlprefix+"upozorneni.id_upozorneni="+sqlprefix+tabulka+".id_key "+
         "HAVING "+
         "((cas_upozorneni % 1000000)<=CURTIME()) AND ("+
         "(pocet_dni=0) OR "+
         "((pocet_dni>0) AND ( "+
         "((frekvence='dny') AND ( "+
         "(pocet_dni % cas_interval) = 0 "+
         ") AND ( "+
         "(typ_opakovani='porad') OR "+
         "((typ_opakovani='nekolikrat') AND ( "+
         "(pocet_dni / cas_interval) <=kolikrat "+
         ")) OR "+
         "((typ_opakovani='do_data') AND ( "+
         "(UNIX_TIMESTAMP(do_data) - UNIX_TIMESTAMP(CURDATE()))>=0 "+
         ")) "+
         ")) OR "+
         "((frekvence='tydny') AND ( "+
         "(pocet_tydnu % cas_interval) = 0 "+
         ") AND ( "+
         "(typ_opakovani='porad') OR "+
         "((typ_opakovani='nekolikrat') AND ( "+
         "(pocet_tydnu / cas_interval) <=kolikrat "+
         ")) OR "+
         "((typ_opakovani='do_data') AND ( "+
         "(UNIX_TIMESTAMP(do_data) - UNIX_TIMESTAMP(CURDATE()))>=0 "+
         ")) "+
         ") AND ( "+
         "FIND_IN_SET(DAYOFWEEK(CURDATE()), dny) "+
         ")) OR "+
         "((frekvence='mesice') AND ( "+
         "(pocet_mesicu % cas_interval) = 0 "+
         ") AND ( "+
         "(typ_opakovani='porad') OR "+
         "((typ_opakovani='nekolikrat') AND ( "+
         "(pocet_mesicu / cas_interval) <=kolikrat "+
         ")) OR "+
         "((typ_opakovani='do_data') AND ( "+
         "(UNIX_TIMESTAMP(do_data) - UNIX_TIMESTAMP(CURDATE()))>=0 "+
         ")) "+
         ") AND ( "+
         "(dny=NULL) OR ( "+
         "(FIND_IN_SET(DAYOFWEEK(CURDATE()), dny)) AND ( "+
         "((v_mesici_kdy>0) AND (v_mesici_kdy=(ROUND((DAYOFMONTH(CURDATE())-1) / 7)+1))) OR "+
         "((v_mesici_kdy=-1) AND (MONTH(DATE_ADD(CURDATE(), INTERVAL 7 DAY))!=MONTH(CURDATE()))) "+
         ") "+
         ") "+
         ")) OR "+
         "((frekvence='roky') AND ( "+
         "(pocet_let % cas_interval) = 0 "+
         ") AND ( "+
         "(typ_opakovani='porad') OR "+
         "((typ_opakovani='nekolikrat') AND ( "+
         "(pocet_let / cas_interval) <=kolikrat "+
         ")) OR "+
         "((typ_opakovani='do_data') AND ( "+
         "(UNIX_TIMESTAMP(do_data) - UNIX_TIMESTAMP(CURDATE()))>=0 "+
         ")) "+
         ") AND ( "+
         "(CURDATE()+0)=(cas_upozorneni/1000000) "+
         ")) "+
         ")) "+
         ") "+
         "ORDER BY raditpodle");
         rs.first();
         if (rs.isFirst())
            while (rs.isAfterLast()==false) {
               System.out.println("nazev: "+(String)rs.getObject("title"));//id_key
               System.out.println("bylo poslano: "+byloPoslanoUPozodneni((String)rs.getObject("id_key")));
               if (!byloPoslanoUPozodneni((String)rs.getObject("id_key"))) {
                  //System.out.println("ukladam poslani emailu");
                  //ulozPoslaniEmailu((String)rs.getObject("id_key"));
                  poslatEmaily.add(new UpozorneniEmailem((String)rs.getObject("id_key"),(String)rs.getObject("email_alarm_to"),(String)rs.getObject("title"),(String)rs.getObject("note")));
               }
               rs.next();
            }
      }
      catch (SQLException e) {
         Log.printlnErr(e.toString());
      }
      return poslatEmaily;
   }
   
   public static String fromSQL(String vstup) {
      char[]  mySqlKod = {0xe1,0xe9,0xed,0xf3,0xfa,0xfd,0xec,0xf8,0xbb,0xbe,0xb9,0xef,0xe8,0xf2,0xf9,0xc1,0xcc,0xcd,0xd3,0xda,0xdd,0xcc,0xd8,0xab,0xae,0xa9,0xcf,0xc8,0xd2,0xd9};
      char[] prevod =    {'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''};
      char[] ch = new char[vstup.length()];
      char[] nejake = mySqlKod;
      
      for (int a = 0;a<vstup.length();a++) {
         ch[a] = (char)vstup.charAt(a);
         for (int b = 0;b<nejake.length;b++) {
            if (vstup.charAt(a)==nejake[b]) {
               ch[a] = prevod[b];
               b = nejake.length;
               //break;
            }
         }
      }
      return new String(ch);
   }
   
   public static String toSQL(String vstup) {
      if (vstup==null) return null;
      char[]  prevod = {0xe1,0xe9,0xed,0xf3,0xfa,0xfd,0xec,0xf8,0xbb,0xbe,0xb9,0xef,0xe8,0xf2,0xf9,0xc1,0xcc,0xcd,0xd3,0xda,0xdd,0xcc,0xd8,0xab,0xae,0xa9,0xcf,0xc8,0xd2,0xd9};
      //char[]  prevod = {225, 233, 237, 243, 250, 253, 236, 248, 187, 190, 185, 239, 232, 242, 249, 193, 204, 205, 211, 218, 221, 204, 216, 171, 174, 169, 207, 200, 210, 217};
      //char[] prevod =      {'a' ,'e' ,'i' ,'o' ,'u' ,'y' ,'e' ,'r' ,'t' ,'z' ,'s' ,'d' ,'c' ,'n' ,'u' ,'A' ,'E' ,'I' ,'O' ,'U' ,'Y' ,'E' ,'R' ,'T' ,'Z' ,'S' ,'D' ,'C' ,'N' ,'U'};
      char[] mySqlKod =    {'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,''};
      char[] ch = new char[vstup.length()];
      char[] nejake = mySqlKod;
      for (int a = 0;a<vstup.length();a++) {
         ch[a] = (char)vstup.charAt(a);
         for (int b = 0;b<nejake.length;b++) {
            if (vstup.charAt(a)==nejake[b]) {
               ch[a] = prevod[b];
               b = nejake.length;
               //break;
            }
         }
      }
      String ss = "";
      for (int a=0;a<ch.length;a++) {
         if (ch[a]=='\'') ss+="\\'";
         else if (ch[a]=='\\') ss+="\\\\";
         else if ((a+1<ch.length)&&(ch[a]=='\\')&&(ch[a+1]==',')) ;
         else ss+=ch[a];
      }
      System.out.println(ss);
      return ss;
   }
   
   //225,233,237,243,250,253,236,248,187,190,185,239,232,242,249,193,204,205,211,218,221,204,216,171,174,169,207,200,210,217
   //e1,e9,ed,f3,fa,fd,ec,f8,bb,be,b9,ef,e8,f2,f9,c1,cc,cd,d3,da,dd,cc,d8,ab,ae,a9,cf,c8,d2,d9,
   // , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
   public static String sqlUprava(String s) {
      if (s==null) return "NULL";
      else if (s.compareTo("")==0) return "NULL";
      else return "'"+MySQLKonexe.toSQL(s)+"'";
   }
   
   public static String sqlUprava(Integer s) {
      if (s==null) return "NULL";
      else return ""+s;
   }
   
   public static String sqlUprava(Long s) {
      if (s==null) return "NULL";
      else return ""+s;
   }
   
   public void pokus() {
      try {
         Statement stmt = connection.createStatement();
         ResultSet rs = stmt.executeQuery("SELECT * FROM aaa WHERE id=2;");
         rs.first();
         if (rs.isFirst())
            while (rs.isAfterLast()==false) {
               String str = (String)rs.getObject("text");
               for (int a=0;a<str.length();a++)
                  if ((str.charAt(a)!=44)&&(str.charAt(a)!=32))
                     System.out.print((int)str.charAt(a)+", ");
               System.out.println();
               //System.out.println(str);
               rs.next();
            }
      }
      catch (SQLException e) {
         Log.printlnErr(e.toString());
      }
   }
   
   /*public static void main(String[] args) {
      MySQLKonexe sql = new MySQLKonexe();
      sql.pokus();
   }*/
   
}
