package Admin;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
import com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException;
public class SQL {
Scanner teclado;
Connection con;
boolean conection;
String URL;
int numeroPuerto;
String nombreBD;
String user;
String pass;
JFrame ventana;
public SQL(String URL, int numeroPuerto, String nombreBD, String user, String pass, JFrame ventana) {
this.URL = URL;
this.numeroPuerto = numeroPuerto;
this.nombreBD = nombreBD;
this.user = user;
this.pass = pass;
this.ventana = ventana;
try {
System.out.print("Cargando el driver de la Base de Datos MySQL... ");
Class.forName("com.mysql.jdbc.Driver");
System.out.println(" OK!");
System.out.print("Conectando con Base de Datos MySQL... ");
String generalURL = "jdbc:mysql://"+URL+":"+numeroPuerto+"/"+nombreBD;
con = DriverManager.getConnection(generalURL, user, pass);
System.out.println(" OK!");
System.out.println("");
conection = true;
} catch (SQLException e) {
if (e.getSQLState().equals("28000")) JOptionPane.showMessageDialog(ventana, "Usuario/Contraseña incorrectos", "Error", JOptionPane.ERROR_MESSAGE);
else JOptionPane.showMessageDialog(ventana, e.getSQLState(), "Error", JOptionPane.ERROR_MESSAGE);
conection = false;
} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(ventana, "Imposible cargar el driver.", "Error", JOptionPane.ERROR_MESSAGE);
conection = false;
} catch (Exception e) {
JOptionPane.showMessageDialog(ventana, "FATAL ERROR.", "Error", JOptionPane.ERROR_MESSAGE);
conection = false;
}
}
public void reintentarConexion(){
try {
con.close();
System.out.print("Cargando el driver de la Base de Datos MySQL... ");
Class.forName("com.mysql.jdbc.Driver");
System.out.println(" OK!");
System.out.print("Conectando con Base de Datos MySQL... ");
String generalURL = "jdbc:mysql://"+URL+":"+numeroPuerto+"/"+nombreBD;
con = DriverManager.getConnection(generalURL, user, pass);
System.out.println(" OK!");
System.out.println("");
} catch (SQLException e) {
if (e.getSQLState().equals("28000")) JOptionPane.showMessageDialog(ventana, "Usuario/Contraseña incorrectos", "Error", JOptionPane.ERROR_MESSAGE);
else JOptionPane.showMessageDialog(ventana, e.getSQLState(), "Error", JOptionPane.ERROR_MESSAGE);
} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(ventana, "Imposible cargar el driver.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (Exception e) {
JOptionPane.showMessageDialog(ventana, "FATAL ERROR.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
public Tablas cargarTablas(JFrame ventana){
Tablas nuevasTablas = null;
ArrayList<String> listaTablas = new ArrayList<>();
ResultSet rsTables = null;
try {
System.out.print("Cargando tablas de la Base de Datos MySQL... ");
java.sql.DatabaseMetaData dbmd = con.getMetaData();
rsTables = dbmd.getTables(null, null, "%", null);
System.out.println("OK!");
int i = 1;
System.out.println("Estas son las tablas disponibles en la Base de Datos:");
while (rsTables.next()) {
System.out.println(" "+(i++)+"-. "+rsTables.getString(3));
listaTablas.add(rsTables.getString(3));
}
System.out.println("");
nuevasTablas = new Tablas(listaTablas, null);
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Código de error: "+e.getSQLState()+". Pulse OK para reintentarlo.", "Error", JOptionPane.ERROR_MESSAGE);
reintentarConexion();
} finally {
try {
if (rsTables != null) rsTables.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, e.getSQLState(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
return nuevasTablas;
}
public Datos verDatos(String nombreT, JFrame ventana){
Datos nuevosDatos = null;
ArrayList<String> datos = new ArrayList<>();
ArrayList<String> nombreColumnas = new ArrayList<>();
Statement stmt = null;
ResultSet rsPersonalized = null;
try {
int numb = 0;
Statement stmt1 = null;
ResultSet rsRowNum = null;
stmt1 = con.createStatement();
rsRowNum = stmt1.executeQuery("SELECT COUNT(*) FROM "+nombreT);
while (rsRowNum.next()) {
numb = rsRowNum.getInt(1);
}
System.out.println(numb);
String columnHeading = "";
System.out.print("Cargando la tabla establecida... ");
stmt = con.createStatement();
rsPersonalized = stmt.executeQuery("SELECT * FROM "+nombreT);
ResultSetMetaData rsmd = rsPersonalized.getMetaData();
System.out.println("OK!");
System.out.println("");
System.out.println("Estos son los datos de la tabla "+nombreT+":");
int columnCount = rsmd.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
columnHeading = columnHeading+"\t"+rsmd.getColumnName(i);
nombreColumnas.add(rsmd.getColumnName(i));
}
System.out.println(columnHeading);
while (rsPersonalized.next()) {
for (int i = 1; i <= columnCount; i++) {
System.out.print("\t"+rsPersonalized.getString(i));
datos.add(rsPersonalized.getString(i));
}
System.out.println("\n");
}
nuevosDatos = new Datos(nombreColumnas, datos);
} catch (InputMismatchException e) {
JOptionPane.showMessageDialog(ventana, "Dato de entrada no soportado en este campo.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (MySQLSyntaxErrorException e) {
JOptionPane.showMessageDialog(ventana, "La tabla no existe.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Código de error: "+e.getSQLState()+". Pulse OK para reintentarlo.", "Error", JOptionPane.ERROR_MESSAGE);
reintentarConexion();
} finally {
try {
if (stmt != null) stmt.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, e.getSQLState(), "Error", JOptionPane.ERROR_MESSAGE);
}
try {
if (rsPersonalized != null) rsPersonalized.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, e.getSQLState(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
return nuevosDatos;
}
public void actualizarDatos(String [] nuevosDatos, ArrayList<String> nombreColumnas, String nombreT, int tamX, int tamY, JFrame ventana) {
ResultSet rsColumns = null;
Statement stmt = null;
try {
System.out.println("");
System.out.print("Cargando datos de la tabla... ");
java.sql.DatabaseMetaData dbmd = con.getMetaData();
rsColumns = dbmd.getColumns(null, null, nombreT, null);
System.out.println("OK!");
stmt = con.createStatement();
String exeUpdate = "UPDATE "+nombreT+" SET ";
for (int j = 1; j != tamY; j++){
if (nuevosDatos[j].matches("[0-9]+")) {
exeUpdate += nombreColumnas.get(j)+"="+nuevosDatos[j];
} else if (nuevosDatos[j].equals("true") || nuevosDatos[j].equals("false")) {
exeUpdate += nombreColumnas.get(j)+"="+nuevosDatos[j];
} else if (nuevosDatos[j].matches("^\\d{4}-\\d{2}-\\d{2}.*$")) {
int ano = Integer.parseInt(nuevosDatos[j].substring(0, 4));
int mes = Integer.parseInt(nuevosDatos[j].substring(5, 7));
int dia = Integer.parseInt(nuevosDatos[j].substring(8, 10));
int horas = Integer.parseInt(nuevosDatos[j].substring(11, 13));
int minutos = Integer.parseInt(nuevosDatos[j].substring(14, 16));
int segundos = Integer.parseInt(nuevosDatos[j].substring(17, 19));
String nuevaFecha = ano+"-"+mes+"-"+dia+"T"+horas+":"+minutos+":"+segundos+"Z";
exeUpdate += nombreColumnas.get(j)+"=STR_TO_DATE('"+nuevaFecha+"','%Y-%m-%dT%H:%i:%sZ')";
} else {
String datoReplace = nuevosDatos[j].replaceAll("'", "''");
exeUpdate += nombreColumnas.get(j)+"='"+datoReplace+"'";
}
if ((j + 1) == tamY) exeUpdate += " ";
else exeUpdate += ", ";
}
exeUpdate += "WHERE "+nombreColumnas.get(0)+"="+nuevosDatos[0];
System.out.print("Escribiendo nuevo dato en la Base de Datos... ");
stmt.executeUpdate(exeUpdate);
System.out.println("OK!");
System.out.println("");
} catch (InputMismatchException e) {
JOptionPane.showMessageDialog(ventana, "Dato de entrada no soportado en este campo.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (MySQLIntegrityConstraintViolationException e) {
JOptionPane.showMessageDialog(ventana, "Datos repetidos en la Base de Datos o Dato relacionado no encontrado.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Código de error: "+e.getSQLState()+". Pulse OK para reintentarlo.", "Error", JOptionPane.ERROR_MESSAGE);
reintentarConexion();
} finally {
try {
if (stmt != null) stmt.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, e.getSQLState(), "Error", JOptionPane.ERROR_MESSAGE);
}
try {
if (rsColumns != null) rsColumns.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, e.getSQLState(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
public void insertarDato(ArrayList<String> listaDatos, Object [] colNames, String nombreT, int tamY, JFrame ventana){
ResultSet rsColumns = null;
Statement stmt = null;
try {
System.out.println("");
System.out.print("Cargando datos de la tabla... ");
java.sql.DatabaseMetaData dbmd = con.getMetaData();
rsColumns = dbmd.getColumns(null, null, nombreT, null);
System.out.println("OK!");
stmt = con.createStatement();
String exeUpdate = "INSERT INTO "+nombreT+" VALUES (";
for (int j = 0; j != tamY; j++){
if (listaDatos.get(j).matches("[0-9]+")) {
exeUpdate += listaDatos.get(j);
} else if (listaDatos.get(j).equals("true") || listaDatos.get(j).equals("false")) {
exeUpdate += listaDatos.get(j);
} else if (listaDatos.get(j).matches("^\\d{4}-\\d{2}-\\d{2}.*$")) {
int ano = Integer.parseInt(listaDatos.get(j).substring(0, 4));
int mes = Integer.parseInt(listaDatos.get(j).substring(5, 7));
int dia = Integer.parseInt(listaDatos.get(j).substring(8, 10));
int horas = Integer.parseInt(listaDatos.get(j).substring(11, 13));
int minutos = Integer.parseInt(listaDatos.get(j).substring(14, 16));
int segundos = Integer.parseInt(listaDatos.get(j).substring(17, 19));
String nuevaFecha = ano+"-"+mes+"-"+dia+"T"+horas+":"+minutos+":"+segundos+"Z";
exeUpdate += "STR_TO_DATE('"+nuevaFecha+"','%Y-%m-%dT%H:%i:%sZ')";
} else {
String datoReplace = listaDatos.get(j).replaceAll("'", "''");
exeUpdate += "'"+datoReplace+"'";
}
if ((j + 1) == tamY) exeUpdate += ")";
else exeUpdate += ", ";
}
System.out.println(exeUpdate);
System.out.print("Escribiendo nuevo dato en la Base de Datos... ");
stmt.executeUpdate(exeUpdate);
System.out.println("OK!");
System.out.println(exeUpdate);
} catch (InputMismatchException e) {
JOptionPane.showMessageDialog(ventana, "Dato de entrada no soportado en este campo.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (MySQLIntegrityConstraintViolationException e) {
JOptionPane.showMessageDialog(ventana, "Datos repetidos en la Base de Datos o Dato relacionado no encontrado.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Código de error: "+e.getSQLState()+". Pulse OK para reintentarlo.", "Error", JOptionPane.ERROR_MESSAGE);
reintentarConexion();
} finally {
try {
if (stmt != null) stmt.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Imposible crear un Statement.", "Error", JOptionPane.ERROR_MESSAGE);
}
try {
if (rsColumns != null) rsColumns.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Imposible crear un ResultSet.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
public void borrarDato(String nombreT, String id, JFrame ventana){
Statement stmt = null;
ResultSet rsColumns = null;
try {
verDatos(nombreT, ventana);
String priCol = null;
System.out.println("");
System.out.print("Cargando datos de la tabla... ");
stmt = con.createStatement();
java.sql.DatabaseMetaData dbmd = con.getMetaData();
rsColumns = dbmd.getColumns(null, null, nombreT, null);
System.out.println("OK!");
System.out.println("");
boolean primero = true;
while (rsColumns.next()) {
if (primero) priCol = rsColumns.getString("COLUMN_NAME"); primero = false;
}
System.out.println("");
System.out.print("Escribiendo nuevo dato en la Base de Datos...");
stmt.executeUpdate("DELETE FROM "+nombreT+" WHERE "+priCol+"="+id);
System.out.println("");
} catch (InputMismatchException e) {
JOptionPane.showMessageDialog(ventana, "Dato de entrada no soportado en este campo.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (MySQLIntegrityConstraintViolationException e) {
JOptionPane.showMessageDialog(ventana, "Datos repetidos en la Base de Datos o Dato relacionado no encontrado.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Código de error: "+e.getSQLState()+". Pulse OK para reintentarlo.", "Error", JOptionPane.ERROR_MESSAGE);
reintentarConexion();
} finally {
try {
if (stmt != null) stmt.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Imposible crear un Statement.", "Error", JOptionPane.ERROR_MESSAGE);
}
try {
if (rsColumns != null) rsColumns.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Imposible crear un ResultSet.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
public void actualizarUsuario(String pass, JFrame ventana) {
Statement stmt = null;
try {
stmt = con.createStatement();
stmt.executeUpdate("SET PASSWORD = PASSWORD('"+pass+"')");
} catch (InputMismatchException e) {
JOptionPane.showMessageDialog(ventana, "Dato de entrada no soportado en este campo.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (MySQLIntegrityConstraintViolationException e) {
JOptionPane.showMessageDialog(ventana, "Datos repetidos en la Base de Datos o Dato relacionado no encontrado.", "Error", JOptionPane.ERROR_MESSAGE);
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Código de error: "+e.getSQLState()+". Pulse OK para reintentarlo.", "Error", JOptionPane.ERROR_MESSAGE);
reintentarConexion();
} finally {
try {
if (stmt != null) stmt.close();
} catch (SQLException e) {
JOptionPane.showMessageDialog(ventana, "Imposible crear un Statement.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
}
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.