package sac.util;

import java.sql.*;
import sac.persistencia.PoolConexoes;

public class TesteBD {

  public TesteBD() {
  }

  public static void execute (String[] sqls) throws Exception{
    try {
      PoolConexoes pool = PoolConexoes.getInstancia();
      Connection con = pool.obterConexao();
      con.setAutoCommit(false);
      Statement st = con.createStatement();
      System.out.println();
      for (int j = 0; j < sqls.length; j++) {
        System.out.println("----------------");
        System.out.println("Executando sql : "+ sqls[j]);
        boolean hasResult = st.execute(sqls[j]);
        if ( hasResult){
          System.out.println("Resultado da consulta foi :");
          ResultSet rs = st.getResultSet();
          ResultSetMetaData meta = rs.getMetaData();
          int count = meta.getColumnCount();
          for (int i = 1; i <= count; i++) {
            System.out.print(meta.getColumnName(i)+ "\t");
          }
          while (rs.next()){
            System.out.println();
            for (int i = 1; i <= count; i++) {
              Object obj = rs.getObject(i);
              String print;
              if ( obj != null){
                print = obj.toString();
              } else {
                print = "NULL";
              }
              System.out.print(print + "\t");
            }
          }
        } else {
          System.out.println("Foram modificadas : "+ st.getUpdateCount() +" linhas.");
        }


        st.clearBatch();
        st.clearWarnings();
        System.out.println();
      }
      st.close();

      pool.liberarConexao(con);
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }

  }

  /**
   *
   */
  public static void main(String[] args) {
    try {
      TesteBD.execute(args);

    String[] consulta   = {
               "select * from pessoa_juridica",
               "select * from oferta_trabalho",
               "select * from pessoa_fisica"
//                "select * from categoria",
//                "select * from sub_categoria",
//                "select * from rel_pj_categoria",
//                "select * from rel_categoria_sub_categoria"
                };
    sac.persistencia.OIDFactory factory = sac.persistencia.OIDFactory.getInstancia();

//                   "insert into tipo_servico values ("+ factory.novoOID().getLongValue() +", 'engenheiro' )",
    String[] insert   = {
               "insert into tipo_servico values ("+ factory.novoOID().getLongValue() +", 'eletricista' )",
               "insert into tipo_servico values ("+ factory.novoOID().getLongValue() +", 'mecanico' )",
               "insert into tipo_servico values ("+ factory.novoOID().getLongValue() +", 'encanador' )",
               "insert into tipo_servico values ("+ factory.novoOID().getLongValue() +", 'cientista' )",
               "insert into tipo_servico values ("+ factory.novoOID().getLongValue() +", 'secretario' )",
               "insert into tipo_servico values ("+ factory.novoOID().getLongValue() +", 'professor' )",
               "insert into tipo_servico values ("+ factory.novoOID().getLongValue() +", 'quimico' )",
               "insert into tipo_servico values ("+ factory.novoOID().getLongValue() +", 'estudante' )",
               "commit"
    };

//    TesteBD.execute( new String[] {"delete from tipo_servico"} );

    TesteBD.execute(consulta);



    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}