Ayuda sobre este Campo en MySQL

Publicado en 'Programación' por celsoxvi, 15 Nov 2011.





  1. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72




    Hola, Bueno tengo una Pequeña Duda y no se como hacerlo.

    Resulta que estoy usando Java y MySQL para hacer una aplicación de Escritorio y me ha nacido una Duda. Tengo una Tabla Por Decir Departamento.

    Y Bueno tiene un Campo ID de tipo CHAR(3) y necesito que valla asi

    D01,D02,D03...D10

    Osea si por ejemplo hay 3 Registros, D01,D02,D03, El D04 que se me muestre en un JTextField, Pero si por ejemplo llegase al D09, Cuando pase al Siguiente no se mue Muestre D010 Si no D10 y asi que valla en Aumento, Esta es la Duda que tengo hasta el momento en MySQL y Java :(
     


  2. Agustin

    Agustin Miembro nuevo

    Registro:
    14 Nov 2011
    Mensajes:
    5
    Likes:
    0
    Hola

    Haber si te sirve lo que se me vino a la mente
    contarias cuantos registros tienees en la tabla luego contatenarias la letra D + (numero de registros en la tabla + 1).

    La otra seria usando la funcion max(id): Select max(id) from departemento, extraes la parte numerica de tu D11, quedando solo 11 y luego le sumarias +1.

    Espero que te sirva :)
     
  3. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    Hola. En MySql si tu campo primary key está definido como char(3) e intentas insertar el valor 'D010', se truncará a 'D01' y si no existe dicho id, se insertará exitosamente, de lo contario (si existe), arrojará un error avisando que ya existe dicha primary key.
    Por tanto, no sería posible que tu BD's almacene 'D010', 'D011', etc para tu campo ID mientras este acepte como máximo 3 caracteres.

    Algo que si es posible hacer es almacenar 'D1', 'D2', etc. Aclara esto por favor.

    Un saludo.

    ----- mensaje añadido, 16-nov-2011 a las 10:35 -----

    Estaba pensando que lo mejor sería crear una restricción CHECK para que valide el campo id con 3 caracteres.
    En Sql Server lo hago de la siguiente manera:
    Código:
    alter table departamento
    add constraint CK_id
    check (len(id) = 3);
     
    Última edición: 16 Nov 2011
  4. jcfarfan

    jcfarfan Miembro maestro

    Registro:
    22 Jul 2010
    Mensajes:
    576
    Likes:
    92
    Por que no controlas los incrementos desde el codigo de JAVA.
    No se java asi es que lo pongo en Pseudocodigo

    Registro = ContarRegistrosTabla() + 1
    Codigo = "D" + Derecha("00" + EliminarBlancos(ConvertirATexto(Registo)),2)

    Como te dije no se JAVA, pero deben existir funciones en JAVA parecidas a esto.
    ContarRegistroTabla -> Funcion que devuelve el numero de registros en una tabla
    Derecha -> funcion que trunca una cadena, devolviendo cierta catidad de caracteres desde la derecha.
    Eliminar.Blancos -> Funcion que elimina los espacios en blanco a la derecha e izquierda de una cadena de texto.
    ConvertirATexto -> Funcion que convirte un entero a char (o string)
     
    Última edición: 16 Nov 2011
  5. ozkr2907

    ozkr2907 Miembro frecuente

    Registro:
    9 Ene 2011
    Mensajes:
    171
    Likes:
    3
    Es facil, para empezar debes tener en cuenta que tu tabla solo admite hasta 3 caracteres, por lo que tu campo solo va a llegar hasta D99. Eso de incrementarlo puedes hacerlo en el lado de tu logica de negocio utilizando DecimalFormat.
     
  6. initiald

    initiald Miembro frecuente

    Registro:
    12 Jun 2010
    Mensajes:
    142
    Likes:
    19
    Hola tienes tres formas de hacerlo que se me ocurren:

    1. Realizar un método generador de códigos en java, donde obtengas el máximo valor de el formato por ejemplo D10, utilizando funciones de D de la cadena y llenarlos en un arraylist, obtienes el máximo o por comparación y por ultimo concatenas el D al numero máximo que sigue.

    Para el caso del formato del numero, utilizar Formatter del java.util por ejemplo:

    PHP:
                int numero 5;
                 
                
    Formatter fmt = new Formatter();

    // Si quieres con tres 0 a la izquierda cambias el 02 por 03

                
    fmt.format("%02d",numero);
                 
                
    System.out.println("El numero formateado " fmt);

    //respuesta sera 05  y si es mayor 9 te como 15 automáticamente cambiara el formato.

    // de ahi solo concatenas la D
    2. Mediante procedimientos almacenados, realizas un generador de códigos que devuelva un parámetro de salida con el formato del código, para esto tienes que tener conocimiento de varias funciones de cadena y sentencias SQL, la ventaja es que se puede utilizar independiente del lenguaje que se implemente y es realmente optimo porque aprovechas la tecnología de Gestor de base de datos. Es el mejor de los tres según mi opinión.

    Código:
    -- Utilizas la función Lpad para poner 0 a la izquierda y concatenas luego
    
    -- El primer parámetro es el numero, el segundo numero son la cantidad de 0 y el tercero con que quieres llenar en este caso 0.
    SELECT LPAD(5,2,'0') relleno_izquierda;
    
    -- el resultado sera 05
    
    3. Mediante trigger también lo podrías hacer, al momento de insertar puedes darle el formato pero creo que seria complicarte la vida y no muy optimo.
     
    Última edición: 20 Nov 2011