Package com.GestDB.sql

Source Code of com.GestDB.sql.ConexionTXT

/*
* ConexionTXT.java
*
*
* Created on 2004
* Created by Arsenio Molinero
* Copyright (C) 2004, 2005 Arsenio Molinero
*
* GestDB - a Java multi database client
*
* This file is part of GestDB.
*
* GestDB is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* GestDB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GestDB; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package com.GestDB.sql;

import java.util.*;
import java.io.*;
import java.sql.*;
import com.GestDB.convert.wizarExportarDatosTXT;
import com.GestDB.convert.ImportarTXT;
import com.GestDB.*;
import com.GestDB.general.Trackbug;
import com.utils.*;

/**
*
* @author  amolinero
*/
public class ConexionTXT {
    public static void main(String args[]) {
        new ConexionTXT(args).start();
    }

   
    /** Creates a new instance of ConexionTXT */
    public ConexionTXT(String args[]) {
        this.args = args;
        try {
            if(args.length > 2)
            {
                if(args[1].toLowerCase().equals("-out"))
                {
                    // saca la salida estandar a un archivo
                    System.setOut(new java.io.PrintStream(new java.io.FileOutputStream(args[2]),true));
                    System.setErr(new java.io.PrintStream(new java.io.FileOutputStream(args[2]+"_err.txt"),true));

                    if(args.length > 4 && args[3].toLowerCase().equals("-in"))
                    {
                        // saca la salida estandar a un archivo
                        System.setIn(new java.io.FileInputStream(args[4]));
                    }
                }

                if(args[1].toLowerCase().equals("-in"))
                {
                    // saca la salida estandar a un archivo
                    System.setIn(new java.io.FileInputStream(args[2]));
                    if(args.length > 4 && args[3].toLowerCase().equals("-out"))
                    {
                        // saca la salida estandar a un archivo
                        System.setOut(new java.io.PrintStream(new java.io.FileOutputStream(args[4]),true));
                        System.setErr(new java.io.PrintStream(new java.io.FileOutputStream(args[4]+"_err.txt"),true));
                    }
                }
            }
           
            try {
                // cargar las librerias dinamicamente.
                Gestor.CargarLibrerias(this.getClass());
            }catch(IOException ioe)
            {
                Trackbug.error(ioe, ioe.getMessage());
            }       
           
        }catch(FileNotFoundException fne)       
        {
            System.out.println(Gestor.GetLiteral("gestor.error_1","Error") + ": " + fne.getMessage());
        }
    }
   
    public void start()
    {
        String buffer = "";
        String stemp = "";
        char comando = 0;
        boolean finrun = false;
       
        // carga las propiedades
        Gestor.CargaPropiedades(this.getClass());
        // carga las conexiones
        pConexiones = Gestor.CargaConexiones(this.getClass());
        if(Gestor.propiedades.containsKey("gestor.language"))
            Gestor.CargaIdioma(this.getClass(),(String)Gestor.propiedades.get("gestor.language"));
        else
            Gestor.CargaIdioma(this.getClass(),"spanish");
       
        System.out.println("--------------------------------------------------------------------------------");
        System.out.println("GestDB " + Gestor.Version + " " + Gestor.GetLiteral("conexiontxt.title","modo linea de comandos"));
        System.out.println("--------------------------------------------------------------------------------");
        // se le pide al usuario que seleccione la conexi�n
        SelectConexionTXT sc = new SelectConexionTXT();
        sc.run();
        System.out.println("--------------------------------------------------------------------------------");
        System.out.println(Gestor.GetLiteral("conexiontxt.user","Usuario") + " " + sc.nombre );
       
        while(!finrun)
        {
            System.out.println("--------------------------------------------------------------------------------");
            System.out.println(Gestor.GetLiteral("conexiontxt.comand1","Query. '-T' Tablas. '-E' Exportar. '-I' Importar. '-C' Configurar. '-S' Salir."));
            System.out.println("--------------------------------------------------------------------------------");

            buffer = LeeLinea();
            if(buffer.length() > 0)
            {
                if(buffer.charAt(0) == '-')
                    comando = buffer.charAt(1);
                else
                    comando = 'Q';
                switch(comando)
                {
                    case 'S':
                    case 's':
                        System.exit(0);
                        break;
                    case 'Q':
                        String query = buffer;
                        LanzaQuery(query);
                        break;
                    case 't':
                    case 'T':
                        Tablas();
                        break;
                    case 'c':
                    case 'C':
                        System.out.println("-------------");
                        System.out.println(Gestor.GetLiteral("conexiontxt.config","Configuracion2"));
                        System.out.println("-------------");
                        System.out.println(Gestor.GetLiteral("conexiontxt.config_h1","Esta opcion le permite indicar los registros que se veran en cada pantallazo."));
                        System.out.println(Gestor.GetLiteral("conexiontxt.config_h2","Tambien le permite indicar cuantos caracteres de ancho tiene la pantalla, este dato hara que se corten los resultados cuando sean mas anchos que el ancho indicado."));
                        do {
                            System.out.print(Gestor.GetLiteral("conexiontxt.reg_screen","Registros por pantalla") + " (" + numPaginacion + "): ");
                            buffer = LeeLinea();
                            if(buffer.length() > 0)
                            {
                                try {
                                    numPaginacion = Integer.parseInt(buffer);
                                } catch(java.lang.NumberFormatException nu)
                                {
                                    System.out.print((char)7);
                                    continue;
                                }
                            }
                        } while(numPaginacion < 1);
                        do {
                            System.out.print(Gestor.GetLiteral("conexiontxt.width_screen","Ancho de pantalla") + " (" + numAncho + "): ");
                            buffer = LeeLinea();
                            if(buffer.length() > 0)
                            {
                                try {
                                    numAncho = Integer.parseInt(buffer);
                                } catch(java.lang.NumberFormatException nu)
                                {
                                    System.out.print((char)7);
                                    continue;
                                }
                            }
                        } while(numAncho < 1);
                        break;
                    case 'e':
                    case 'E':
                        wizarExportarDatosTXT wz = new wizarExportarDatosTXT();
                        wz.run();
                        break;
                    case 'i':
                    case 'I':
                        ImportarTXT imp = new ImportarTXT();
                        imp.run();
                        break;
                }
            }
        } // fin while(!finrun)
    }

    private void LanzaQuery(String query)
    {
        if ( query == null || query.length() == 0 )
        {
            System.out.println(Gestor.GetLiteral("conexiontxt.error_1","Error: Tiene que introducir una sentencia SQL correcta."));
            return;
        }
           
        try
        {
            Statement statement = null;
            ResultSet resultSet = null;
            ResultSetMetaData metaData;
            boolean Actualizable = false;

            String columnNames = "";
            Class[] columnTypes = {};

            if(connection == null)
            {
                //get connection
                Class.forName(SelectConexionTXT.jdbcDriverClass);
                if(SelectConexionTXT.user != null && SelectConexionTXT.user.trim().length() != 0)
                    connection = DriverManager.getConnection(SelectConexionTXT.jdbcDriverURL, SelectConexionTXT.user, SelectConexionTXT.password);
                else
                    connection = DriverManager.getConnection(SelectConexionTXT.jdbcDriverURL);
            }
           
            // hay que asegurarse que el comando es una select
            String query2 = new String(query);
            query2 = query2.toUpperCase();
            String stemp = "";
            if( query2.indexOf("SELECT ") != -1 && query2.indexOf("INSERT ") == -1 && query2.indexOf("UPDATE ") == -1 && query2.indexOf("DELETE ") == -1)
            {
                statement = connection.createStatement();
                resultSet = statement.executeQuery(query);
                metaData = resultSet.getMetaData();

                int numberOfColumns =  metaData.getColumnCount();
                columnTypes = new Class[numberOfColumns];
                String guiones = "";
                columnNames = "";
                for(int column = 0; column < numberOfColumns; column++)
                {
                    stemp = metaData.getColumnLabel(column+1);
                    columnNames += stemp + "|";
                    guiones += utilidades.AddCadena("",stemp.length(),"-") + " ";
                    columnTypes[column] = columnTypeToColumnClass(metaData.getColumnType(column+1),SelectConexionTXT.jdbcDriverURL);
                }

                System.out.println(utilidades.AddCadena(guiones,numAncho," "));
                System.out.println(utilidades.AddCadena(columnNames,numAncho," "));
                System.out.println(utilidades.AddCadena(guiones,numAncho," "));
                Object obj = null;
                try {
                    long nActualizar = 0;
                    while (resultSet.next())
                    {
                        nActualizar++;
                        if(nActualizar%numPaginacion == 0)
                        {
                            // se hace una pausa.
                            System.out.println((nActualizar-numPaginacion) + " " +
                                Gestor.GetLiteral("conexiontxt.run_query_to","al") + " " + (nActualizar-1) +
                                Gestor.GetLiteral("conexiontxt.run_query_intro_1","[intro] ver mas registros. Cualquier tecla y intro cancelar consulta."));
                            String buffer = LeeLinea();
                            if(buffer.length() > 0)
                                return;
                            else
                            {
                                System.out.println(utilidades.AddCadena(guiones,numAncho," "));
                                System.out.println(utilidades.AddCadena(columnNames,numAncho," "));
                                System.out.println(utilidades.AddCadena(guiones,numAncho," "));
                            }
                        }

                        stemp = "";
                        for (int i = 1; i <=numberOfColumns; i++)
                        {
                            if(stemp.length() > numAncho)
                                break;

                            obj = resultSet.getObject(i);
                            if(obj != null)
                                stemp += "[" + obj.toString() + "]";
                            else
                                stemp += "[null]";
                        }
                        System.out.println(utilidades.AddCadena(stemp,numAncho," "));
                    }
                    System.out.println("" + nActualizar + " " + Gestor.GetLiteral("conexiontxt.run_query_reg_showing","registros visualizados"));
                } catch(Exception emen)
                {
                    System.out.println(Gestor.GetLiteral("conexiontxt.run_query_fatal","A pasado") + ": " + emen.toString());
                }
               
                resultSet.close();
                statement.close();
            }
            else // es una sentencia que no retorna registros
            {
                statement = connection.createStatement();
                int resultado = statement.executeUpdate(query);
                System.out.println(Gestor.GetLiteral("conexiontxt.run_query_result","Resultado") + ": " + resultado);
                statement.close();
            }
        }
        catch (ClassNotFoundException ex)
        {
            System.err.println(Gestor.GetLiteral("conexiontxt.error_2","No se encuentran las clases correspondientes al driver jdbc se la base de datos."));
        }
        catch (SQLException ex)
        {
            System.err.println(Gestor.GetLiteral("gestor.error_1","Error") + ": " + ex.getMessage());
        }
    }
   
    public static Class columnTypeToColumnClass(int type, String jdbcDriverURL)
    {
        switch(type)
        {
        case Types.CHAR:
        case Types.VARCHAR:
        case Types.LONGVARCHAR:
            return String.class;

        case Types.BIT:
            return Boolean.class;

        case Types.SMALLINT:
            if(jdbcDriverURL.substring(5,5+"adabasd".length()).equals("adabasd"))
                return Short.class;
            else if(jdbcDriverURL.substring(5,5+"odbc".length()).equals("odbc"))
                return Integer.class;
            else
                return Integer.class;

        case Types.TINYINT:
        case Types.INTEGER:
            return Integer.class;

        case Types.DECIMAL:
            return Number.class;
           
        case Types.NUMERIC:
            return java.math.BigDecimal.class;

        case Types.BIGINT:
            return Long.class;

        case Types.FLOAT:
        case Types.REAL:
        case Types.DOUBLE:
            return Double.class;

        case Types.DATE:
            return java.sql.Date.class;

        case Types.TIME:
            return java.sql.Time.class;

        case Types.TIMESTAMP:
            return java.sql.Timestamp.class;

        case Types.OTHER:
            return Object.class;

        default:
            return Object.class;
        }
    }

    public static String LeeLinea()
    {
        byte buffer[] = new byte[4086];
        int pos = 0;
        String resultado = "";
        buffer[pos] = 0;
        int leido = 0;
        while(leido != -1 && leido != 13 && leido != 10)
        {
            try {
                leido = System.in.read();
            } catch(java.io.IOException ioe)
            {
                System.err.println(Gestor.GetLiteral("gestor.error_1","Error") + ": " + ioe.getMessage());
                leido = -1;
            }
           
            if(leido != -1 && leido != 10 && leido != 13)
            {
                buffer[pos++] = (byte)leido;
            }
           
            if(leido == 13)
            {
                // hay que leer el 10
                try {
                    leido = System.in.read();
                } catch(java.io.IOException ioe)
                {
                    System.err.println(Gestor.GetLiteral("gestor.error_1","Error") + ": " + ioe.getMessage());
                    leido = -1;
                }
                if(leido == -1 || leido != 10)
                {
                    System.out.println(Gestor.GetLiteral("conexiontxt.error_3","Los intros de la entrada estandar tienen que ser de dos caracteres el chr(13) y chr(10)."));
                    System.exit(0);
                }
            }
        }
       
        if(pos > 0)
            resultado = new String(buffer,0,pos);
       
        return resultado.trim();
    }

    public static String LeeLineaOLD()
    {
        byte buffer[] = new byte[4086];
        int leido = 0;
        String resultado = "";
        try {
            leido = System.in.read(buffer);
        } catch(java.io.IOException ioe)
        {
            System.err.println(Gestor.GetLiteral("gestor.error_1","Error") + ": " + ioe.getMessage());
        }
        if(leido > 0 && buffer[0] != 10 && buffer[0] != 13)
        {
            resultado = new String(buffer,0,leido);
            // quita el intro
            int pos = resultado.indexOf((char)13);
            if(pos != -1)
                resultado = resultado.substring(0,pos);
            pos = resultado.indexOf((char)10);
            if(pos != -1)
                resultado = resultado.substring(0,pos);
        }
       
        return resultado.trim();
    }

    private void Tablas()
    {
        boolean fintablas = false;
        HashMap hm = new HashMap();

        try
        {
            if(connection == null)
            {
                //get connection
                Class.forName(SelectConexionTXT.jdbcDriverClass);
                if(SelectConexionTXT.user != null && SelectConexionTXT.user.trim().length() != 0)
                    connection = DriverManager.getConnection(SelectConexionTXT.jdbcDriverURL, SelectConexionTXT.user, SelectConexionTXT.password);
                else
                    connection = DriverManager.getConnection(SelectConexionTXT.jdbcDriverURL);
            }
            DatabaseMetaData dbmd = connection.getMetaData();

            String tabla = null;
            String tipotabla = null;
            String tiposdetabla[] = new String[1];
            int numTiposTablas = 1;
            tiposdetabla[0] = "TABLE";

            ResultSet r2 = null;
           
            while(!fintablas)
            {
                System.out.println("---------");
                System.out.println(Gestor.GetLiteral("conexiontxt.tables","Tablas"));
                System.out.println("---------");

                r2 = dbmd.getTables(null, null, null,tiposdetabla);
                int contador = 0;
                int contador2 = 0;
                hm.clear();
                int caracteresColumna = (numAncho / 19);
                while (r2.next())
                {
                    contador++;
                    if(contador2 != 0 && contador2%numPaginacion == 0 && (contador-1)%caracteresColumna == 0)
                    {
                        // se hace una pausa.
                        if(contador < (numPaginacion*caracteresColumna))
                            System.out.println("\n1 " + Gestor.GetLiteral("conexiontxt.run_query_to","al") + " " + (contador-1) + " " + Gestor.GetLiteral("conexiontxt.run_query_intro_1","[intro] ver mas registros. Cualquier tecla y intro cancelar consulta."));
                        else
                            System.out.println("\n" + (contador-(numPaginacion*caracteresColumna)) + " " + Gestor.GetLiteral("conexiontxt.run_query_to","al") + " " + (contador-1) + " " + Gestor.GetLiteral("conexiontxt.run_query_intro_1","[intro] ver mas registros. Cualquier tecla y intro cancelar consulta."));
                        String buffer = LeeLinea();
                        if(buffer.length() > 0)
                            return;
                    }

                    tabla = r2.getString("TABLE_NAME");
                    hm.put(String.valueOf(contador), tabla);
                    System.out.print(utilidades.AddCadena("" + contador + " - " + tabla,18," ") + " ");
                    if(contador%caracteresColumna == 0)
                    {
                        System.out.println();
                        contador2++;
                    }
                } 
                if(contador == 0)
                {
                    System.out.println(Gestor.GetLiteral("conexiontxt.tables_not_found","No hay tablas"));
                    System.out.println("--------------------------------------------------------------------------------");
                    System.out.println(Gestor.GetLiteral("conexiontxt.comand2","'-V' Volver."));
                    System.out.println("--------------------------------------------------------------------------------");
                }
                else
                {
                    System.out.println();
                    System.out.println("--------------------------------------------------------------------------------");
                    System.out.println(Gestor.GetLiteral("conexiontxt.comand3","'-T' Ver tablas '-V' Volver."));
                    System.out.println("--------------------------------------------------------------------------------");
                }

                r2.close();
                String buffer = LeeLinea();
                if(buffer == null || buffer.length() == 0 || buffer.toLowerCase().equals("-v"))
                    fintablas = true;
            }
        } catch(Exception e)
        {
            System.out.println(Gestor.GetLiteral("gestor.error_1","Error") + ": " + e.getMessage());
            e.printStackTrace();
        }        
       
       
    }
   
    public static Properties pConexiones = null;
    public static Connection connection = null;
    public static int numPaginacion = 21;
    public static int numAncho = 80;
    private String args[] = null;
}
TOP

Related Classes of com.GestDB.sql.ConexionTXT

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.