Foros del Web » Programación para mayores de 30 ;) » Java »

Necesito ayuda.

Estas en el tema de Necesito ayuda. en el foro de Java en Foros del Web. Hola, necesito insertar datos de usuarios en un JTable y generar el código incrementando el del usuario anterior en lugar de meterlo a mano. Tengo ...
  #1 (permalink)  
Antiguo 13/10/2003, 12:46
 
Fecha de Ingreso: septiembre-2003
Mensajes: 142
Antigüedad: 21 años, 3 meses
Puntos: 0
Necesito ayuda.

Hola, necesito insertar datos de usuarios en un JTable y generar el código incrementando el del usuario anterior en lugar de meterlo a mano. Tengo el siguiente código:

void Guardar_actionPerformed(ActionEvent e) {
String url = "jdbc:odbc:BDORACLE";
Statement consulta = null;
ResultSet rs = null;
int codigo;
String nivel;
Statement stmt = null;
Connection con = null;
try {
//Carga del driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException ex) {
System.err.print("Error Clase No Existe : ");
System.err.println(ex.getMessage());
}
if (opcAlumno.isSelected())
nivel = "Alumno";
else
nivel = "Profesor";
try {
//Establecimiento de la conexión a la base de datos
con = DriverManager.getConnection(url, "scott", "tiger");
//Obtención del código de usuario
consulta = con.createStatement();
rs = consulta.executeQuery("SELECT MAX(CÓD_USUARIO) AS CODIGO FROM Usuarios");
codigo = rs.getInt("CODIGO") + 1;
//Consultas a la base de datos
stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO Usuarios VALUES" +
"(" + codigo + ", '"
+ jTextField2.getText() + "', '" + jTextField3.getText() +
"', '" + jTextField4.getText() + "', '" +
jPasswordField1.getText() + "', '" + jTextField6.getText() +
"', '" + jTextField7.getText() + "', '" +
nivel + "')");
//Cerrar la conexión
stmt.close();
rs.close();
con.close();
/*JOptionPane.showMessageDialog(this, "El usuario ha sido registrado correctamente",
"Alta de Usuarios", JOptionPane.INFORMATION_MESSAGE);*/
this.setVisible(false);
}
catch(SQLException exc) {
System.err.println("Error al ejecutar SQL en Dialogo1: " + exc.getMessage());
}
}


Pero me da el siguiente error y no consigo averiguar por qué es:

[Microsoft][Administrador de controladores ODBC] Estado del cursor no válido

¿Podría ayudarme alguien?
  #2 (permalink)  
Antiguo 13/10/2003, 13:21
Avatar de kripton  
Fecha de Ingreso: diciembre-2002
Ubicación: Zaragoza
Mensajes: 296
Antigüedad: 22 años
Puntos: 0
Hola ross_av!!!

Lo único raro que puede probocarte ese error es que no cierras el statement consulta, seguramenteo no puedas cerrar la conexión sin haber cerrado primero TODOS los Statement .

Por otro lado comentarte que es más seguro utilizar autoincrementables de la BD o en su defecto tablas contador que este método del select max...., ya que si muchas personas ejecutasen este código a la vez seguramente te tirará un error de primary key.

Suerte,
un saludete
kripton
__________________
Hoy por ti, mañana por mi. Compartiendo entre amigos.

Usuario Registrado Linux #327495

Última edición por kripton; 13/10/2003 a las 13:25
  #3 (permalink)  
Antiguo 14/10/2003, 10:33
 
Fecha de Ingreso: septiembre-2003
Mensajes: 142
Antigüedad: 21 años, 3 meses
Puntos: 0
¿Puedes decirme cómo va eso de los autoincrementables? Es que nunca lo había oido es Oracle y pongo lo siguiente que he encontrado pero me da error.

CREATE TABLE Usuarios
(
CÓD_USUARIO NUMBER (4) NOT NULL AUTO_INCREMENT,
NOMBRE_USUARIO VARCHAR2 (15) NOT NULL,
APELLIDOS_USUARIO VARCHAR2 (25) NOT NULL,
LOGIN VARCHAR2 (15) NOT NULL,
PASSWORD VARCHAR2 (15) NOT NULL,
DNI VARCHAR2 (9) NOT NULL,
CORREO VARCHAR2 (30) NOT NULL,
NIVEL VARCHAR2 (10) CONSTRAINT CH_Usuarios CHECK (NIVEL IN ('Alumno', 'Profesor')),
CONSTRAINT PK_Usuarios PRIMARY KEY (CÓD_USUARIO)
);

Muchas gracias.
  #4 (permalink)  
Antiguo 14/10/2003, 11:26
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 2 meses
Puntos: 51
Hola,
1.- Puede ser que el error que te da sea por que creas la sentencia "stmt" antes de haber cerrado la sentencia "consulta" y su ResultSet "rs".
2.- Te seria mucho mas sencillo de escribir y depurar la sentencia "stmt" si utilizaras un PreparedStatement, ya que te evitarias concatenar tantas cadenas.
3.- Si accedes a una base de datos Oracle... ¿Por que no usas el driver JDBC de Oracle? El driver JDBC-ODBC esta totalmente "desrecomendado" por la propia Sun para nada mas alla de un HelloWorld.
4.- Los campos autoincrementables en las tablas no existen en Oracle. Para imitarlos se usan las secuencias y un campo numérico. Busca "sequence" en cualquier buen manual de Oracle y encontraras ejemplos. Ten en cuenta que esta solucion no es portable y no funcionara en otras BDD
5.- A la hora de solicitar ayuda, si copias un trozo de la StackTrace (al menos las 2-3 primeras lineas) conseguiras que te ayuden antes y mas certeramente.
Saludos
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:58.