Consulta sobre java

Publicado en 'Programación' por Tooncast, 22 Jun 2016.





  1. Tooncast

    Tooncast Miembro de bronce

    Registro:
    18 Feb 2011
    Mensajes:
    1,316
    Likes:
    345




    Hola compañeros, tengo una consulta, lo que sucede es que he buscado miles de formas de como hacerlo y no me sale, lo que quiero es que no se pueda repetir el ID ingresado y al momento de hacer click en el botón Guardar con un repetido IDPACIENTES me salga un mensaje pidiendo que cambie de IDPACIENTES, aquí les pongo el diseño del programa que estoy haciendo.

    Estoy usando el Netbeans junto con el SQL Server 2012 y con Capas (Logica,Datos,Presentación)
    [​IMG]
     


  2. n00b

    n00b Miembro frecuente

    Registro:
    12 Dic 2015
    Mensajes:
    139
    Likes:
    49
    Puedes poner esa columna como IDENTITY y además como Primary Key (Llave Primaria).

    Por ejemplo en esta tabla IDPACIENTE es Identity y además es Llave Primaria:

    CREATE TABLE PACIENTE
    (
    IDAPACIENTE INT IDENTITY(1,1) NOT NULL,
    NOMBRE VARCHAR(100) NOT NULL
    )
    GO
    ALTER TABLE PACIENTE ADD CONSTRAINT PK_PACIENTE_IDAPACIENTE PRIMARY KEY (IDAPACIENTE)
    GO

    Al insertar no es necesario insertar en la columna IDENTITY, por ejemplo:
    INSERT INTO PACIENTE(NOMBRE) VALUES('Juan Perez')
    INSERT INTO PACIENTE(NOMBRE) VALUES('Ana Perez')

    Si haces un select notarás que los valores en IDENTITY se han creado automáticamente:

    SELECT * FROM PACIENTE

    De esta forma ese campo lo bloquearía en la capa de presentación (al momento de hacer una inserción) ya que el sistema lo crearía automáticamente.


    Pero quizás ese campo es un VARCHAR, es decir IDPACIENTE almacena un conjunto de caracteres, por ejemplo el número de DNI, en tal caso ponle el COSTRAINT UNIQUE para que sea irrepetible.
    Por ejemplo en esta tabla IDPACIENTE no es el primary key (pk), el pk es la columna ID (es un surrogate key), pero IDPACIENTE es irrepetible gracias al constraint:

    CREATE TABLE PACIENTE
    (
    ID INT IDENTITY(1,1) NOT NULL,
    IDAPACIENTE VARCHAR(10) NOT NULL,
    NOMBRE VARCHAR(100) NOT NULL
    )
    GO
    ALTER TABLE PACIENTE ADD CONSTRAINT PK_PACIENTE_ID PRIMARY KEY (ID)
    GO
    ALTER TABLE PACIENTE ADD CONSTRAINT UNQ_PACIENTE_IDPACIENTE UNIQUE (IDPACIENTE)
    GO

    Ojo que no puedes INSERTAR en un campo IDENTITY, obtendrías un error. En un campo UNIQUE sí puedes(tienes que ) insertar, pero el valor no debe repetirse de lo contrario obtendrías un error:
    INSERT INTO PACIENTE (IDPACIENTE, NOMBRE)
    VALUES('9876543210','Juan Perez')
    INSERT INTO PACIENTE (IDPACIENTE, NOMBRE)
    VALUES('9876543210','Ana Perez')

    El segundo no se insertará, el servidor te mostrará un error. En tu caso es lo que deberías hacer. Ahora bien, si lo que quieres es evitar que el sist. te dé un error, entonces primero consulta, si ya está no inserta y muestra un mensaje, si está que inserte.

    ...
     
  3. PEPE LUCHO

    PEPE LUCHO Suspendido

    Registro:
    27 Ago 2015
    Mensajes:
    2,035
    Likes:
    444
    Ya te dieron la respuesta....
     
  4. josebaperu

    josebaperu Miembro nuevo

    Registro:
    10 Jun 2016
    Mensajes:
    5
    Likes:
    0
    Cuando te refieres en el boton guardar, imagino que es un JButton y estas trabajando con swing, si es asi en el metodo ActionPerformed del listener antes de hacer la insercion ,haz un comprobacion que lea el valor del textfield donde esta el id y haga un "select count * from IDTABLES where IDENTITY =xyz " si retorna mas de 1, entonces creas un pop up JOption Pane diciendo q ya existe el id y si retorna cero guardas al paciente.. Ojala sirva