Todas las cosas participan de todo, mientras que la inteligencia es infinita y se gobierna a sí misma y no está mezclada con nada. ( Anaxágoras - 500 A.C.-428 A.C.. Filósofo griego responsable de introducir la noción de nous (en griego 'pensamiento' o 'razón') en la filosof)
Publicado el Jueves 06 de marzo de 2008 a las 08:51:46 por mauriciomoo
Lecturas
En este mini tutorial intentaré explicar la manera en conectar nuestra aplicación hecha en JAVA con la Base de Datos de PostgreSQL.
Primero, es necesario descargarse el JDBC Driver para PostgreSQL. Este se encuentra en la página http://jdbc.postgresql.org/index.html Obviamente, será necesario contar con nuestra Base de Datos funcionando para realizar las consultas necesarias.
Posteriormente hay que determinar la manera de agregar este Driver a nuestro proyecto. NetBeans ofrece una manera mas que sencilla.
Conociendo la ubicación de nuestro Driver y con el proyecto abierto, en el Panel de Proyectos, ubicamos en el Árbol de Proyecto la opción Libraries, clic Derecho en ella y seleccionamos Add JAR / Folder..., de esta manera estaremos agregando ej .JAR del Driver que descargamos. Esto nos crea en nuestro proyecto una carpeta llamada "dist" y en ella otra de nombre "lib" donde esta nuestro Driver.
Ahora, teniendo lo necesario, podemos probar nuestra conexión con PostgreSQL y realizar lo que nos concierne, Altas, Bajas y Modificaciones a nuestras tablas.
Para empezar, debemos de importar lo siguiente:
import java.sql.*;
Cabe mencionar que hay una gran diferencia entre Select y Update, Insert o Delete, ya que no se aplican de igual manera. A continuación muestro el proceso para realizar un Select (en idioma geek, vamos a selectear)
public class Main{ public static void main(String[] args){
/*Variable para almacenar la URL de conexión a nuestra Base de Datos, si esta estuviera en otra máquina, necesitariamos estar registrados en ella y contar con su IP*/ String url = "jdbc:postgresql://localhost/moo";
try{
//Acceso al Driver Class.forName("org.postgresql.Driver");
//La conexión con los parámetros necesarios Connection con = DriverManager.getConnection( url,"postgres","postgres");
//Abrimos la conexión y la iniciamos Statement stmt = con.createStatement();
/*Un ResultSet es como en .NET un DataSet, un arreglo temporal donde se almacenará el resultado de la consulta SQL*/ ResultSet rs;
//Una variable String para almacenar la sentencia SQL String query = "select id as ID from moo.usuarios";
//En el ResultSet guardamos el resultado de ejecutar la consulta rs = stmt.executeQuery(query);
//En un ciclo while recorremos cada fila del resultado de nuestro Select while ( rs.next()){
/*Aqui practicamente podemos hacer lo que deseemos con el resultado, en mi caso solo lo mande a imprimir*/ System.out.println(rs.getString("ID") + " " + rs.getString("ID")); }
//Cerramos la conexión stmt.execute("END"); stmt.close(); con.close(); } catch( Exception e ){
//Por si ocurre un error System.out.println(e.getMessage()); e.printStackTrace(); } } }
Para realizar todo aquello diferente a un Select, utilzaremos lo siguiente:
/*Variable para almacenar la URL de conexión a nuestra Base de Datos, si esta estuviera en otra máquina, necesitariamos estar registrados en ella y contar con su IP*/ String url = "jdbc:postgresql://localhost/moo";
try{
//Acceso al Driver Class.forName("org.postgresql.Driver");
//La conexión con los parámetros necesarios Connection con = DriverManager.getConnection( url,"postgres","postgres");
//Abrimos la conexión y la iniciamos Statement stmt = con.createStatement();
//Una variable String para almacenar la sentencia SQL String query = "update moo.usuarios set nombre = 'Mauricio' where id = '1'";
//Ejecutamos la consulta SQL stmt.executeQuery(query);
//Cerramos la conexión stmt.execute("END"); stmt.close(); con.close(); } catch( Exception e ){
//Por si ocurre un error System.out.println(e.getMessage()); e.printStackTrace(); }
Es muy importante tener en cuenta que si este método lo utilizas en una función para hacerla llamar cuando lo necesites, y quieras enviarle tanto argumentos como retornar resultados, en la función de Select las líneas siguientes NO deben de estar presentes:
stmt.execute("END"); stmt.close();
Y en la parte de Update, Insert o Delete, solo la siguiente línea:
hola, soy nueva en manejo de bases de datos y en programacion con java,tengo que realizar un programa en java con interfaces graficas para administrar la base de datos y no se como hacerlo si me puedes ayudar te lo agradeceria mucho
// La conexión con los parámetros necesarios
Connection con = DriverManager.getConnection( url,"usuario","contraseña");
// Abrimos la conexión y la iniciamos
Statement stmt = con.createStatement();
// Una variable String para almacenar la sentencia SQL
String query = "insert into dominios (iddom, dominio, transporte) values ("+variddom+",'"+vardominio+"','"+vartransporte+"');";
// Ejecutamos la consulta SQL
stmt.executeQuery(query);
// Cerramos la conexión
//stmt.execute("END");
stmt.close();
con.close();
}
catch( Exception a ){
// Por si ocurre un error
//System.out.println(a.getMessage());
//a.printStackTrace();
}
si quito las lineas de imprimir los fallos es cuando unico funciona
La consulta no retornó ningún resultado.
org.postgresql.util.PSQLException: La consulta no retornó ningún resultado.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:236)
at Insercion.insercion$1.actionPerformed(insercion.java:168)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:5517)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
at java.awt.Component.processEvent(Component.java:5282)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3984)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1791)
at java.awt.Component.dispatchEvent(Component.java:3819)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Que lineas hay que usar para el insert porque al final del doc no me queda muy claro y he probado distintas formas y nada... Por cierto el codigo esta todo metido dentro de un ACTIONPERFORMED()
Hola... no te preocupes... en lo que te pueda ayudar con todo gusto. Al final, aprendemos todos. Intenta lo siguiente:
//stmt.execute("END");
stmt.close();
con.close();
Solo en consultas SQL tipo Insert, Update o Delete. La idea es comentar la primer linea y cerrar el stament y la conexion. Esto con el fin de que puedas mas adelante puedas volver a utilizarlos otra vez, una vez cerrados, son reciclables, pero si no los cierras, cuando los quieras usar tronará.
SOLUCIONADO!!!!
Era porque en el eclipse m falto añadir el archivo JAR para que detectara el driver :S pensaba k al acerlo con el sql explorer el ya iba a pillarloo ...
eiiii... m salta un errorazo en eclipse y tengo todo eso tal y como esta ahi.. estoy tratando de acer un select y la verda knose k son los fallos xk intento acceder a los fallos.. y nose k es.. m compila y todo... lo k los errores nose de k son :S
Me da k es algo del driver.. pero m conecta perfectamente por el sql explorer.
ahi van los errores.. si sabrian decirmee... se lo agradezco
org.postgresql.Driver
java.lang.ClassNotFoundException: org.postgresql.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at pruebaconsulta.main(pruebaconsulta.java:20)
A mi parecer el error que te marca es con respecto al driver. Revisa bien la ruta donde se encuentra, en la carpeta en que debería estar. Prueba colocarlo en las carpetas dist/lib. Ignoro acerca si con el eclipse se podra agregar el driver de igual manera que en NeatBeans, pero debe de existir su modo. Seguiremos investigando... cualquier detalle ojala lo podamos compartir.
ejeje acias por contestar tan pronto.... voy a probar eso.. que tenia la impresion de que fuera eso.. xk justamente salta el fallo cuando ace la llamada al driver al principio de todo.. probare a poner el driver ahi..xk no lo e puesto ahi.. :S muchas aciassss por la pronta respuesta
eiii gracias por la info... andaba buscando ahi mas o menos entender como se acia el asunto y la verda que ta super bien explikao.. y encima ya sabia como acerl en Net y ace time lo intente conectar con access pa aprender... es una chorrada conectarlo una ves lo entiendes.. el rollo esta en tener k poner el driver para el dichosoo puente... seria mas facil no tener k usarlo.. pero wenoo no esta nada mal...mu wena explikacion y wena comparacion con Net para el k ya sepa Net
Asi Danke... una vez entendido como realizar conexiones, la situacion se vuelve mas fácil. A veces, es en donde uno mas se tarda, sobre todo en un lenguaje en el que apenas estas entrando. Y estoy de acuerdo contigo con respecto al driver... siempre he creido que es mucho rollo para poder consultar una base de datos en cualquier lenguaje, pero en cada versión, dicho proceso se vuelve cada vez mas fácil, sobre todo con el uso de los DataSet en .NET y los ResultSet en Java, o incluso los pg_ de PHP. Saludos y gracias