Mientas estaba realiando un proyecto de registro de consultas para un sistema de control de pacientes me encontre con un inconveniente que es el de predecir u obtener cual sera el próximo número de registro de mi tabla facturas en una base de datos MySQL de para que esto me mostrar ya el pantalla del formulario ya el número de la boleta sin necesidad de guardarla aun, entonces si se cancela la facturar no quedará registrada y el número se podra utlizar nuevamente en la próxima boleta que se confirme.
Para solucionar ese inconveniente realize la siguiente consulta MySQL que me devuelve una lista de los últimos id añadido a una especifica tabla.
La consulta SQL es la siguiente
SELECT LAST_INSERT_ID(numero_boleta) FROM tbl_boletas
Esto me devuelbe una lista de todos los utlimos numero_boletas ingresado EJ:
+-------------------------------+ | LAST_INSERT_ID(numero_boleta) | +-------------------------------+ | 1 | | 2 | | 3 | | 5 | +-------------------------------+ 4 rows in set #Como podemos ver el ultimo id autoincrement ingresado es el 5
Esto me sirvio para poder definir el próximo número de mi boleta pues sólo necesite sumarle más 1 a ese ultimo valor.
Entonces mi consulta qudaria de esta forma.
SELECT LAST_INSERT_ID(numero_boleta)+1 FROM tbl_boletas ORDER BY numero_boleta DESC LIMIT 1;
Y listo con esto solo me devolvera el valor del ultimo id del registro y le sumara 1 que sera el siguiente número de la boleta.
Como lo utilice en Java,
Lo utilice de la siguiente forma
//GENERA NUMERO DE FACTURA DE COMPRA void generarNumeroFactura(){ String sql ="SELECT LAST_INSERT_ID(numero_boleta)+1 FROM tbl_boletas ORDER BY numero_boleta DESC LIMIT 1"; conectar cc = new conectar(); Connection cn = (Connection) cc.conexion(); try { java.sql.Statement st = cn.createStatement(); ResultSet rs = st.executeQuery(sql); while(rs.next()){ //Aca le digo que muestre el valor en un JtextFiel txtNumeroBoleta.setText(rs.getString("numero_boleta")); } } catch (Exception e) { // NOTA: So hubo error muestra el error JOptionPane.showMessageDialog(null, e); } }
No es necesario utiliza la variable LAST_INSERT_ID() solo puede dejar el valor del campo y devuelve el mismo valor.
SELECT numero_boleta FROM tbl_boletas ORDER BY numero_boleta DESC LIMIT 1;
gracias por la idea me ayudo a resolver un problema que tenia con un trigger que no dejaba actualizar la variable LAST_INSERT_ID() simplemente no la utilice gracias a tu idea.
Habría otras maneras de obtener el ultimo valor de ese campo pero este sirve.
Que pasa si dos usuarios están consultando el último ID al mismo tiempo?
como puedo evitar que ambos usuarios inserten con el mismo ID
cual fue su solucion estimado
Me trae el id del ultimo registro ingresado y no le suma 1 , como se solucionaría?