Como se añaden un registro en jdbc?

RaulC
09 de Diciembre del 2003
Hola, estoy trabajando con una bd de access e intento añadir un nuevo registro pero me da error de excepecion sql, la sentencia que he utilizado es esta

"Insert into persona (Dni, Nombre, Apellido) values (1,'raul','yo');"

me podeis decir que hago mal? muchas gracias

Heihachi
09 de Diciembre del 2003
No puedes dar más pistas?
El texto de la excepción SQL?

Por lo que veo, tienes el DNI como numérico y si no ese es el fallo (si no es numérico sera [...] VALUES ('1','raul','tu')[...])

De todos modos los DNI no son numéricos.

Saludos!

RaulC
09 de Diciembre del 2003
import java.net.URL;
import java.sql.*;

class Bases {

public static void main (String args[]) {
//se le pasa el enlace ODBC creado a la base de datos
String url = "jdbc:odbc:Basededatos";
//sentencia SQL que queramos realizar en la Base de Datos
String query = "SELECT * FROM Persona order by Nombre";
String query2 = "INSERT INTO Persona(DNI,Nombre,Apellido,Direccion) values (6,'Alvara','Velasca','chupa-chups')";
//String query = "Create table RAUL_GUAPO(ESGUAPO float ,nombre varchar(20))" ;

try {

// se carga el jdbc-odbc bridge driver
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");

//con esta linea que sigue mostrara todo lo que hace al cargar los
//drivers
//DriverManager.setLogStream(System.out);

// Intento de conectar al driver. Cada uno
// de los drivers serán ejecutados hasta
// que uno pueda procesar en esta URL

Connection con = DriverManager.getConnection (url);

// Si no podemos conectar se realizara un Excepción
// si no es asi se podrá conectar satisfactoriamente

// Chequeamos y vemos por pantalla los warnings generados
// por la conexion.

checkForWarning (con.getWarnings ());

// cogemos el objeto DatabaseMetaData y mostramos
// informacion de la conexion

DatabaseMetaData dma = con.getMetaData ();

System.out.println("nConnected to " + dma.getURL());
System.out.println("Driver " +
dma.getDriverName());
System.out.println("Version " +
dma.getDriverVersion());
System.out.println("");

// creamos un objeto Statement para poder enviar
// instrucciones SQL al driver

Statement stmt = con.createStatement ();

// enviamos una peticion, creando un objeto ResulSet

ResultSet rs = stmt.executeQuery (query);

// Mostramos todas las columnas y filas

dispResultSet (rs);

// cerramos el ResultSet

ResultSet rs2 = stmt.executeQuery (query2);

rs.close();
rs2.close();

// cerramos el statement

stmt.close();

// cerramos la conexion

con.close();
}
catch (SQLException ex) {

// Una SQLException es generada y mostrado el error
// podria haber multiples objetos de error


System.out.println ("n*** SQLException caught ***n");

/*while (ex != null) {
System.out.println ("SQLState: " +
ex.getSQLState ());
System.out.println ("Message: " + ex.getMessage ());
System.out.println ("Vendor: " +
ex.getErrorCode ());
ex = ex.getNextException ();
System.out.println ("");
}*/
}
catch (java.lang.Exception ex) {

// Para cualquier otro tipo de error

ex.printStackTrace ();
}
}

esto es un ejemplo que me baje de internet, y que estoy intentando modificar para ir aprendiendo yo por mi cuenta, por eso tengo los DNI como numericos y tengo tanto comentario, si me pudieras ayudar te lo agradeceria

RaulC
09 de Diciembre del 2003
SQLState : null
Message: No ResultSet was produced
Vendor: 0

este es el error que me da
gracias!

Heihachi
09 de Diciembre del 2003
Las sentencias que no producen ResultSet (INSERT, UPDATE, CREATE TABLE,...)

se ejecutan con executeUpdate(query2);

y devuelven un int con el numero de filas afectadas o algo así

Has hecho un INSERT con un executeQuery

Saludos!

RaulC
09 de Diciembre del 2003
muchas gracias!