Translate

lunes, 22 de septiembre de 2014

Error: Duplicate entry '1-1' for key 'PRIMARY' en MySQL

Introducción


Apenas hace poco conectándome con una base de datos en Java me salió el error:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1-1' for key 'PRIMARY'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1040)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2788)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1816)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1730)


Ustedes pudieran tener algo similar  si ejecutan algo como
Insert into usuario_has_mesa values('" + idusuario + "','" + numeroDeMesa + "')"

Solución


Cambiar agregando la palabra IGNORE
Insert IGNORE into usuario_has_mesa values('" + idusuario + "','" + numeroDeMesa + "')"

Explicación


A pesar de que es una modificación muy simple, le estamos indicando al sistema que no trate de insertar nuevos registros si la base de datos ya tiene alguno con la misma clave principal. Esto básicamente nos servirá para evitar llenar datos duplicados o para evitar llenar mal nuestra base de datos.

domingo, 14 de septiembre de 2014

Corrección de error en Java java.lang.UnsupportedClassVersionError

Introducción 


Puede suceder que cuando alguien nos comparta un código nos encontremos con un error similar a este:
java.lang.UnsupportedClassVersionError: GUI/VentanaAdministracion : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at ... etc etc

Solución 

Si el código es un proyecto de Netbeans, la solución será simple,  seleccionar nuestro proyecto, darle click derecho y propiedades.
En la opción Sources bajamos la versión de JDK con la que se compilará. Para este caso, la versión 51 es el JDK 7.


Si no se cuenta con netbeans, y tras borrar los archivos .class e intentar compilar de nuevo sale el mismo error,  se deberá ajustar el script ANT con el que se compila, o descargar la versión más reciente del Java Developer Kit

Explicación

El código nos marca ese error porque la persona que lo hizo tenía un compilador en una versión más reciente a la nuestra. Posiblemente habrá errores de código, como por ejemplo en el caso presentado los milticatch marcaban error porque son una característica del JDK 7.