Pregunta

Quiero saber si es una buena idea detectar excepciones basadas en un índice único de sql en java.

Quiero capturar una excepción como 'entrada duplicada para 1-0' si es así, ¿manejar la excepción, de lo contrario, insertar correctamente en la tabla de la base de datos?

¿Fue útil?

Solución

Digo que no haces eso, por dos razones:

  • los mensajes de error son poco claros: ERROR 1062 (23000): Duplicar la entrada 'xxx' para la clave 1 . ¿Estás siempre 100% seguro de qué clave es 1?
  • te encierra en un proveedor de base de datos específico

Me resulta más sencillo transaccionalmente :

  • verificar la existencia de la fila;
  • lanzar una excepción si la fila ya existe;
  • inserte la nueva fila.

Problemas de rendimiento :

Digo medir dos veces, cortar una vez . Perfile el uso para su caso de uso específico. Lo mejor de mi cabeza es que diría que el rendimiento no será un problema, excepto para los escenarios de uso intensivo de db.

La razón es que una vez que realiza un SELECT sobre esa fila específica, sus datos se colocarán en los cachés de la base de datos y inmediatamente se usarán para la verificación de inserción realizada en el índice para la instrucción INSERT . También teniendo en cuenta que este acceso está respaldado por un índice lleva a la conclusión de que el rendimiento no será un problema.

Pero, como siempre, mida.

Otros consejos

No veo por qué no. Probablemente sea más eficiente que ejecutar una consulta antes de la inserción. Sin embargo, probablemente sea mejor detectar el código de error de la excepción en lugar de reconocer el mensaje de error.

Puedes usar el comando REPLACE. Inserta / actualiza en función de la existencia del registro. Y también es atómico, mientras que la consulta luego insertar / actualizar no lo es. ¿Depende de qué desea hacer si detecta la violación de clave?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top