programa bajado de * @see Enlace: http://www.carpente.es/archivos/fic/opt/acs/jdbc.zip
import java.sql.*;
import oracle.jdbc.*;
/**
* Programa de muestra para enseñar el uso de JDBC con bases de datos oracle.
* <p>
* Compilar: $ javac -classpath .:ojdbc6.jar EjemploJDBC.java
*<p>
* Ejecutar: $ java -classpath .:ojdbc6.jar EjemploJDBC
* <p>
* @author Adrián Carpente Recouso
* @see Enlace: http://www.carpente.es/archivos/fic/opt/acs/jdbc.zip
* En el siguiente en enlace podéis descargaros la presentacion vista en clase sobre JDBC.
* @version Versión 1.0 - 16 Marzo del 2011
*/
public class EjemploJDBC
{
//Datos para el acceso a la base de datos
static String HOST = "X.X.X.X";
static int PUERTO = 1521;
static String SID = "Nombre";
static String USUARIO = "usuario";
static String CONTRASENA = "contraseña";
/**
* Método con el cual se cargan los divers de Oracle que hay en el fichero ojdbc6.jar.
* En caso de no poder cargar los drivers se muestra por pantalla el motivo y
* se detiene el programa.
*/
public static void cargarDriver()
{
try
{
//Cargarmos los drivers para manejar la base de datos.
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
}
catch(ClassNotFoundException e)
{
System.err.println("Drivers de Oracle no encontrados: " + e.getMessage());
System.exit(0);
}
catch(IllegalAccessException e)
{
System.err.println("Acceso no permitido a los drivers de Oracle: " + e.getMessage());
System.exit(0);
}
catch(InstantiationException e)
{
System.err.println("No se ha podido instanciar los drivers de Oracle: " + e.getMessage());
System.exit(0);
}
catch(Exception e)
{
System.err.println("Error cargando los drivers de oracle: " + e.getMessage());
System.exit(0);
}
}
/**
* Método que inicial la coñexión en la base de datos Oracle.
* @param usuario Usuario de la base de datos. En las cuentas de la
* FIC es \"login\"
* @param constrasena Contraseña de la base de datos. En las cuentas de la
* FIC es tu DNI.
* @param host Dominio o IP del servidor de base de datos. En la FIC es xurxo,
* en caso de no funcionar probar con xurxo.cc.fic.udc.es
* @param puerto Puerto en el que está escuchando el servidor Oracle. En la
* FIC usan el 1521 que es el puerto por defecto de Oracle.
* @param sid Identificador de la instancia de la base de datos. Se puede
* obtener desde un terminal ejecutando: $ echo $ORACLE_SID Para la
* versión Oracle Database 10g Express el identificador es XE. En
* las cuentas que tenemos creadas en la FIC el SID es docenciadb.
* @return Una instancia de una conexión iniciada en la base de datos. Si se
* produce algún problema iniciando la conexión se muestra el error y
* devuelve null.
*/
public static Connection conexion(String usuario, String constrasena,
String host, int puerto, String sid)
{
try
{
//Iniciamos la conexión en la base de datos.
return DriverManager.getConnection("jdbc:oracle:thin:" + usuario + "/" + constrasena + "@" + host + ":" + puerto + ":" + sid);
}
catch(Exception e)
{
System.err.println("Error iniciado la conexión a la base de datos: " + e.getMessage());
return null;
}
}
/**
* Método principal en el que se ejecutan todas las consultas SQL.
*/
public static void main(String args[])
{
//Cargamos los driver para trabajar con la base de datos Oracle
cargarDriver();
Connection conexion = null; //Objeto para la conexión a la BD
Statement sentencia = null; //Objeto para la ejecutar una sentencia SQL
PreparedStatement sentenciaP = null; //Objeto para crear sentencias parametrizables y reusables
ResultSet resultado = null;//Objeto para guardar los resultados de las sentencis
try
{
//Iniciamos la conexión en la base de datos
conexion = conexion(USUARIO, CONTRASENA, HOST, PUERTO, SID);
//*********** EJEMPLO DE CONSULTA SQL SENCILLA ************************//
System.out.println("SELECT ename, job, sal\n" +
"FROM emp\n" +
"ORDER BY ename;\n");
//Obtenemos una instancia de Statement con la que enviaremos instrucciones SQL a la base de datos.
sentencia = conexion.createStatement();
//creamos y ejecutamos una consulta SQL
resultado = sentencia.executeQuery("SELECT ename, job, sal " +
"FROM emp " +
"ORDER BY ename");
//Mostramos los resultados de la consulta
System.out.println("Nombre \tTrabajo \tSueldo");
while(resultado.next())
{
System.out.println(resultado.getString("ename") + " \t" +
resultado.getString("job") + " \t" +
resultado.getInt("sal"));
}
//*********************************************************************//
//************ EJEMPLO DE CONSULTA SQL PREPARADA **********************//
System.out.println("------------------------------------------------\n\n" +
"SELECT ename, sal\n" +
"FROM emp\n" +
"WHERE sal > ? AND job = ?;\n");
//Creamos una sentencia de tipo PreparedStatement con la consulta SQL que queremos realizar
sentenciaP = conexion.prepareStatement("SELECT ename, sal " +
"FROM emp " +
"WHERE sal > ? AND job = ?");
//Asignamos los valores de los parámetros
System.out.println("Usando: sal > 1000 y job = CLERK");
sentenciaP.setInt(1, 1000); //El parámetro 1 es un entero con valor 1000
sentenciaP.setString(2, "CLERK"); //El parámetro 2 es una cadena con el valor "CLERK"
resultado = sentenciaP.executeQuery();
//Mostramos los resultados de la consulta
System.out.println("\nNombre \tSueldo");
while(resultado.next())
{
System.out.println(resultado.getString("ename") + " \t" +
resultado.getString("sal"));
}
//----- Reutilizamos la misma consulta con otros valores de los parámetros --------//
//Asignamos los nuevos valores de los parámetros
System.out.println("\nUsando: sal > 1300 y job = SALESMAN");
sentenciaP.setInt(1, 1300); //Aun que en este caso se han modificado
sentenciaP.setString(2, "SALESMAN"); //los 2 parámetros puede modificarse uno solo
//Ejecutamos la consutla con los nuevos valores de los parámetros
resultado = sentenciaP.executeQuery();
//Mostramos los resultados de la consulta
System.out.println("\nNombre \tSueldo");
while(resultado.next())
{
System.out.println(resultado.getString("ename") + " \t" +
resultado.getString("sal"));
}
//*********************************************************************//
//*********** EJEMPLO DE CREACION DE UNA TABLA **********************//
System.out.println("------------------------------------------------\n\n" +
"CREATE TABLE personas (\n" +
"dni VARCHAR(9) NOT NULL,\n" +
"nombre VARCHAR(10) NOT NULL,\n" +
"fecha_nacimiento DATE NOT NULL,\n" +
"sueldo INT DEFAULT 0,\n" +
"CONSTRAINT clave_p_persona PRIMARY KEY (dni));\n");
//Obtenemos una instancia de Statement con la que enviaremos instrucciones SQL a la base de datos.
sentencia = conexion.createStatement();
//Creamos la nueva tabla
sentencia.executeUpdate("CREATE TABLE personas ( " +
"dni VARCHAR(9) NOT NULL, " +
"nombre VARCHAR(10) NOT NULL, " +
"fecha_nacimiento DATE NOT NULL, " +
"sueldo INT DEFAULT 0, " +
"CONSTRAINT clave_p_persona PRIMARY KEY (dni))");
System.out.println("Tabla personas creada correctamente");
//*********************************************************************//
//*********** EJEMPLO DE INSERCION DE DATOS **********************//
System.out.println("------------------------------------------------\n\n" +
"INSERT INTO personas (dni, nombre, fecha_nacimiento, sueldo)\n" +
"VALUES('12345678A', 'Jose', TO_DATE('17/01/1989','dd/mm/yyyy'), 1200);\n");
//Obtenemos una instancia de Statement con la que enviaremos instrucciones SQL a la base de datos.
sentencia = conexion.createStatement();
//Insertamos los datos en la tabla
int filasInsertadas = sentencia.executeUpdate("INSERT INTO personas (dni, nombre, fecha_nacimiento, sueldo) " +
"VALUES('12345678A', 'Jose', TO_DATE('17/01/1989','dd/mm/yyyy'), 1200)");
if(filasInsertadas == 1)
System.out.println("Se han insertado " + filasInsertadas + " fila.");
else
throw new SQLException("Error insertando datos en la tabla personas.");
//*********************************************************************//
//*********** EJEMPLO DE CONSULTA SQL SENCILLA ************************//
System.out.println("------------------------------------------------\n\n" +
"SELECT dni, nombre, fecha_nacimiento, sueldo\n" +
"FROM personas;\n");
//Obtenemos una instancia de Statement con la que enviaremos instrucciones SQL a la base de datos.
sentencia = conexion.createStatement();
//creamos y ejecutamos una consulta SQL
resultado = sentencia.executeQuery("SELECT dni, nombre, fecha_nacimiento, sueldo " +
"FROM personas");
//Mostramos los resultados de la consulta
System.out.println("DNI \tNombre \tFecha nacimiento \tSueldo");
while(resultado.next())
{
System.out.println(resultado.getString("dni") + " " +
resultado.getString("nombre") + " \t" +
resultado.getDate("fecha_nacimiento") + "\t\t" +
resultado.getInt("sueldo"));
}
//*********************************************************************//
//*********** EJEMPLO DE ELIMINACION DE TABLAS **********************//
System.out.println("------------------------------------------------\n\n" +
"DROP TABLE personas;");
//Obtenemos una instancia de Statement con la que enviaremos instrucciones SQL a la base de datos.
sentencia = conexion.createStatement();
//Eliminamos la tabla
sentencia.executeUpdate("DROP TABLE personas");
System.out.println("Tabla personas eliminada correctamente");
//*********************************************************************//
//****** EJEMPLO DE VARIAS CONSULTAS EN LA MISMA TRANSACCION ********//
System.out.println("------------------------------------------------\n\n"
+ "INSERT INTO dept (deptno, dname, loc)\n"
+ "VALUES (50, 'Cálculo', 'A Coruña');\n\n"
+ "INSERT INTO emp\nVALUES (6655, 'Juan', 'PRESIDENT', NULL, "
+ "to_date('17/01/89','dd/mm/yy'), 5000, NULL, 50)\n");
boolean transaccionConfirmada = false;
try
{
//Desactivamos el modo autocommit
conexion.setAutoCommit(false);
//Obtenemos una instancia de Statement con la que enviaremos instrucciones SQL a la base de datos.
sentencia = conexion.createStatement();
//Añadimos un nuevo departamento a la tabla dept
sentencia.executeUpdate("INSERT INTO dept (deptno, dname, loc) " +
"VALUES (50, 'Cálculo', 'A Coruña')");
sentencia = conexion.createStatement();
//Añadimos un trabajador al nuevo departamento
sentencia.executeUpdate("INSERT INTO emp (ename, job, sal) " +
" VALUES ('Juan'" +
",'PRESIDENT',6655)");
//, NULL, "
// + "to_date('17/01/89','dd/mm/yy'), "
// + "5000, NULL, 50)");
//Confirmamos la transacción
conexion.commit();
transaccionConfirmada = true;
System.out.println("Departamento y empleado añadidos correctamente");
//Reestablecemso el modo autocommit
conexion.setAutoCommit(true);
}
finally
{
//si ha ocurrido algun problema deshacimos los cambios
if (!transaccionConfirmada)
{
conexion.rollback();
System.out.println("Ha ocurrido un problema.");
}
}
//*********************************************************************//
//****** ELIMINAMOS LO AÑADIDO EN LA TRANSACCION ANTERIOR ************//
System.out.println("------------------------------------------------\n\n" +
"DELETE FROM emp WHERE empno = 6655;\n"
+ "DELETE FROM dept WHERE deptno = 50;\n");
//Obtenemos una instancia de Statement con la que enviaremos instrucciones SQL a la base de datos.
sentencia = conexion.createStatement();
//Eliminamos el empleado a la tabla emp
// sentencia.executeUpdate("DELETE FROM emp WHERE empno = 6655");
//Obtenemos una instancia de Statement con la que enviaremos instrucciones SQL a la base de datos.
sentencia = conexion.createStatement();
//Elimanos el departamento de la tabla dept
sentencia.executeUpdate("DELETE FROM dept WHERE deptno = 50");
System.out.println("Departamento y empleado eliminados correctamente");
//*********************************************************************//
}
catch (Exception e)
{
System.err.println("Se produjo el siguiente error: " + e.getMessage());
}
finally
{
try
{
//Cerramos la conexión establecida con la base de datos
if(conexion != null)
{
conexion.close();
}
if (resultado != null)
{
resultado.close();
}
if (sentencia != null)
{
sentencia.close();
}
if (sentenciaP != null)
{
sentenciaP.close();
}
}
catch(SQLException e)
{
System.err.println("Error cerrando la sesión en la base de datos: " + e.getMessage());
}
}
}
}
1 comentario:
¡Muchas gracias por el post!
La verdad que llevaba un tiempo buscando porque me daba error al migrar de oracle 9 a 11 en las conexiones que no fueran por pool.
Y simplemente era que han cambiado la manera de conectarse con DriverManager.getConnection...
Publicar un comentario