Ejercicio
SQL a texto
Objetivo
Debe crear un programa java capaz de analizar comandos INSERT del lenguaje SQL y extraer sus datos para separar líneas de texto, de la siguiente manera: si el archivo de entrada contenía estas tres líneas:
inserte en personas (nombre, dirección, edad) valores ("smith, pedro", "your street", 23);
insertar en las personas (nombre, dirección, edad) valores ("juan", "calle cinco, 6", 24);
insertar en ciudades (código, nombre) valores ("a", "alicante");
El archivo resultante debe tener en cada línea el nombre de un campo, seguido de dos puntos y su valor. Además, cada registro debe ir precedido del nombre de la tabla y seguido de una línea en blanco, como esta:
nombre de la persona: smith, pedro dirección: su calle edad: 23
personas nombre: juan Dirección: calle 5, 6 edad: 24
ciudades código: un nombre: alicante
Código de Ejemplo
package SQL2text;
import java.util.*;
public class Main
{
public static void main(String[] args)
{
java.io.FileReader ficheroEntrada = null;
String linea;
String nombre;
System.out.println("Not enough parameters!");
System.out.print("Enter file name: ");
nombre = new Scanner(System.in).nextLine();
try
{
ficheroEntrada = new java.io.FileReader(nombre);
}
catch (RuntimeException e)
{
System.out.println(e.getMessage());
}
try
{
do
{
linea = ficheroEntrada.ReadLine();
if (linea != null)
{
System.out.println();
String tableName = linea.substring(12).split("[ ]", -1)[0];
String[] campo = tangible.StringHelper.substring(linea, linea.indexOf("(") + 1, linea.indexOf(")") - linea.indexOf("(") - 1).split("[,]", -1);
String[] valores = tangible.StringHelper.substring(linea, linea.indexOf("values (") + 9, linea.indexOf(");") - linea.indexOf("values (") - 9).split("[,]", -1);
System.out.println(tableName);
for (int i = 0; i < campo.length; i++)
{
System.out.print(campo[i].trim() + ": ");
System.out.println(valores[i].trim().replace("'", ""));
}
}
} while (linea != null);
}
catch (RuntimeException e)
{
System.out.println(e.getMessage());
}
new Scanner(System.in).nextLine();
}
}