Hola amig@s en esta ocacion (despues de un largo tiempo c: ) les mostrare como hacer una busqueda en una base de datos MySQL por coincidencia de caracteres y mostrarla en una JTable de dos maneras diferentes lo primero sera crear nuestra clase Conexion la cual sera igual para ambas formas:
Conexion.java
package elrinconprograues.mysql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Conexion {
String userName = "root";
String password = "root";
String url = "jdbc:mysql://localhost/";
String urlDriver = "com.mysql.jdbc.Driver";
String database = "busqueda";
private Connection con;
Statement st;
ResultSet rs;
public Conexion() {
}
public void abrirConexion() {
try {
Class.forName(urlDriver).newInstance();
con = DriverManager.getConnection(url + database, userName, password);
System.out.println("Conexión a la BD");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) {
System.out.println("Error en conexion ");
System.out.println(e.getMessage());
}
}
public void cerrarConexion() {
try {
con.close();
System.out.println("Conexión cerrada");
} catch (SQLException e) {
System.out.println("Error al cerrar conexión");
}
}
}
Forma #1
Lo primero que haremos sera crear 2 Arraylist globales en nuestra clase Conexion (o crear segun sean necesarios) dado que en este ejemplo tengo una tabla llamada persona con 2 campos el nombre y el otro para el apellido.
ArrayList nombre = new ArrayList();
ArrayList apellido = new ArrayList()
Ahora crearemos un metodo llamado busquedaPersona que recibira como parametro un String:
public void busquedaPersona(String bsq) {
abrirConexion();
nombre.clear();
apellido.clear();
try {
st = con.createStatement();
rs = st.executeQuery("select nombre,apellido from persona where nombre like '"+bsq+"%'");
while (rs.next()) {
nombre.add(rs.getString("nombre"));
apellido.add(rs.getString("apellido"));
}
cerrarConexion();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
Con esto terminamos nuestra clase Conexion que quedaria de la siguiente manera:
package elrinconprograues.mysql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class Conexion {
String userName = "root";
String password = "root";
String url = "jdbc:mysql://localhost/";
String urlDriver = "com.mysql.jdbc.Driver";
String database = "busqueda";
private Connection con;
Statement st;
ResultSet rs;
ArrayList nombre = new ArrayList();
ArrayList apellido = new ArrayList();
public Conexion() {
}
public void abrirConexion() {
try {
Class.forName(urlDriver).newInstance();
con = DriverManager.getConnection(url + database, userName, password);
System.out.println("Conexión a la BD");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) {
System.out.println("Error en conexion ");
System.out.println(e.getMessage());
}
}
public void cerrarConexion() {
try {
con.close();
System.out.println("Conexión cerrada");
} catch (SQLException e) {
System.out.println("Error al cerrar conexión");
}
}
public void busquedaPersona(String bsq) {
abrirConexion();
nombre.clear();
apellido.clear();
try {
st = con.createStatement();
rs = st.executeQuery("select nombre,apellido from persona where nombre like '"+bsq+"%'");
while (rs.next()) {
nombre.add(rs.getString("nombre"));
apellido.add(rs.getString("apellido"));
}
cerrarConexion();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Por lo que continuaremos con nuestro JFrame el cual contendra un JTextField, un JButton y una JTable
Primero crearemos una instancia de nuestra clase Conexion
Conexion con;
Y tambien una instancia de DefaultTableModel para nuestra tabla:
DefaultTableModel modelo;
Ahora las inicializamos en nuestro constructor y asignamos el DefaultTableModel a nuestra tabla:
public Busqueda() {
initComponents();
con=new Conexion();
modelo = new DefaultTableModel();
modelo = (DefaultTableModel) jTable1.getModel();
jTable1.setModel(modelo);
}
Tambien crearemos un metodo para borrar las filas de nuestra tabla cada vez que realicemos una busqueda:
public void borrarTabla(){
for (int i = 0; i < modelo.getRowCount();i++) {
modelo.removeRow(i);
}
}
Luego crearemos el evento ActionPerformed en nuestro boton para realizar la busqueda y dentro de el llamaremos a nuestro metodo busquedaPersona de nuestra Clase Conexion y tambien crearemos un for con el cual llenaremos nuestra tabla con los datos de los ArraryList:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
con.busquedaPersona(jTextField1.getText());
borrarTabla();
for (int i = 0; i < con.nombre.size(); i++) {
modelo.addRow(new Object[]{con.nombre.get(i),con.apellido.get(i)});
}
}
Con esto estaria completa la primer forma de hacer una busqueda en MySQL.
Forma #2
Para nuestra siguiente forma la Clase Conexion seria practicamente la misma con la unica diferencia que no necesitaremos los ArrayList y nuestro metodo busquedaPersona no solo recibira un String como parametro sino que tambien reibira el DefaultTableModel de nuestra tabla por lo que quedaria de la siguiente forma:
package elrinconprograues.mysql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.table.DefaultTableModel;
public class Conexion {
String userName = "root";
String password = "root";
String url = "jdbc:mysql://localhost/";
String urlDriver = "com.mysql.jdbc.Driver";
String database = "busqueda";
private Connection con;
Statement st;
ResultSet rs;
public Conexion() {
}
public void abrirConexion() {
try {
Class.forName(urlDriver).newInstance();
con = DriverManager.getConnection(url + database, userName, password);
System.out.println("Conexión a la BD");
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException e) {
System.out.println("Error en conexion ");
System.out.println(e.getMessage());
}
}
public void cerrarConexion() {
try {
con.close();
System.out.println("Conexión cerrada");
} catch (SQLException e) {
System.out.println("Error al cerrar conexión");
}
}
public void busquedaPersona(String bsq, DefaultTableModel modelo) {
abrirConexion();
try {
st = con.createStatement();
rs = st.executeQuery("select nombre,apellido from persona where nombre like '"+bsq+"%'");
while (rs.next()) {
modelo.addRow(new Object[]{rs.getString("nombre"),rs.getString("apellido")});
}
cerrarConexion();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
Ahora en el JFrame especificamente el ActionPerformed del boton quedaria de la siguiente manera:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
borrarTabla();
con.busquedaPersona(jTextField1.getText(), modelo);
}