Como crear el Codigo automatico y secuencial

2,285 views
Skip to first unread message

Dedalux

unread,
Jun 21, 2011, 10:50:56 AM6/21/11
to JavaSOS
Necesito generar un cogido unico y secuencial para identificar codigo
primario de la Bse de datos

tengo los siguientes datos

codUsr
nombreUsr
Gerencia
telefono
etc....

y necesito generar el codigo automatico

100
101
102
103......n

como codigico esto en Java, es para una aplicacion web

pablo.a....@gmail.com

unread,
Jun 22, 2011, 10:24:20 AM6/22/11
to jav...@googlegroups.com
Si lo estás guardando en una base de datos, dejá que la base de datos lo haga por vos. Hibernate lo maneja solo, pero si no estás usando hibernate tendrías que ver según la base de datos:

MySQL y MSSQL Server: Autoincrement
Oracle: Secuencias

Espero que te sirva.
Saludos.

2011/6/21 Dedalux <cant...@gmail.com>

--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.

Pablo Codeiro

unread,
Jun 22, 2011, 12:41:09 PM6/22/11
to jav...@googlegroups.com
Que base de datos utilizas, y que framework para db?

Si usas oracle, deberias de crear una secuencia.
Si usas otra base de datos, es muy probable que tenga un campo "autonumerico" o algo similar.
Ambas soluciones serían resueltas en la base de datos, y no en el codigo de java.

Es poco recomendable hacer ese codigo via java, ya que podrías tener problemas de condición de carrera, asi que tendrías que usar semaforos, asumiendo que solo una aplicación accede a la DB. Te recomiendo que NO lo hagas via java, ya que en realidad eso es responsabilidad de la base de datos... (ademas, es mas facil, mantenible, y feliz :P)



JuAnDrEs

unread,
Jun 23, 2011, 1:28:14 PM6/23/11
to JavaSOS
Una de las formas de como podrías obtener un número secuencial para
luego usar como clave primaria en una aplicación es usando
sencuenciadores. Un secuenciador (sequence) es un objeto que permite
generar números secuenciales de forma tal que cada vez que "consultas"
el secuenciador te devuelve un nuevo número.
No se que base de dato estarás utilizando, pero en oracle, la
sentencia para crear un sequence es la siguiente:

CREATE SEQUENCE vendedor_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;

Al correr esta sentencia, te creará en la base de datos una objeto del
tipo sequence el cual generará números que comenzarán en 1 y que se
incrementarán de a una unidad.

Luego, en el código java, cuando quieras usar dicho valor (por ejemplo
en un insert) harías lo siguiente:

INSERT INTO vendedor (vendedor_id, nombre)
VALUES (vendedor_seq.nextval, 'Juan Perez');

Una forma de generar el número de antemano en lugar de mandarlo en el
insert es:

SELECT vendedor_seq.nextval
FROM dual

con lo cual, si quisieras (vaya a saber por que motivo) podrías
primero hacer una query para generar el id y luego mandar ese id en la
sentencia del insert

donde dual es una "tabla imaginaria" que provee Oracle para hacer
consultas y la cual siempre devuelve una sola fila.

Si usas MySql, podes directamente definir la columna correspondiente
al id como de tipo auto incremental, de forma tal que en cada nuevo
insert le asigne un nuevo id.
Sería mas o menos asi:


CREATE TABLE vendedor
(
vendedor_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (vendedor_id),
nombre VARCHAR(30) NOT NULL
);

INSERT INTO vendedor (vendedor_id,nombre) VALUES (NULL,'Juan Perez');


Espero te sirva de ayuda.

Saludos
Reply all
Reply to author
Forward
0 new messages