statement preparedstatement prepared metodo java mysql prepared-statement mysql-connector

java - metodo preparedstatement



Insertar utilizando PreparedStatement. ¿Cómo hago un incremento automático de la ID? (3)

Tengo una declaración preparada como:

PreparedStatement preparedStatement = connect.prepareStatement("INSERT into employee (id, time, name" + "(?,?,?)",Statement.RETURN_GENERATED_KEYS); ResultSet tableKeys = preparedStatement.getGeneratedKeys(); preparedStatement.executeUpdate(); tableKeys.next(); int autoGeneratedID = tableKeys.getInt(1); preparedStatement.setInt(1,autoGeneratedID); preparedStatement.setTimestamp(2, new java.sql.Timestamp(new java.util.Date().getTime())); preparedStatement.setString(3, "Test"); preparedStatement.executeUpdate();

Como puede ver, la tabla Empleado tiene una ID auto-incrementada. Básicamente, necesito agregarlo automáticamente utilizando prepareStatement. ¿Alguien puede decirme dónde me voy mal y corregirme? En este momento solo me da un error relacionado con el estado de cuenta.


Debe realizar algunas modificaciones (definir una declaración por default ) en una cadena de instrucciones preparada como esta:

"INSERT into employee VALUES(default,?,?)"

Esa modificación se debe a que ocurre este problema: el recuento de columnas no coincide con el recuento de valores en la fila 1 JAVA mysql

Después de eso tu código es algo como abajo:

PreparedStatement preparedStatement = connect.prepareStatement("INSERT into employee VALUES (default,?,?)", Statement.RETURN_GENERATED_KEYS); preparedStatement.setTimestamp(1, new java.sql.Timestamp(new java.util.Date().getTime())); preparedStatement.setString(2, "Test"); preparedStatement.executeUpdate(); ResultSet tableKeys = preparedStatement.getGeneratedKeys(); tableKeys.next();

Gracias a por su respuesta.


Deje la columna fuera de la INSERT completo . Será generado por el motor de la base de datos. Su consulta debe ser:

INSERT INTO employee (time, name) VALUES (?, ?)

En segundo lugar, primero debe realizar la inserción y luego obtener las claves del resultado.

Creo que tu código debería ser:

PreparedStatement preparedStatement = connect.prepareStatement("INSERT into employee (time, name) VALUES (?,?)", Statement.RETURN_GENERATED_KEYS); preparedStatement.setTimestamp(1, new java.sql.Timestamp(new java.util.Date().getTime())); preparedStatement.setString(2, "Test"); preparedStatement.executeUpdate(); ResultSet tableKeys = preparedStatement.getGeneratedKeys(); tableKeys.next(); int autoGeneratedID = tableKeys.getInt(1);

Tenga en cuenta que este ejemplo no comprueba el éxito de la sentencia ejecutada o la existencia de claves devueltas.


try{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","password"); PreparedStatement ps = con.prepareStatement("insert into imgslider(id,cmnt,date1,img,status) values(seq.nextval,?,?,?,?)"); ResultSet rs = null; String s1 = "I’ve Come and I’m Gone: A Tribute to Istanbul’s Street"; ps.setString(1,s1); Calendar calendar = Calendar.getInstance(); java.sql.Date dd = new java.sql.Date(calendar.getTime().getTime()); ps.setDate(2,dd); FileInputStream f1 = new FileInputStream("F://java//slide-9.jpg"); ps.setBinaryStream(3,f1,f1.available()); ps.setInt(4,0); int i = ps.executeUpdate(); System.out.println(i+" rows affected"); con.close(); }

Aquí está mi código para la columna de incremento automático en la tabla por PreparedStatement.