por favor alguien podria ayudarme, el proyecto trata de hacer un sistema de ventas a nivel nacional, conociendo desde cualquier local la cantidad de instrumentos de otro local, la base de datos esta en mysql y el codigo fuente en java.
como puedo usar hibernate, soap, rest, etc.
quiero mejorar el tiempo de respuesta de una consulta con java y mysql.
como explique en mi consulta anterior demora 10 segundos en mostrarme los datos en una tabla. y si es con operacion matematica demora mas dependiente de la cantidad de registros.
utilizo jdbc driver
entre Desarrolladores
Recibe ayuda de expertos
Registrate y pregunta
Es gratis y fácil
Recibe respuestas
Respuestas, votos y comentarios
Vota y selecciona respuestas
Recibe puntos, vota y da la solución
Pregunta
Consulta a mysql con jtable
- preguntó
- Software
- 1843 Vistas
- 1 Respuestas
- abierta
1 Respuesta
Veamos, tienes opciones, a mi se me ocurre lanzar en un hilo aparte y no en el hilo principal la conexion a la base de datos.
al principio de tu aplicacion vas a incluir:
Thread connectThread = new Thread(new Runnable() {
public void run()
{
// conectamos a la base de datos en este hilo
con.conectar();
// a modo de interactuar con el usuario
// agregamos un boton y lo desactivamos
// se activara cuando la conexion se realize
boton_ver_empleados.setEnabled(true);
}
});
connectThread.start(); // iniciamos este hilo
esto crea un nuevo hilo para la conexion, con esto permites que el hilo principal en swing no se congele por la conexion a la base de datos dandote mas velocidad en la carga de la interfaz.
No conozco el codigo de tu metodo initComponents()
pero doy por hecho de que inicializas ahí swing y los componentes, recuerda incializarlos al principio de tu aplicacion.
para los metodos frm_ver_empleados
y ver_empleado
, podrian estar así:
public void frm_ver_empleados()
{
initComponents();
mostrar = new DefaultTableModel() {
@Override
public boolean isCellEditable (int fila, int columna) {
return false;
}
};
ver_empleado();
}
private void ver_empleado ()
{
LinkedHashMap<String, Integer> columnsProps = new LinkedHashMap<>();
columnsProps.put("DNI", 80);
columnsProps.put("Nombre y Apellidos", 300);
columnsProps.put("Categoria", 90);
columnsProps.put("Cargo", 200);
columnsProps.put("Fec. Ingreso", 70);
columnsProps.put("Contrato", 70);
columnsProps.put("Fec. Ven. Co.", 70);
columnsProps.put("Poliza SCTR", 70);
columnsProps.put("EMO", 70);
columnsProps.put("Ant. Polic.", 70);
columnsProps.put("Ant. Penales", 70);
columnsProps.put("Ant. Judic.", 70);
columnsProps.put("Estado", 50);
for (Map.Entry<String, Integer> column : columnsProps.entrySet())
{
mostrar.addColumn(column.getKey());
}
try
{
String query = "SELECT e.dni_col, e.nom_col, cat.descripcion, e.est_col, c.desc_car, "
+ "cc.fec_ini "
+ "FROM Colaborador as e "
+ "INNER JOIN Cargo as c ON(e.idCargo = c.idCargo) "
+ "INNER JOIN Categoria_Empleado as cat ON(e.idCat_Emp = cat.idCat_Emp) "
+ "LEFT JOIN Contrato_Colaborador as cc ON(cc.dni_col = e.dni_col) "
+ "ORDER BY e.nom_col ASC";
Statement st = con.conexion();
ResultSet rs = st.executeQuery(query);
while (rs.next())
{
// emp.setDni(rs.getInt("e.dni_col"));
Object fila[] = new Object[14];
fila[0] = rs.getObject("e.dni_col");
fila[1] = rs.getObject("e.nom_col");
fila[2] = rs.getObject("cat.descripcion");
fila[3] = rs.getObject("c.desc_car");
fila[4] = "-";
fila[5] = "NO";
fila[6] = "-";
if( rs.getObject("cc.fec_ini") != null )
{
fila[5] = "SI";
fila[6] = rs.getObject("cc.fec_ini");
}
fila[7] = fila[8] = fila[9]
= fila[10] = fila[11] = "-";
fila[12] = rs.getString("e.est_col").equals("1") ? "ACTIVO" : "-";
tableModel.addRow(fila);
}
con.cerrar(st);
con.cerrar(rs);
/*ven.centrar_celda(t_empleados, 0);
ven.centrar_celda(t_empleados, 4);
ven.centrar_celda(t_empleados, 5);
ven.centrar_celda(t_empleados, 6);
ven.centrar_celda(t_empleados, 7);
ven.centrar_celda(t_empleados, 8);
ven.centrar_celda(t_empleados, 9);
ven.centrar_celda(t_empleados, 10);
ven.centrar_celda(t_empleados, 11);
ven.centrar_celda(t_empleados, 12);
tableModel.fireTableDataChanged();*/
}
catch (Exception e) { System.out.print(e); }
int columnIndex = 0;
for (Map.Entry<String, Integer> column : columnsProps.entrySet())
{
t_empleados.getColumnModel().getColumn(columnIndex++).setMinWidth(column.getValue());
}
}
para no quedarme con la duda, hize una prueba con una base de datos remota, use adicionalmente throttling
y como maximo me da 3000 ms
en benchmark, lo cual es aceptable y puede variar dependiendo de tu velocidad de conexion, lo que sucede es que al conectar a la base de datos remota, envias y recibes paquetes tomando un pequeño tiempo entre ese lapso, que sucede con mysql workbench o algun software similar, la conexion se mantiene en una instancia, es por eso que en mysql workbench lo ves mucho mas rápido.
Solucion 2
Otra solucion es usar RESTful junto con json, las pruebas fueron notablemente mejor en comparacion que con el driver JDBC.
Hize un script simple en php, el benchmark en la consola me dió entre 500 ms
y 1000 ms
como máximo
El script php en cuestion es:
get_empleados.php
<?php
function response($message, $error = false)
{
$output = array(($error ? 'error' : 'data') => $message);
header('Content-Type: application/json; charset=utf-8');
die(json_encode($output));
}
$mysqli = new mysqli(
"servidor",
"usuario",
"clave",
"base de datos"
);
if ( $mysqli->connect_errno )
{
response($mysqli->connect_error, true);
}
$result = $mysqli->query("SELECT e.dni_col, e.nom_col, cat.descripcion, e.est_col, c.desc_car, cc.fec_ini
FROM Colaborador as e
INNER JOIN Cargo as c ON(e.idCargo = c.idCargo)
INNER JOIN Categoria_Empleado as cat ON(e.idCat_Emp = cat.idCat_Emp)
LEFT JOIN Contrato_Colaborador as cc ON(cc.dni_col = e.dni_col)
ORDER BY e.nom_col ASC");
$output = array();
while($row = $result->fetch_assoc())
{
$empleado = array(
'dni_col' => $row['dni_col'],
'nom_col' => utf8_encode($row['nom_col']),
'descripcion' => $row['descripcion'],
'est_col' => $row['est_col'],
'desc_car' => $row['desc_car']
);
if ( !empty($row['fec_ini']) )
$empleado['fec_ini'] = $row['fec_ini'];
$output[] = $empleado;
}
$result->close();
$mysqli->close();
response($output);
y el método ver_empleado()
en tu aplicación:
https://gist.github.com/anonymous/014a7c3fdce1013800ee
reemplazar http://tupagina.com/get_empleados.php
por la pagina de tu sitio, donde subiste el fichero php.
Por favor, accede o regístrate para añadir un comentario.
Por favor, accede o regístrate para responder a esta pregunta.
En el blog
-
- 691198
- 1
- Jul 5, 2015
Sin Respuesta
-
- 180
- 0
- Oct 18
-
- 188
- 0
- Jul 9
-
- 590
- 1
- Mar 19
-
- 462
- 2
- Feb 26
-
- 5074
- 0
- Nov 7, 2023
-
- 494
- 0
- Sep 19, 2023
-
- 503
- 0
- Ago 21, 2023
-
- 658
- 0
- May 14, 2023
- ver todas
Actividad Reciente
mchojrin respondió Dic 9
Ayuda , necesito mostrar datos creados solo por el…alyvrs preguntó Oct 19
Ayuda , necesito mostrar datos creados solo por el…ManHol preguntó Jul 9
pasar un archivo de excel a csv en pythonArtEze respondió Abr 24
Alguien sabe, no me ignorenArtEze seleccionó una respuesta Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze respondió Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze preguntó Abr 24
Bajar extensión de Chrome sin actualizar el navega…ArtEze respondió Abr 24
No me deja instalar OracleArtEze respondió Abr 24
Formulario que guarde los datos de un jsonArtEze comentó Abr 24
Script /boot/ scraping
Ultimas Preguntas
Usuarios Top
- Leonardo-Tadei
- 227320 Puntos
- Peter
- 150480 Puntos
- white
- 75880 Puntos
- carlossevi
- 63580 Puntos
- magarzon
- 30650 Puntos
- pregunton
- 20400 Puntos