jueves, 27 de septiembre de 2007

Conectar Java con MySQL

Hoy vamos a ver como podemos crear un aplicativo en java que se conecte a una base de datos MySQL y nos cargue unos datos en una interfaz gráfica sencilla.



Para este ejercicio se ha creado una base de datos llamada clase que tiene tres tablas: estudiante, asignatura y nota; para la creación de estas tablas ejecutamos este script de la base de datos.

CREATE DATABASE `clase`;

CREATE TABLE `asignatura` (
`asi_codigo` varchar(6) NOT NULL,
`asi_nombre` varchar(60) NOT NULL,
PRIMARY KEY (`asi_codigo`)
);

INSERT INTO `asignatura` VALUES('201502','Algebra'),
('201501','Matemáticas'),
('301502','Programación orientada a objetos'),
('301501','Programación básica');

CREATE TABLE `estudiante` (
`est_codigo` varchar(11) NOT NULL,
`est_nombre` varchar(100) NOT NULL,
PRIMARY KEY (`est_codigo`)
);

INSERT INTO `estudiante` VALUES ('2007202004','Alvarez Juan Jose'),
('2007202003','Espitia Maldonado Ana Julieth'),
('2007202002','Mendez Maria'),
('2007202001','Diaz Perez Juan Diego'),
('2007202007','Olguin Ricaute Manuel'),
('2007202006','Miranda Perez Juan'),
('2007202005','Triana Maria');

CREATE TABLE `nota` (
`est_codigo` varchar(11) NOT NULL,
`asi_codigo` varchar(6) NOT NULL,
`nota` double NOT NULL,
PRIMARY KEY (`est_codigo`,`asi_codigo`)
);

INSERT INTO `nota` VALUES('2007202001','201502',5),
('2007202002','201502',4.3),
('2007202003','201502',2.3),
('2007202004','201502',3.3),
('2007202001','201501',4),
('2007202002','201501',2.8),
('2007202003','201501',1.5),
('2007202004','201501',4.3),
('2007202001','301502',2.2),

('2007202002','301502',4.5),
('2007202003','301502',1.9),
('2007202004','301502',4.3),
('2007202001','301501',4.9),
('2007202002','301501',5),
('2007202003','301501',4.3),
('2007202004','301501',4);


Una ves que tenemos la base de datos creada, creamos un nuevo proyecto en eclipse, una ves creado el proyecto hacemos click derecho con el ratón sobre el nombre del proyecto y seleccionamos la opción de propiedades, en esta ventana seleccionamos la opción de "Java Build Path" y en esta la pestaña "Libraries", dentro de esta hacemos click sobre el botón "Add External Jars..." y buscamos el mysql-conector-java que podemos descargar de la pagina de MySQL, y hacemos click en aceptar.

Este .jar es el que nos va permitir conectarnos con mysql y hacer consultas a la base de datos.

Después de haber asociado el conectorJ al proyecto creamos dos paquetes para separar el acceso a datos con la interfaz gráfica de usuario, en mi caso he llamados a estos paquetes así:

  • co.madesoft.db para el acceso a datos
  • co.madesoft.gui para la interfaz gráfica de usuario
en el primero creamos las siguientes clases:

DbConnection para la conexion con la base de datos


package co.madesoft.db;

import java.sql.*;
/**
* Clase que permite conectar con la base de datos
* @author alejo
*/
public class DbConnection {
static String bd = "clase";
static String login = "root";
static String password = "";
static String url = "jdbc:mysql://localhost/"+bd;

Connection conn = null;

/** Constructor de DbConnection */
public DbConnection() {
try{
//obtenemos el driver de para mysql
Class.forName("com.mysql.jdbc.Driver");
//obtenemos la conexión
conn = DriverManager.getConnection(url,login,password);
if (conn!=null){
System.out.println("Conección a base de datos "+bd+" OK");
}
}catch(SQLException e){
System.out.println(e);
}catch(ClassNotFoundException e){
System.out.println(e);
}
}
/**Permite retornar la conexión*/
public Connection getConnection(){
return conn;
}

public void desconectar(){
conn = null;
}

}



DbEstudiante para la manipulación de la tabla estudiante


package co.madesoft.db;

import java.sql.*;

public class DbEstudiante {
DbConnection cn;

/** Constructor de DbUser */
public DbEstudiante() {
cn = new DbConnection();
}

/** Obtiene las notas de un estudiante por su codigo */
public Object[][] getNotasByEstudiante(String cod){
int registros = 0;

try{
Statement stm = cn.getConnection().createStatement();
PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT count(1) as cont" +
" FROM asignatura a " +
" inner join nota n on a.asi_codigo = n.asi_codigo" +
" where n.est_codigo = ? ");

pstm.setString(1, cod);
ResultSet res = pstm.executeQuery();

res.next();
registros = res.getInt("cont");
res.close();
}catch(SQLException e){
System.out.println(e);
}

Object [][] data = new Object[registros][5];
try{
Statement stm = cn.getConnection().createStatement();
PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT n.asi_codigo, " +
" a.asi_nombre, " +
" n.nota " +
" FROM asignatura a " +
" inner join nota n on a.asi_codigo = n.asi_codigo " +
" where n.est_codigo = ? order by n.asi_codigo ");

pstm.setString(1, cod);
ResultSet res = pstm.executeQuery();
int i = 0;
while(res.next()){
String asiCodigo = res.getString("asi_codigo");
String asiNombre = res.getString("asi_nombre");
Double asiNota = res.getDouble("nota");

data[i][0] = asiCodigo;
data[i][1] = asiNombre;
data[i][2] = asiNota;
i++;
}
res.close();
}catch(SQLException e){
System.out.println(e);
}
return data;
}
/** trae todos los estudiantes */
public Object[][] getEstudiantes(){
int registros = 0;
try{
Statement stm = cn.getConnection().createStatement();
PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT count(1) as cont" +
" FROM estudiante ");

ResultSet res = pstm.executeQuery();
res.next();
registros = res.getInt("cont");
res.close();
}catch(SQLException e){
System.out.println(e);
}

Object [][] data = new Object[registros][5];
try{
Statement stm = cn.getConnection().createStatement();
PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT est_codigo, " +
" est_nombre " +
" FROM estudiante " +
" ORDER BY est_codigo ");


ResultSet res = pstm.executeQuery();
int i = 0;
while(res.next()){
String estCodigo = res.getString("est_codigo");
String estNombre = res.getString("est_nombre");

data[i][0] = estCodigo;
data[i][1] = estNombre;
i++;
}
res.close();
}catch(SQLException e){
System.out.println(e);
}
return data;
}
}


En el segundo paquete creamos tan solo la clase que define la interfaz gráfica que nos muestra los datos retornados por los métodos de la clase anterior. Esta clase implemeta aparte de los elementos que se manejan comunmente en una intrefaz de usuario los siguientes elementos: JScrollPane, DefaultTableModel, JTable para los cuales se puede verificar el codigo y entender su uso o consultar cualquier tuorial de swing .


package co.madesoft.gui;

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;

import co.madesoft.db.*;

public class GuiEstudiante implements ActionListener {

JFrame frame;
JScrollPane spEstudiantes,spNotas;
DefaultTableModel dtmEstudiantes,dtmNotas;
JTable jtbEstudiantes,jtbNotas;
JPanel pnlEstudiantes;
JLabel lblCodigo,lblNombre;
JTextField txtCodigo,txtNombre;
Object[][] dtEstudiantes;
Object[][] dtNotas;
DbEstudiante us = new DbEstudiante();

int fila = -1;
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
GuiEstudiante g = new GuiEstudiante();
}

public GuiEstudiante(){
frame = new JFrame("Notas de estudiantes");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

dtEstudiantes = us.getEstudiantes();

String[] columNames = {"codigo","nombres"};
dtmEstudiantes= new DefaultTableModel(dtEstudiantes, columNames);

String[] columNamesNotas = {"codigo","asignatura","nota"};
dtmNotas = new DefaultTableModel(dtNotas,columNamesNotas);

jtbEstudiantes = new JTable(dtmEstudiantes);
jtbEstudiantes.setPreferredScrollableViewportSize(new Dimension(500, 120));

jtbNotas = new JTable(dtmNotas);
jtbNotas.setPreferredScrollableViewportSize(new Dimension(500,80));

spEstudiantes = new JScrollPane(jtbEstudiantes);
spNotas = new JScrollPane(jtbNotas);

lblCodigo = new JLabel("Codigo");
lblNombre = new JLabel("Nombre");

txtCodigo = new JTextField(10);
txtNombre = new JTextField(10);

pnlEstudiantes = new JPanel(new GridLayout(2,2));
pnlEstudiantes.add(lblCodigo);
pnlEstudiantes.add(txtCodigo);
pnlEstudiantes.add(lblNombre);
pnlEstudiantes.add(txtNombre);

jtbEstudiantes.addMouseListener(new MouseAdapter(){

public void mouseClicked(MouseEvent e){
fila = jtbEstudiantes.rowAtPoint(e.getPoint());
int columna = jtbEstudiantes.columnAtPoint(e.getPoint());
if ((fila > -1) && (columna > -1)){
txtCodigo.setText(String.valueOf(jtbEstudiantes.getValueAt(fila,0)));
txtNombre.setText(String.valueOf(jtbEstudiantes.getValueAt(fila,1)));

dtNotas = us.getNotasByEstudiante(String.valueOf(jtbEstudiantes.getValueAt(fila,0)));
int contRows = dtmNotas.getRowCount();
for(int i=0;i<contRows;i++){
dtmNotas.removeRow(0);
}
for(int i=0;i<dtNotas.length;i++){
Object[] newRow={dtNotas[i][0],dtNotas[i][1],dtNotas[i][2]};
dtmNotas.addRow(newRow);
}
}
}
});

frame.getContentPane().add(spEstudiantes,BorderLayout.NORTH);
frame.getContentPane().add(pnlEstudiantes,BorderLayout.CENTER);
frame.getContentPane().add(spNotas,BorderLayout.SOUTH);

frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(frame.getParent());
frame.setVisible(true);
}

public void limpiarCampos(){
txtCodigo.setText("");
txtNombre.setText("");
}

public void actionPerformed(ActionEvent e){
int resultado = -1;
}
}



Ya solo nos resta compilar y ejecutar y tendremos corriendo nuestro aplicativo que nos muestra una lista de estudiantes en una tabla y las notas de cada uno de ellos en otra segun seleccionemos un estudiante de la primera tabla.

168 comentarios:

Anónimo dijo...

Bueno y simple...
Me fue de mucha ayuda.

Gracias

Anónimo dijo...

Hola amigo, muy util la informacion, pero me queda una duda, si quiero pasar mi aplicacion en java a otra computadora ¿como lo hago para pasarla con todo y base de datos de manera que en otra computadora tambien funcione? Tienes alguna idea? Te agradeceria cualquier informacion.

alejo dijo...

Robert es solo cosa de hacer un "volcado" de la base de datos, este volcado te genera un archivo que contiene todos los comandos SQL para generar un espejo de la base de datos en el equipo que quieras.

El comando para esto es mysqldump, el cual tiene la siguiente forma:

mysqldump -u usuario basededatos > archivo.sql

Si mysql tiene los usuarios con clave entonces:

mysqldump -u usuario -p basededatos > archivo.sql

y te pedirá el password cuando presiones enter.

este comando lo ejecutas desde cualquier consola

Anónimo dijo...

Hey Gracias!!, pues si, era tan simple como eso, ahora ya tengo la base de datos en un archivo SQL, pero entonces si quiero usar mi programa en Java desde cualquier otra computadora, tengo que instalar en esa computadora MySQL forzosamente? No puedo acceder a la base de datos directamente?, y suponiendo que no se pueda, en el otro equipo como importo ese archivo SQL que genere?. ¿y que pasa con el archivo del driver que conecta Java con Mysql? ¿Tambien lo tengo que copiar en cada computadora en la que use mi programa? jeje Disculpa tanta pregunta, pero es que no encuentro informacion sobre como portar aplicaciones Java con bases de datos.

Gracias por tu respuesta anterior ;) Tus articulos son muy utiles.

alejo dijo...

Robert, recuerda que puedes apuntar la conexión de mysql a cualquier host dentro de una red, cambiando en la cadena url de la clase DbConection la palabra localhost por la ip del equipo donde esta montado mysql con tu base de datos.

Anónimo dijo...

Esta bueno, deberias de publicar mas..... Gracias

okaru dijo...

Cordial saludo,
revisando la informaciòn me surgiò la siguiente duda: què clase de configuraciòn requiere el servidor para que acepte conexiones remotas?. Cuando intento conectarme a la base de datos obtengo el siguiente error:
host xxx.xxx.xxx.xx is not allowed to connect to this MySqlServer.

alejo dijo...

Okaru si no estoy mal el usuario con el que te estas conectando a mysql debe estar configurado para conectarse desde cualquier ip, verifica si existe un usuario en mysql con estas características

Anónimo dijo...

Muchas gracias por la ayuda estaba buscando esto hace rato, me gustaría que siga con otros ejemplos son de mucha ayuda

Oircr10 dijo...

mi problema es el siguiente resulta que tengo todo lo necesario para conectarme a mysql con JDBC ..

en mi casa todo funciona a la perfeccion..
tengo el source de la base de datos
en un archivo .sql, un codigo de testconection.java y el driver
_____
translado el driver, el codigo, el
archivo de la base de datos
al PC de mi novia

creo la base de datos, verifico que muestre los datos. todo bien

pero cuando intento correr el bytecode no se ejecuta.

lo corro desde consola con:
java testconection

me dice que no se encuentra el driver, y resulta que ya esta incluido en la variable de entorno Classpath.

gracias de antemano por la ayuda que me puedan brindar.

alejo dijo...

Oircr10, el problema es que el esta buscando el driver en el bin del proyecto, debes exportarlo junto con el proyecto para que el lo agregue

Anónimo dijo...

Hola Alejo
Excelente material, me sirvió de mucho, después de algunos detalles logré ver la aplicación. sin embargo tengo una duda en Eclipse como lo compilo o lo hago ejecutable para llevarlo a otro equipo, para portar la base de datos no tengo problemas, solo para llevarme el programa sin el código fuente.

Por tu atención Gracias.

alejo dijo...

Respondiendo una duda anónima, para llevarse un aplicativo a otro equipo sin llevarse el código fuente se debe generar un jar del aplicativo, eclipse tiene una opción para exportar el proyecto, en el caso de un aplicativo con conexión a mysql se debe agregar el jar del mysql connector/j a las opciones de exportar el proyecto para que lo adjunte de manera apropiada.

tratare de crear una entrada con un paso a paso que ejemplifique este proceso.

Anónimo dijo...

Estimado amigo, corri tu ejemplo de conexion de de swing con mysql pero me genera esto errores

Exception in thread main
java.lang.NullPointerException
at co.madesoft.db.DbEstudiante.getEstudiantes(DbEstudiante.java:55)
at co.madesoft.db.GuiEstudiante.init(GuiEstudiante.java:30)
at co.madesoft.db.GuiEstudiante.main(GuiEstudiante.java:24)

La verad no he podido encontrar estos errores, me pudeds colaborar

correo:williamrm16@yahoo.es

Anónimo dijo...

un ejemplo muy claro y corre perfectamente, con algunos cambio se puede utilizar para cualquier base, usuario y asta con otro motor de base de datos orecle o sql, gracias

Anónimo dijo...

Hola Mi Nombre es Ana y me intereso mucho tu ejemplo pero me salen varios errores que no se como quitar yo estoy utilizando dos IDES el Netbeans y el Jcreator en ambos me marcan los siguientes errores:

Exception in thread main
java.lang.NullPointerException
at co.madesoft.db.DbEstudiante.getEstudiantes(DbEstudiante.java:55)
at co.madesoft.db.GuiEstudiante.init(GuiEstudiante.java:30)
at co.madesoft.db.GuiEstudiante.main(GuiEstudiante.java:24)

instal el conector y verifique que la conexion se estableciera con MySQL pero aun asi no funciona y ya no se que mas hacer ojala me pudieras ayudar.

Sweet_Baby08@live.com

alejo dijo...

Ana según parece tu error parte del método "getNotasByEstudiante", y desde este se propaga, así que solo tienes un error.

Los errores de "NullPointerException" se producen por tratar de usar elementos no instanciados, para poderte ayudar con exactitud me podrías decir que código tienes en la linea 55 de la clase DbEstudiante.

Gracias

Anónimo dijo...

Hola Gracias por tu respuesta en la linea que me mencionas (55) solo aparece i++; de la clase DbEstudiante pero no me parece que el error este ahi igual espero pronto tu respuesta de todas formas seguire intentando.

Gracias

Chau

Anónimo dijo...

Genial el tutorial , pero una preguntotota, soy nuevo en esto del java, no me podrias poner un ejemplito para insertar informacion a este ejemplo?

Espero tengas piedad de mi :) o si ya lo tienes comentame donde esta :) porque no lo encontre

Diego dijo...

Buenas, lei el ejemplo y me gusto. Simple y bueno.

La verdad es que llegue aqui porque tengo un proyecto en Java y MySQL que hize hace como 1 año y medio en NetBeans 5.0 y que me corre perfectamente en Windows pero no me corre en Linux.

Me compila pero no me ejecuta. Me larga error cuando quiere crear la sesion de Hibernate.

La pregunta es.... el conector JAVA/MySQL que use para windows....será valido tambien para Linux? Es probable que ahi este el error? Si me puedes dar una mano lo agradeceria. Mi correo es diegocaliri@gmail.com

Gracias

Saludos

alejo dijo...

Diego, el conector de mysql funciona tanto en windows como en linux, y el error que produce debe ser en tiempo de ejecución, no se me atrevería a decir que es la configuración para la obtención del driver de conexión, pero debes mirar cual es el error que te reporta

Anónimo dijo...

Hola alejo,
Soy nuevo, extremadamente nuevo. No puedo hacer correr el programa.

Creo que el problema esta en la base de datos que no se como utilizar, puedes darme mas indicaciones acerca de como utilizar mysql, yo cogí tu script lo copié en un .txt que luego cambie de nombre con la terminación .sql y con MySQL Workbench 5.0 OSS lo importé lo guarde con terminación .mwb y de ahí no se que mas hacer... tenme paciencia... pero es la primera vez que utilizo mysql, soy estudiante y no me gusta seguir a la manada y hacer en ms sql server,,, me gusta ser libre, libre como el viento, no creo que sea pecado, he tratado de leer los manuales pero no van directo al grano o no se buscar la información de manera correcta quizá porque el ingles no es mi idioma natal.

Luego para no perder tiempo hice todo lo que indicaste y me salio este error:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)
Exception in thread "main" java.lang.NullPointerException
at co.madesoft.db.DbEstudiante.getEstudiantes(DbEstudiante.java:67)
at co.madesoft.gui.GuiEstudiante.init(GuiEstudiante.java:33)
at co.madesoft.gui.GuiEstudiante.main(GuiEstudiante.java:26)

gracias, espero me ayudes y comprendas...

alejo dijo...

Hola Andrés

El error que te está reportando es por la configuración de la conexión, verifica que password tiene el usuario "root" en el servidor de mysql que instalaste y dale ese valor al parámetro correspondiente en la clase DBConexion que es la que se encarga de esto en el ejemplo, espero que esto resuelva tu duda

Anónimo dijo...

Gracias Alejo por tu ayuda no creí que me ayudarías tan rápido en efecto si era la clave, pero ahora me sale este error en la consola:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'clase'
Exception in thread "main" java.lang.NullPointerException
at co.madesoft.db.DbEstudiante.getEstudiantes(DbEstudiante.java:67)
at co.madesoft.gui.GuiEstudiante.init(GuiEstudiante.java:33)
at co.madesoft.gui.GuiEstudiante.main(GuiEstudiante.java:26)

Me doy cuenta que no existe la base de datos: clase pues es obvio que no le he creado a la bdd, ademas de libre el pecado que tengo también es ser algo vago y me da una vagancia hacerle ala consola todo tu script a mano así que consultando he visto que puedo usar un comando SOURCE pero no puedo hacerlo funcionar, podrías ayudarme o darme alguna idea de como utilizar ese comando yo tengo tu script en un archivo muy bonito llamado PruebaMySQL1.sql en el escritorio y de ahí no se que mas hacer....

Se que tu has hecho este blog para ayudar a sacar de la ignorancia a aquellos que desean ser por decir, menos ignorantes, gracias por eso... espero tu respuesta...

PD: ya estas entre mis blogs favoritos...

alejo dijo...

Hola Andrés:

No tienes que estrictamente manejar todo por consola, hay programas gráficos o "ides" que te sirven para interactuar con mysql por ejemplo el query browser de mysql desde donde puedes crear la base de datos o "Schema" y luego abrir el sript para ejecutarlo en esa base de datos y asi no tener que "moler" todo desde la consola, jeje.

Me alegra que las personas se preocupen por aprender cada día un poco más y si puedo aportar algo en ese proceso mucho mejor.

Anónimo dijo...

Gracias alejo...

Muchísimas gracias... sabiendo esos pocos datos ya pude encontrar un vídeo explicativo del ide en youtube.com, por si a alguien le interesa evitarse la búsqueda... el vídeo puede encontrarlo por el siguiente link:

http://www.youtube.com/watch?v=uSBCddZRvqo

Hice todo y no me sale error alguno solo un par de warnings (6 para ser exactos) pero por lo que he sufrido me conformo (me conformare esta vez)...

Con lo que si no me conformo es que no me sale ningún dato como los que te salen a ti en esa imagen del inicio, me late que algo paso con el script que no sirvieron los INSERT no se si podrás ayudarme con esta ultima pregunta no se si este mensaje que me sale en consola te ayude a identificar el problema:

Conección a base de datos clase OK
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'clase.estudiante' doesn't exist
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'clase.estudiante' doesn't exist

Espero esta sea ya la ultima pregunta y no cansarte con mi ignorancia extrema... gracias de antemano...

Anónimo dijo...

PD: Luego de consultar más sobre la consola, comprobé si la tabla estudiante tenia datos y esta bien todo, y así es,,, todo aparentemente esta bien... no tengo ni idea de porque me sale ese mensaje..... en la consola diciéndome que la tabla no existe... Uhmmm.... que mal... me siento un inútil...jejeje

alejo dijo...

Hola Andrés:

El error que te aparece es la no existencia de la tabla en la base de datos, haz una prueba desde el query browser y escribe las siguientes lineas:

use clase;
select * from estudiante;

si te aparecen los datos sin error nos toca ver mas a detalle que te aparece

Anónimo dijo...

Aja hice lo que me dijiste y un error me decía que no existía la tabla estudiante, así que me percate que la base de datos clase no tenia ninguna tabla (las 3) y que otra base de datos llamada mysql tenia esas mismas 3 tablas así que le hice doble clic a la base de datos y volví a correr el script... jejeje creo que me equivoque en algo del vídeo de joutube.com....

Que raro que por medio de la consola si me aparecían esos datos, ahora comprendo la utilidad del query browser..... no me parecía utilizarlo, ya que porque instalarlo si puedo hacer lo mismo con par de comandos pero ahora si me doy cuenta que no solo te ayuda a hacer las cosas mas fáciles sino también a identificar más rápidamente los errores...

Estoy muy feliz, gracias, muchas gracias, hoy día a sido muy productivo, ahora una duda que se me acaba de llegar a la mente..... si quiero correr tu programa en la computadora de mi novia, tengo que: copiar en una memory el MySQL Server 5.0, el MySQL Administrator, el MySQL Query Browser, y el script... obviemos el javaEclipse porque ya lo tiene, me falta algo? o no es necesario llevar todo?

O podría llevar el ejecutable del programa? y que mas necesitaría?

Bueno de todas formas ya has hecho mucho por mi, no espero una respuesta inmediata, otra ves y mil veces mas gracias... muchas gracias Alejo por tu tiempo que es lo mas valioso que puedes ofrecer a otra persona mas si es un extraño... continua sacando de la ignorancia a quienes no quieren permanecer en la oscuridad....

Suerte!!!...

Anónimo dijo...
Este comentario ha sido eliminado por un administrador del blog.
Anónimo dijo...

heeeee.... otra duda.... al ejecutar el programa me percaté que si le doy doble clic puedo editar tanto el nombre como el codigo del estudiante.

Habría forma alguna de que yo pueda a través del programa cambiar los datos de la bdd? Que me sugieres buscar en la web?

uhmmm... me siento un poco abusivo, espero no te moleste...

saludos...

alejo dijo...

Hola Andrés:

Nunca me ha parecido abusivo el deseo de aprender, me alegra que te intereses por este apasionante mundo y me alegra aun más poder brindar el conocimiento que alguna ves me brindaron a mi y que sigo adquiriendo.

Respecto al llevarte el aplicativo a otro equipo, dale una leída a las respuestas dadas a Robert que alguna vez me planteo una duda similar a la tuya y en cuanto a la edición de datos desde una interfaz echa en java espero en estos días crear una entrada con un ejemplo completo basado en una agenda que espero también sea de utilidad para todos.

Anónimo dijo...

Gracias alejo, de ley que si hay comentarios al respecto a la primera duda con relación a la segunda seria genial que lo hicieras tanto en ese nuevo ejemplo de la agenda como en este, estaré esperando la entrada acerca de esto impacientemente....

Muchas gracias otra ves...

Saludos desde la hermana República del Ecuador...

Anónimo dijo...

Hola Alejandro... Si otra vez yo... no se a quien pedir ayuda ya se acerca la fecha final para presentar proyectos y tengo un problema con mysql que quisiera me des una orientacion....

El hecho es que... en la materia de desarrollo de software me mandaron a hacer un lindo proyecto en visual basic 2005 .net me quedo del pelos y utilice una base de datos mysql... el chiste es que para ejecutar mi programa es necesario pasar la carpetita del proyecto y correr el script de la base de datos que he utilizado ademas del connector/net..... asi que el problema no es ese sino que tengo que hacer un instalador que no le haga lio al cliente (profesor)......

ASI que en resumidas cuentas deseo si me puedes decir de algun programa que me ayude a hacer un instalador de mi aplicacion (ponga una carpetita en archivos de programa y accesos directos en escritorio y menu de inicio) luego que instale el mysql server luego que se ejecute el script... no se si puedas ayudarme te agradeceria un monton... no tengo a quien mas pedirle ayuda y es para el jueves...

carlos ruiz dijo...

Hola Alejandro... gracias por la ayuda brindada de antemano, en la GUI 'GuiEstudiante' capturas todos los estudiantes en el Arreglo bidimensional Object [][] dtEstudiantes, por favor aca necesito saber como extraer los datos de cada celda(fila,columna) sin la necesidad de usar -> dtmEstudiantes = new DefaultTableModel(dtEstudiantes, columNames);
... ademas para poder hacer un update o un insert tambien como deberia llevar el arreglo Object para ejecutar mi query

gracias por la ayuda... Carlos FISI

carlos ruiz dijo...
Este comentario ha sido eliminado por el autor.
carlos ruiz dijo...

... Disculpa me olvide de algo si manejo diferentes tipos de datos como varchar, integer, float, date en mi tabla como deberia de cargarlo o todo tipo de dato lo transformo a tipo String cuando hago uso de ResultSet en la clase que manipula de la tabla, y si deseo hacer insert o update como implementaria el arreglo de Object para ejecutarlo en mi query... muchas graciasss Alejo

El Principiante dijo...

Hola que tal, buenisima tu ayuda, sin embargo me gustaria si es posible, me des una mano en lo siguiente. En clases me pidieron que pudiera añadir datos a una BD desde una Vista de Diseño (Formulario), y pueda Agregar, Modificar y Consultar los datos en la BD a traves de eventos con botones en el Contendor, ya tengo la vista la conexion pero me falta realizar los envios para la BD y las consultar. Sera posible tu ayuda?

Carlos Montero dijo...

Buenos Dia, alguien podria ayudarme
ya Realice todo lo que indica el procedimento pero al momento de compilar me presenta el siguiente error...

DbEstudiante.java:50: incompatible types
found : double
required: java.lang.Double
Double asiNota = res.getDouble("nota");
^
1 error

Anónimo dijo...

hola solo quisiera aprender mysql no se si de alguna manera me pueda ayudar este es mi correo por si quiere comunicarse con migo soy estudiante kyo2_9@hotmail.com

alejo dijo...

Hola para quien pregunto si lo puedo ayudar a aprender mysql, si, si puedo y con mucho gusto lo haré, por ahora empieza por ver la entrada de instalación de mysql y luego publicare una donde haremos un ejercicio de creación de una base de datos paso a paso, gracias por seguir visitando el blog y les pido disculpas por tener la publicación en pausa, pero he tenido muchas cosas que hacer entre el trabajo y los estudios, gracias nuevamente

Iswi dijo...

Saludos

Por favor necesito ayuda... Este ejemplo lo corri hace una semana y perfecto pero hoy en otra maquina no se porque me sta dando este error

Exception in thread "main" java.lang.NullPointerException
at co.madesoft.db.DbEstudiante.getEstudiantes(DbEstudiante.java:62)
at co.madesoft.gui.GuiEstudiante.(init)(GuiEstudiante.java:31)
at co.madesoft.gui.GuiEstudiante.main(GuiEstudiante.java:25)

en la linea:
Statement stm = cn.getConnection().createStatement();

Gracias

Iswi dijo...

Despues de estar 4 hrs tratando de resolver el error... me di cuenta que no habia descomprimido el .zip mysql-connector-java-5.1.6 en un directorio y de ahi usar el .jar estaba usando directamente en las librerias el .zip. Parece muy tonto pero puede ocurrir... Bueno suerte para todos y sigamos aprendiendo mi correo es isaacwi@gmail.com

Anónimo dijo...

Muy buenos datos, muy didactico para aprender conexiones java-mysql
Gracias

Anónimo dijo...

Muy didactico para aprender conexiones java-mysql, fue de gran ayuda

Gracias
Martha Lucia

Anónimo dijo...

Hola, tengo una duda, me gustaria usar de ejemplo tu codigo para hacer una consulta a otra base de datos que he creado de una tienda, pero la base de datos tiene varias tablas, entre ellas factura, productos etc, quiero que muestre factura y los datos que necesite de las otras tablas.

A modo de orientacion, que modificaciones mas o menos se le debe hacer al codigo? es que casi no manejo java y estoy confundido. Gracias

Raymundo dijo...

MUCHAS GRACIAS POR PUBLICAR ESTE TIPO DE MATERIAL... ESPERO SEGUIR APRENDIENDO Y COMPARTIR LO POCO QUE SE, ASI COMO TU LO HAS ESTADO HACIENDO.

FUNCIONÓ MUY BIEN.

alejo dijo...

Vale, para unir en un resultado los datos de varias tablas seria modificar las consultas, espero este fin de semana armar un ejemplo para subir al blog

azul dijo...

hOLA
TENGO UN PROBLEMA ES QUE AL EJECUTAR ESTE CODIGO EN EL JCREATOR, BUENO AL COMPILARLO DICE QUE NO HAY ERRORES SOLO QUE AL EJECUTARLO DICE QUE ME FALTA EL MAIN TENGO QUE CREARLO O COMO LE HICIERON PARA QUE LES JALARA BIEN

Edge dijo...

Hola, muy bueno el ejemplo, acabo de correrlo y bien... para el que pregunto sobre el problema del Double y el double yo lo corregi asi:

Double asiNota = new Double(res.getDouble("nota"));

PDT: alejo de casualidad ya publicaste la agenda donde podias hacer los insert y los update ?

Alexandra Puertas dijo...

Hola amigo tengo un gran problema. Resulta que yo estoy trabajando con un formulario de inicio de sesion hecho en HTML. El usuario se registra a travez de un formulario de registro y despues que el usuario le da a enviar el programa automaticamente le genera su login y su pass!, claro esta el programa lo genera por que lo saca del nombre y del apellido del usuario. El problema viene por que yo quiero tomar esos datos y guardalos en una tabla de mi base de datos. La tabla se llama "USUARIO", ya que el usuario debe de anotar por asi decirlo su login y su pass,este debe de ingresar estos datos, en el formulario de inicio de sesion, este formulario en cuestion debe de verificar si ya esta guardado en la tabla "USUARIO" (aqui debe de realizar un SELECT) y si esta guardado puede entrar a la otra pagina, sino no esta guardada debe de insertarla(INSERT) en la tabla. Todo esto como te dije lo estoy haciendo Usando HTML junto con JAVA SCRIPT y MYSQL. Help Me please.

alejo dijo...

Alexandra, JavaScript no es suficiente para hacer lo que quieres, tienes que manejar un lenguaje que te permita manejar la conexión con MySQL, como PHP, Java, ASP, etc; cualquiera de estos lenguajes si te permite realizar la conexión con MySQL

Edge dijo...

Hola Alejo
Una duda, si tuvieras que hacer un metodo refresh al grid de estudiantes como lo harias ?,

Es decir si se agregara un registro a la base de datos como se podria refrescar el listado de estudiantes ?

Gracias

alejo dijo...

Edge, dale un vistazo al la entrada de Agenda Personal

Anónimo dijo...

Estoy utilizando xampp y pienso implementar el código que esta en esta página. Le voy a hacer algunas modificaciones con el fin de poder registrar cualquier estudiante y ver sus notas y materias.

El inconveneinte que tengo es que no logro hacer que me corra el código. Ya lo tengo en eclipse y hago la parte que dice el tutorial sobre el conector (clic derecho sobre el proyecto, propiedades...) pero nada. Porfa alguien que me eche una mani0to.
Mi correo es maguva69@gmail.com GRACIAS

Focker dijo...
Este comentario ha sido eliminado por el autor.
Focker dijo...

hola.. ante todos saludos.

mi problema no tiene que ver con el ejemplo que dejaste aca.. pero como veo que eres una persona que me puede ayudar. te hago la siguiente pregunta.

en estos momentos estoy haciendo una aplicacion en java con base de datos.. por los momentos todo bien .. pero cuando intento hacer la conexion a la base de datos de esta manera...
String dbRuta="jdbc:mysql://ip de mi compu/hospital_carabobo";
String dbLogin="edgar";
String dbPass="";

Connection conexion = DriverManager.getConnection (
dbRuta,dbLogin, dbPass);

simplemente me lanza un error de que no se pudo realizar la conexion.. asi que me gustaria saber.. ¿si estoy en la misma maquina siempre tengo que poner localhost o es posible poner la ip tambien?

bueno esa es mi duda... me gustaria que respondieras a la brevedad posible.. y me gustaria saber si me puedes dar tu correo para hablarte de cualquier duda.

bueno me despido y espero que puedas solucionar mi duda. gracias.

att. Edgar

alejo dijo...

Edgar, puedes usar la ip de tu maquina, pero debes tener en cuenta dos cosas, que mysql te acepte conexiones remotas y que el usuario que estés usando tenga permisos para acceder desde direcciones remotas, verifica eso en la configuración de mysql y en los permisos de tu usuario

Focker dijo...

ya revise mi problema alejo muchas gracias.. era lo de los permisos .. ahora cree un usuario % y funciona bien.

ahora otra pregunta.. como hago para q una persona pueda acceder a una base de datos que yo tenga en mi compu?

att. Edgar

alejo dijo...

Edgar, no entiendo tu pregunta, que es exactamente lo que quieres hacer, que el usuario se conecte al servidor de bases de datos por un cliente de consola desde otro computador, o que se conecte mediante una interfaz que creaste en java, o con algun programa de tercero?, cuentame un poco más para poder ayudar

Focker dijo...

que se conecte mediate una interfaz grafica creada por mi, a mi base de datos. por medio de internet.

Susana dijo...

Hola esta muy padre tu bd Felicidades.

Una pregunta acerca de tu bd:
Como se mostraria en la Tabla estudiantes una foto:
es decir a la hora de mostrar el codigo,el nombre junto mostrara una foto es que a la foto la puse como tipo blob en MySQl pero en java no se como hacerlo.

Me podrias ayudar. Te lo agradeceria mucho

alejo dijo...

Edgar, modifica el host en los parámetros de conexión, busca localhost y cambialo por la ip de la máquina a la que te vas a conectar

alejo dijo...

Susana maneja las rutas, para cargar la imagen en un label, por ejemplo

Susana dijo...

Me podrias dar un ejemplo por favor es que todavia no logro ponerle la foto a la base de datos

Gracias

Focker dijo...

jeje.. yo tampoco entendi mucho lo uqe dijiste... ya to habia cambiado la ruta de esta manera.. "jdbc:mysql://"+ip+"/nombre de base de datos" y trate de conectarme desde otra compu y no pude hacerlo.

era a eso a lo que te referias?

richie dijo...

hey esos pasos fueron de gran ayuda para mi, muchas gracias Alejo, desde hace varios dias tenia problemas con la conexion de eclipse con mySQLAdministrator y ya gracias a Dios y a usted ya no tengo problemas, muchas gracias viejo.

Anónimo dijo...

HOLA ALEJO MUCHAS GRACIAS POR COMPARTIR LA INFORMACION CON NOSOTROS LOS NOVATOS EN JAVA Y MYSQL, HASTA AHORITA EH PODIDO CHECAR NUEVAMENTE TU PAGINA Y NO VEO COMENTARIOS DESDE QUE INICIO EL AÑO NUEVO, QUE PASO???.
ALEJO NECESITO TU AYUDA, ESTOY HACIENDO UN SISTEMA PERO NECESITO QUE ME IMPRIMA UNA LISTA PERO NO SE COMO, ME PODRAS AYUDAR, TAMBIEN DONDE PUEDO VER EL BLOG PARA EMPAQUETAR LAS APLICACIONES DE JAVA Y PODER INSTALARLO, ESPERO TU RESPUESTA Y DE ANTEMANO MUCHAS GRACIAS, ME LLAMO MARY

alejo dijo...

Mary no entiendo tu pregunta, acerca de lo que quieres hacer, si puedes especificar un poco mas podría ayudarte

Anónimo dijo...

Hola Alejo buen día... ya apliqué todo para la conexión... pero lo que no puedo hacer el aplicar las siguientes sentencias java.sql.statement, java.sql.resulset. ojalá y tuvieras un prototipo con conexión a mysql donde me pueda basar

alejo dijo...

anónimo, verifica los import de java.sql.*

Anónimo dijo...

Hola Alejo... me parece muy interesante el blog... gracias por toda la informacion.
abusando de tus conocimientos... me podrías decir dónde puedo encontrar algo que me hable de dominios definidos por el usuario y las herramientas de creación, H. administración, H. edicición para esquemas de consulta, H. de control de monitoreo y estadistica de accesos a BD. ya que las que las que bajo de inter no satisfacen a mi maestro... y la verdad no sé que más poner. en verdad te agradeceria mucho tu ayuda.
mi nombre es Jessy.
por favor ayudame!!!

Anónimo dijo...

hola alejo:

soy mary, ps estoy haciendo un sistema de control escolar, quiero que mi sistema imprima tan siquiera la lista de alumnos, no se como hacerlo, tambien quiero saber como empaquetar el sistema completo. quiero que me ayudes bueno si puede en las impresiones y para empaquetarlo. muchasgracias

Anónimo dijo...

soy mary otra vez si me puedes ayudar con un ejemplo te lo agradeceria mucho...

alejo dijo...

Mary, puedes ver un ejemplo completo en la entrada de la agenda, para el empaquetado puedes generar un jar y distribuir este, hoy en dia la mayoría de los ides incluyen una opción para generarlo, pero si prefieres puedes hacerlo por comandos:

jar cvf mipaquete.jar

de esa manera empaquetas en un jar tu aplicación

Anónimo dijo...

Hola alejo muchas gracias no lo habia checado, ps ya que lo revise ahora lo intentare hacer, gracias suerte en todo.
atte. mary
ah por cierto estan muy buenos los ejemplos

Anónimo dijo...

q mas pana. cada ves quiero introducir datos a mysql desde el programa en jama me lanza este error, no se si sean los drivers...


java.sql.SQLException: Invalid authorization specification message from server: "Access denied for user 'root'@'localhost' (using password: NO)"

alejo dijo...

tienes configurado el usuario root con password y la conexión la haces sin password

Anónimo dijo...

q mas, el root no esta configurado. le coloque el msqladmin y clave mysqladmin y me da este error , una part

java.sql.SQLException: Invalid authorization specification message from server: "Access denied for user 'mysqladmin'@'localhost' (using password: YES)"
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2001)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1907)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:2524)

alejo dijo...

para salir de dudas trata de hacer la conexión por consola de comandos con el siguiente comando

mysql -u mysqladmin -p

mysql te pedirá el password para este usuario, ojo porque este usuario debe tener permisos sobre la base de datos para hacer la operación de inserción. Verifica como ejecutar un grant en mysql

Kotetsu dijo...

Hola sabes e seguido tus indicaciones y tengo un pequeño problema, resulta que tengo una bd llamada "aizen" y dentro de ella esta una tabla que tiene algunos registros llamada "machine" y siempre que quiero ejecutar me sale una exception

ingresoParts init
GRAVE: null
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown table 'machine' in field list
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1383)
at conexion.mysql.getLista(mysql.java:56)
at datos.dmachine.getlistname(dmachine.java:23)
at middle.machine.getlistname(machine.java:17)
at ingresoParts.setcbx(ingresoParts.java:209)
at ingresoParts.init(ingresoParts.java:36)
at sun.applet.AppletPanel.run(AppletPanel.java:424)
at java.lang.Thread.run(Thread.java:619)


por mas que reviso no logro dar con la falla si puedes exame una mano por favor mi mail es guille.ahumada@gmail.com

alejo dijo...

Kotesu: verifica tu sentencia sql por que el error que te da "Unknown table 'machine' in field list" se produce cuando los nombres de las tablas o los campos no corresponden a los nombres en la base de datos

Anónimo dijo...

PAna felicitaciones por tu colaboraciones al mundo del software libre. Por casualidad tu tienes conocimientos de como se genera esas tablas pero en PHP. es decir trabajr mi java con MYSQL pero al momento de generar reportes exportar datos a PHP. Gracias mi pana.Saludos!!
Pedro Rojas

Jvox!!! dijo...

D L Mejor grax x la ayuda!!! aprendí mucho!!! salu2

Anónimo dijo...

Hola Alejo buen día.... me parece muy interesante la info.... me pregnto si entre tus curiosidades tengas algun ejemplo de Triggers anidados para mysql... y otra pregunta se pueden hacer triggers anidados en DBDesigner... tienes algun ejemplo???... te agradeceria mucho tu ayuda... mi nombre es Jessica

Anónimo dijo...

hola amigo, preguntaba si como puedo hacer que estando mi bd en hosting y como puedo conectar con el mismo.. o que me recomienda para hacer un formulario y se conecte tan solo con abrir el formulario...

irene dijo...

Hola Alejo!
Soy Irene y estoy incursionando en el mundo de java. Justamente, a raiz de un problemita que me surgió, es que dí con este blog. Desde ya te felicito, porque además de ser muy claro y didáctico, se nota toda la pasión que ponés en él.
Paso a relatarte mi problema para ver si me podés ayudar:
Como te dije estoy estudiando java e hibernate y tengo hechos unos cuantos proyectos a los cuales voy incorporando mis conocimientos. En todos esos proyectos ya tenía incorporado la conexión con Mysql, primero desde java directamente y luego através de hibernate. Andaba todo ok hasta hace 2 días, que sin ningún tipo de cambio de mi parte, me salta error al querer realizar la conexión. Lo mas gracioso es que me puede conectar directamente con Mysql y ver mis tablas, pero a través de mis proyectos no puedo. Y no entiendo porqué! Volví a bajar el connector/j y lo instalé en mis proyectos , pero nada...
Sinceramente no sé qué más hacer, si se te ocurre algo o necesitás más información no dudes en pedírmela.
Desde ya muchas gracias por todo, un saludo,
Irene.

irene dijo...

Hola Alejo, soy Irene de nuevo.
Te mando la lista de errores que me tira el proyecto:
Warm SettingsFactory:103 - Could not obtain connection metadata

java.sql.SQLException: Unable to connect to any hostos due to exception: java.net.ConnectException: Connection refused: connect
at
com-mysql.jdbc.Connection.createNewIO(Connection.java:1719)

Gracias!

alejo dijo...

Irene, disculpa la demora, por lo que comentas parece un cambio en la configuración de MySql y no te esta permitiendo conectarte por fuera de su entorno local, si me puedes dar mas datos de las pruebas que has realizado o de tu configuración, te podría ser de mas ayuda

irene dijo...

Hola Alejo! Gracias por contestarme tan rápido!
Te mando un ejemplo sencillo (sin usar hibernate) para comenzar a ver en donde puede estar el problema:
Esta es mi clase para administrar las conexiones:

import java.sql.Connection;
import java.sql.DriverManager;

public abstract class AdministradorDeConexiones {

public AdministradorDeConexiones() {
}

public static Connection getConnection() throws Exception
{

// Establece el nombre del driver a utilizar
String dbDriver = "com.mysql.jdbc.Driver";

// Establece la conexion a utilizar contra la base de datos
String dbConnString = "jdbc:mysql://localhost/j2se";

// Establece el usuario de la base de datos
String dbUser = "root";

// Establece la contraseña de la base de datos
String dbPassword = "1719";

// Establece el driver de conexion
Class.forName(dbDriver).newInstance();

// Retorna la conexion
return DriverManager.getConnection(dbConnString, dbUser, dbPassword);
}

}


Este es el ejercicio que intento ejecutar:

import ar.com.educacionit.lab8.ejercicio1.administrador.AdministradorDeConexiones;
import java.sql.Connection;
import java.sql.Statement;

public class SQLInsertSample {

/** Creates a new instance of SQLInsertSample */
public SQLInsertSample() {
}

public static void main(String[] args) throws Exception
{
// Define la conexion
Connection laConexion = AdministradorDeConexiones.getConnection();

// Arma la sentencia de inserción y la ejecuta
String laInsercion = "INSERT INTO alumnos (alu_id, alu_nombre, alu_apellido) VALUES (101, 'Manuel', 'Santos')";
Statement stmtInsercion = laConexion.createStatement();
stmtInsercion.execute(laInsercion);

// Cierra el Statement y la Connection
stmtInsercion.close();
laConexion.close();

// Informa que la inserción ha sido realizada con éxito
System.out.println("La inserción ha sido realizada con éxito...");

}

}

Mi configuración es:

Windows Vista Basic 6.0
Netbeans 6.5
Java 1.6.0-10
Connector/j connector-java.5.1.7-bin.jar (figura en el classpath)
Mysql Server 5.1

Este es el error que larga:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2120)
at com.mysql.jdbc.ConnectionImpl.init(ConnectionImpl.java:723)
at com.mysql.jdbc.JDBC4Connection.init(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at ar.com.educacionit.lab8.ejercicio1.administrador.AdministradorDeConexiones.getConnection(AdministradorDeConexiones.java:43)
at ar.com.educacionit.lab8.ejercicio1.tutorial.SQLInsertSample.main(SQLInsertSample.java:26)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 1 ms ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.init(MysqlIO.java:335)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2043)
... 13 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.init(Socket.java:366)
at java.net.Socket.init(Socket.java:209)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253)
at com.mysql.jdbc.MysqlIO.init(MysqlIO.java:284)
... 14 more
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)

Yo también creo que pasa por algún problema con Mysql. Ayer lo desinstalé y lo volví a bajar y a instalar, pero igual sigo con el problema. Lo mas raro es que no entiendo porqué hace 2 días funcionaba y de golpe dejó de hacerlo...
Mil gracias por tu ayuda!
Un gran saludo,
Irene.

irene dijo...

Hola Alejo! Gracias por contestarme tan rápido!
Te voy a enviar toda la información en varios mensajes, porque intenté mandar todo junto y se queda colgado!

Te mando un ejemplo sencillo (sin usar hibernate) para comenzar a ver en donde puede estar el problema:
Esta es mi clase para administrar las conexiones:

import java.sql.Connection;
import java.sql.DriverManager;

public abstract class AdministradorDeConexiones {

public AdministradorDeConexiones() {
}

public static Connection getConnection() throws Exception
{

// Establece el nombre del driver a utilizar
String dbDriver = "com.mysql.jdbc.Driver";

// Establece la conexion a utilizar contra la base de datos
String dbConnString = "jdbc:mysql://localhost/j2se";

// Establece el usuario de la base de datos
String dbUser = "root";

// Establece la contraseña de la base de datos
String dbPassword = "1719";

// Establece el driver de conexion
Class.forName(dbDriver).newInstance();

// Retorna la conexion
return DriverManager.getConnection(dbConnString, dbUser, dbPassword);
}

}


Este es el ejercicio que intento ejecutar:

import ar.com.educacionit.lab8.ejercicio1.administrador.AdministradorDeConexiones;
import java.sql.Connection;
import java.sql.Statement;

public class SQLInsertSample {

/** Creates a new instance of SQLInsertSample */
public SQLInsertSample() {
}

public static void main(String[] args) throws Exception
{
// Define la conexion
Connection laConexion = AdministradorDeConexiones.getConnection();

// Arma la sentencia de inserción y la ejecuta
String laInsercion = "INSERT INTO alumnos (alu_id, alu_nombre, alu_apellido) VALUES (101, 'Manuel', 'Santos')";
Statement stmtInsercion = laConexion.createStatement();
stmtInsercion.execute(laInsercion);

// Cierra el Statement y la Connection
stmtInsercion.close();
laConexion.close();

// Informa que la inserción ha sido realizada con éxito
System.out.println("La inserción ha sido realizada con éxito...");

}

}

Mi configuración es:

Windows Vista Basic 6.0
Netbeans 6.5
Java 1.6.0-10
Connector/j connector-java.5.1.7-bin.jar (figura en el classpath)
Mysql Server 5.1

irene dijo...

Sigo ahora con el error que larga:
Este es el error que larga:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2120)
at com.mysql.jdbc.ConnectionImpl.init(ConnectionImpl.java:723)
at com.mysql.jdbc.JDBC4Connection.init(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at ar.com.educacionit.lab8.ejercicio1.administrador.AdministradorDeConexiones.getConnection(AdministradorDeConexiones.java:43)
at ar.com.educacionit.lab8.ejercicio1.tutorial.SQLInsertSample.main(SQLInsertSample.java:26)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 1 ms ago.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.init(MysqlIO.java:335)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2043)
... 13 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.init(Socket.java:366)
at java.net.Socket.init(Socket.java:209)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253)
at com.mysql.jdbc.MysqlIO.init(MysqlIO.java:284)
... 14 more
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)

Yo también creo que pasa por algún problema con Mysql. Ayer lo desinstalé y lo volví a bajar y a instalar, pero igual sigo con el problema. Lo mas raro es que no entiendo porqué hace 2 días funcionaba y de golpe dejó de hacerlo...
Mil gracias por tu ayuda!
Un gran saludo,
Irene.

irene dijo...

Hola Alejo y a todos los bloggers!
Entré en el blog de Mysql y ví que había un montón de personas que tenían el mismo problema. Uno de ellos informó que reemplazó localhost por 127.0.0.1.
Así que me fuí a mi clase de AdministradorDeConexiones.java y en la línea donde dice :
String dbConnString = "jdbc:mysql://localhost/j2se";

lo reemplacé por:
String dbConnString = "jdbc:mysql://127.0.0.1/j2se";

y funcionó!

No tengo la menor idea del motivo!
A lo mejor, vos Alejo podrás entender el porqué y explicárnoslo.

Gracias por todo y seguiré atentamente este blog.
Saludos, Irene

alejo dijo...

Irene este problema tiene que ver con la configuración no de mysql sino por lo general del sistema operativo sobre el cual estas corriendo las pruebas, alguna ves renombre el identificador en la red de mi maquina haciendo pruebas de herramientas para evaluación en linea de ejercicios de programación y luego nada que apuntara a localhost funcionaba, muchas gracias por publicar la solución

Leon dijo...

Muchas Gracias, tu programa es muy útil y nos ha ayudado a muchas personas.

Una vez mas, muchísimas gracias por tu generosidad para compartir tu conocimiento.

Anónimo dijo...

Hola alejo.. me gustaria comunicarme contigo.. por msn si tienes.. tengo un problema con un proyecto q me mandaron y no puedo realizar la conexion con la BD... mi correo es eduar_16_2003@hotmail.com te lo agradeceria mucho!

Crash dijo...

disculpen es q tengo un problema con este codigo tu me podrias ayudar, me aparece erros de missing return stetament
se le agradece sus ayudas de antemano

package empresa;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;



/**
*
* @author Crash
*/
public class Ventana extends javax.swing.JFrame {

Connection conexion;
Statement sentencia;
ResultSet resultado;

public Ventana() {
initComponents();
PrepararBaseDatos();
this.setTitle("Base de Datos System Cursos");
this.setSize(600,800);
this.setResizable(false);
}

Void PrepararBaseDatos(){
try {
String controlador = "Sun.odbc.Jdbc0dbcDriver";
Class.forName(controlador).newInstance();
}
catch (Exception e){
JOptionPane.showMessageDialog(null,"error al cargar el controlador");

}



try {
String DSN = "jdbc:Driver={Microsoft Acces Driver(*.mdb)};DBQ="+"Base\\bdSystem.MDB";
String password ="";
String user ="";
conexion = DriverManager.getConnection(DSN,user,password);
}
catch(Exception e){
JOptionPane.showMessageDialog(null,"error al realizar conexion");
}
try {
sentencia = conexion.createStatement(
resultado.TYPE_SCROLL_INSENSITIVE,
resultado.CONCUR_READ_ONLY);
}catch(Exception e){
JOptionPane.showMessageDialog(null,"Error al crear el objeto sentencia");
}

}

crash dijo...

se me olvidaba mi correo es jhan_6969@hotmail.com

vale dijo...

hola alejo esta super tu ayuda.. y si me pudes dar una manito te lo agradeceria infinitamnt..
tengo un progmita creado ya tengo el .jar y se ejecuta sn probl, llama alas utilidds (blog, calc, etc)con los menus.., pero a las clases q cree no las llaman xq sera?? alguna idea?? ah y a la BD tampoc llama
pero desd eclipse funciona too ok...
cualkier komentario te lo agradceria un monton!!

alejo dijo...

Vale en la generación del jar debes incluir para que te exporte el jar de conexión a mysql y verificar que te este exportando tus clases para que funcione sin necesidad de ejecutarlo desde eclipse

vale dijo...

muchas gracias x prestar atncion a mi pregunta!!
--en la especificacion de arch jar le selecciono todo incluyendo la lib. donde se encuentra el jar de la conccion a bd lo hago el proceso como me pide eclipse en la gneracion del .jar,
--¿como puedo verificar si exporto todo lo seleccionado?
--otra duda todas las clases debn tener el void mai()?? para mostrar desde el .jar?
una vz mas muchass gracias Y KIERO APROVECHAR ESTE MEDIO PARA SALUDART A TI Y A LAS DEMAS PERSONAS Q VISITAN ESTA PAG. X EL MES IMPORTANT Q ES EL MS DE LA AMISTAD!!

Diego dijo...

muy bueno el blog profe! aunque aun no entiendo nada de eso.. pero algun dia jeje

Anónimo dijo...

wo0olaa me acaban de resolver mi vida

jaja i saben algo mi profe saco de aqui el codigo hasta el aprendee

jaja grashias grashiass
me an salvado del cuarto parsial jaj
grashias ke tenga super wuenos dias

Anónimo dijo...

Hola, buen blog, me encanto la ayuda y sobre todo que esta bien explicado.....Veracruz.

PPK17 dijo...

Holas, yo no utilizo el programa eclipse, utilizo uno llamado jgrasp, lo digo xq estoy tratando d poner este ejemplo para correrlo, la parte d la conexion me sale bien pero cuando me voy a la DbEstudiante me da un error:

Holas, yo no utilizo el programa eclipse, utilizo uno llamado jgrasp, lo digo xq estoy tratando d poner este ejemplo para correrlo, la parte d la conexion me sale bien pero cuando me voy a la DbEstudiante me da un error:

Holas, yo no utilizo el programa eclipse, utilizo uno llamado jgrasp, lo digo xq estoy tratando d poner este ejemplo para correrlo, la parte d la conexion me sale bien pero cuando me voy a la DbEstudiante me da un error:

DBEstudiante.java:6: cannot find symbol
symbol : class pruebaconexion
location: class co.madesoft.co.DBEstudiante
pruebaconexion cn; (sip le cambie el nombre)

y en la parte para generar las ventanas:

GuiEstudiante.java:8: package co.madesoft.db does not exist
import co.madesoft.db.*;
^
GuiEstudiante.java:21: cannot find symbol
symbol : class DbEstudiante
location: class co.madesoft.gui.GuiEstudiante
DbEstudiante us = new DbEstudiante();

Kisiera ver q este error se deba x usar este otro programa o alguna otra cosa, graxias d antemano

alejo dijo...

PPK17, buen día, no conozco el ide que mencionas, pero estos errores que se te están presentando se pueden dar por lo siguiente:

- las clases pueden estar mal nombradas, verifica que las clases tengan el nombre que estás usando para crear las instancias.

- Visibilidad de las clases, para usar una clase por fuera de un paquete esta debe ser pública, es decir la clase debe empezar por public class ...

- Las clases aunque están en la carpeta del paquete no tiene al inicio la línea que declara de que paquete son, verifica que cada archivo de las clases empiecen con la línea package ...

Espero que esto solucione el problema

Heimys dijo...

Muchas gracias, me fue de mucha ayuda, pues yo habia hecho este codigo en alguna oportunidad pero ya no recordaba como, en verdad me sacaste de un gran apuro, un millon amigo... Desde Venezuela...

Ziriako dijo...

Buen aporte hermano

Gracias

Es bueno que aun se comparta el

conocimiento

Anónimo dijo...

Hola... Estuve revisando el blog y me parece super intersante...

Actualmente estoy haciendo una aplicacion q debe registrar alumnos y empleados de una institucion. Con los empleados no tengo problemas en absoluto, peeeero, para registrar los alumnos uso 3 vistas distintas q son:VistaDatosAlumno, VistaDatosRepresentante y VistaDatosAcademicos, se conectan a traves d un boton SIGUIENTE, la inf debe ir registrada en tablas diferentes... Tengo este metodo pero no me funciona

void insertarAlumno(String nombres, String apellidos, int cedula,String fechaNac, String sexo, int edad, String telef,
String plantel, String direc, String nombRep, String apeRep, int cedRep,String direcRep, String telef1, String telef2, String parentes,
String grado, String seccion, String condicion,String anioESc, String docente, String cedEsco){
conexion();
String sql3 = "INSERT INTO ALUMNO VALUES (?,?,?,?,?,?,?,?,?,default,?,?,?);";
String sql1 = "INSERT INTO REPRESENTANTE VALUES (?,?,?,?,?,?,?);";
String sql2 = "INSERT INTO DATOSACADEMICOS VALUES(default,?,?,?,?,?);";
try {
ps = con.prepareStatement(sql1);
ps.setString(1,nombRep);
ps.setString(2,apeRep);
ps.setInt(3,cedRep);
ps.setString(4,direcRep);
ps.setString(5,telef1);
ps.setString(6,telef2);
ps.setString(7,parentes);
ps.execute();
ps1 = con.prepareStatement(sql2);
ps1.setString(1,grado);
ps1.setString(2,seccion);
ps1.setString(3,condicion);
ps1.setString(4,anioESc);
ps1.setString(5,docente);
ps1.execute();
ps2 = con.prepareStatement(sql3);
ps2.setString(1,nombres);
ps2.setString(2,apellidos);
ps2.setInt(3,cedula);
ps2.setString(4,fechaNac);
ps2.setString(5,sexo);
ps2.setInt(6,edad);
ps2.setString(7,telef);
ps2.setString(8,plantel);
ps2.setString(9, direc);
ps2.setString(10, cedEsco);
ps2.setInt(11, cedRep);
ps2.setString(11, docente);
ps2.execute();
} catch (SQLException e) {
e.printStackTrace();
}


Y ese metodo lo estoy llamando en la ultima vista justo en el boton REGISTRAR asi:


if (arg0.getSource()==vrdAca.btnAceptar) {
String cedDocente = vrdAca.cmbDocente.getSelectedItem().toString();
ResultSet rs = conectarC.obtenerCedDocente(cedDocente);
int ced =0;
try {
while(rs.next()){
ced = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
grado = vrdAca.cmbGrado.getSelectedItem().toString();
condicion = vrdAca.cmbCondicion.getSelectedItem().toString();
cedEmple = vrdAca.cmbDocente.getSelectedItem().toString();
seccion = vrdAca.cmbSeccion.getSelectedItem().toString();
anioEsc = vrdAca.txtAnio.getText();
cedEsco = vrdAca.txtCedEsc.getText();

conectarC.insertarAlumno(this.nomA,this.apeA,Integer.parseInt(cedula),fechaNac,sexo,Integer.parseInt(edad),
telef,plantel,direc,nombRep,apeRep,Integer.parseInt(cedRep),this.direcRep,telef1,telef2,parentes,grado,seccion,condicion,(cedDocente),anioEsc,
cedEsco);
System.out.println("INCLUYO");
}

podrias ayudarme..???

Anónimo dijo...

Hola... Estuve revisando el blog y me parece super intersante...

Actualmente estoy haciendo una aplicacion q debe registrar alumnos y empleados de una institucion. Con los empleados no tengo problemas en absoluto, peeeero, para registrar los alumnos uso 3 vistas distintas q son:VistaDatosAlumno, VistaDatosRepresentante y VistaDatosAcademicos, se conectan a traves d un boton SIGUIENTE, la inf debe ir registrada en tablas diferentes... Tengo este metodo pero no me funciona

void insertarAlumno(String nombres, String apellidos, int cedula,String fechaNac, String sexo, int edad, String telef,
String plantel, String direc, String nombRep, String apeRep, int cedRep,String direcRep, String telef1, String telef2, String parentes,
String grado, String seccion, String condicion,String anioESc, String docente, String cedEsco){
conexion();
String sql3 = "INSERT INTO ALUMNO VALUES (?,?,?,?,?,?,?,?,?,default,?,?,?);";
String sql1 = "INSERT INTO REPRESENTANTE VALUES (?,?,?,?,?,?,?);";
String sql2 = "INSERT INTO DATOSACADEMICOS VALUES(default,?,?,?,?,?);";
try {
ps = con.prepareStatement(sql1);
ps.setString(1,nombRep);
ps.setString(2,apeRep);
ps.setInt(3,cedRep);
ps.setString(4,direcRep);
ps.setString(5,telef1);
ps.setString(6,telef2);
ps.setString(7,parentes);
ps.execute();
ps1 = con.prepareStatement(sql2);
ps1.setString(1,grado);
ps1.setString(2,seccion);
ps1.setString(3,condicion);
ps1.setString(4,anioESc);
ps1.setString(5,docente);
ps1.execute();
ps2 = con.prepareStatement(sql3);
ps2.setString(1,nombres);
ps2.setString(2,apellidos);
ps2.setInt(3,cedula);
ps2.setString(4,fechaNac);
ps2.setString(5,sexo);
ps2.setInt(6,edad);
ps2.setString(7,telef);
ps2.setString(8,plantel);
ps2.setString(9, direc);
ps2.setString(10, cedEsco);
ps2.setInt(11, cedRep);
ps2.setString(11, docente);
ps2.execute();
} catch (SQLException e) {
e.printStackTrace();
}


Y ese metodo lo estoy llamando en la ultima vista justo en el boton REGISTRAR asi:


if (arg0.getSource()==vrdAca.btnAceptar) {
String cedDocente = vrdAca.cmbDocente.getSelectedItem().toString();
ResultSet rs = conectarC.obtenerCedDocente(cedDocente);
int ced =0;
try {
while(rs.next()){
ced = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
grado = vrdAca.cmbGrado.getSelectedItem().toString();
condicion = vrdAca.cmbCondicion.getSelectedItem().toString();
cedEmple = vrdAca.cmbDocente.getSelectedItem().toString();
seccion = vrdAca.cmbSeccion.getSelectedItem().toString();
anioEsc = vrdAca.txtAnio.getText();
cedEsco = vrdAca.txtCedEsc.getText();

conectarC.insertarAlumno(this.nomA,this.apeA,Integer.parseInt(cedula),fechaNac,sexo,Integer.parseInt(edad),
telef,plantel,direc,nombRep,apeRep,Integer.parseInt(cedRep),this.direcRep,telef1,telef2,parentes,grado,seccion,condicion,(cedDocente),anioEsc,
cedEsco);
System.out.println("INCLUYO");
}

podrias ayudarme..???

alejo dijo...

Anónimo, dos detalles que te pueden ayudar mucho:

primero desacopla los métodos de inserción, es decir no pases tantos parámetros, pasa un único parámetro un objeto de tipo alumno con toda la información sobre este y procesala en el método y segundo en las cadenas de inserción especifica que campos quieres afectar.

prueba esto y me cuentas

Cristina dijo...

Hola, soy Cristina y nueva en esto de java. Estoy aprendiendo a hacer ABM y este ma parecio un ejemplo muy bueno pero al copiarlo y hacerlo compilar me surgen errores que son estos;
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'a.asi_codigo' in 'on clause'
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at co.madesoft.db.DbEstudiante.getNotasByEstudiante(DbEstudiante.java:43)
at co.madesoft.gui.GuiEstudiante$1.mouseClicked(GuiEstudiante.java:58)
La comeccion a la base de datos aparece como OK , pero cuando quiero que me traiga las materias con los codigos y las notas , me surge ese error. Estoy intentando entenderlos pero me siento mas perdida que Adan en el dia de la madre. PLEASE necesito ayuda . Desde ya mil gracias

juangui dijo...

compañero yo estoy realizando tu ejemplo desde la consola y me sale lo siguiente....me podes ayudar?...gracias:

D:\ejercicios java\mysqlframe>java GuiEstudiante
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Exception in thread "main" java.lang.NullPointerException
at DbEstudiante.getEstudiantes(DbEstudiante.java:68)
at GuiEstudiante.(GuiEstudiante.java:33)
at GuiEstudiante.main(GuiEstudiante.java:26)

alejo dijo...

juangui, te falta agregar al proyecto el driver de conexión a mysql, verifica el siguiente paso

"Una ves que tenemos la base de datos creada, creamos un nuevo proyecto en eclipse, una ves creado el proyecto hacemos click derecho con el ratón sobre el nombre del proyecto y seleccionamos la opción de propiedades, en esta ventana seleccionamos la opción de "Java Build Path" y en esta la pestaña "Libraries", dentro de esta hacemos click sobre el botón "Add External Jars..." y buscamos el mysql-conector-java que podemos descargar de la pagina de MySQL, y hacemos click en aceptar."

alejo dijo...

Cristina verifica la estructura de tus tablas, porque el error te lo ha reportado mysql y es que no existe la columna que tratas de usar

mauricio dijo...

hola me parecio muy interesante la informacion

quisiera saver como meterle botones a la interfas grafica, bueno mejor dicho que funcionen los botones
tengo un proyecto de una base de datos de una escuela en la cual agregue el numero de control, nombre,edad y especialidad de un alumno
lo que quiero hacer funcionar una pantalla con los botones insertar, eliminar, modificar buscar y cerrar

espero y me puedas ayudar

dragon dijo...

Hola que tal estaba buscando en la internet ayudas sobre eclipse y mysql y encontre este blog, y me parece super bueno.
Yo tengo instalado el eclipse 3.5.2 galileo, para la conneciones a mysql, yo tengo instalado el paquete xampp (php,mysql,. etc.) .
Siguiendo todo lo que dice tu blog al momento de ejecutar la aplicacion me encontre con unos errores que francamente no doy pie con bola, espero que me puedas dar una mano. lo que me sale es esto:

coneccion a base de datos clase ok
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'estudiante' at line 1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at co.DbEstudiante.getEstudiantes(DbEstudiante.java:84)
at gui.GuiEstudiante.(GuiEstudiante.java:31)
at gui.GuiEstudiante.main(GuiEstudiante.java:23)


1)
while (res.next()) {
String estCodigo = res.getString("est_codigo");
String estNombre = res.getString("est_nombre");

y esto es lo que tengo en cada linea de codigo
//LINE84 data[i][0] = estCodigo;
data[i][1] = estNombre;

2)
// LINE 31 dtEstudiantes=us.getEstudiantes();

3)

//LINEA 23 GuiEstudiante g = new GuiEstudiante();
//me dice que: the local variable g is never read

en verdad no se en donde esta mi error y lo malo es que no soy tan bien programador me falta mucha mas experiencia en este campo espero que usted me pueda dar una manito .
gracias es muy bueno su blog

alejo dijo...

dragon la consulta de estudiantes tiene un error de sql, verifica si al momento de copiar y pegar no falto nada

dragon dijo...

ok muchas gracias Alejo ya lo voy a revisar en mi casa a ver que resulta.
gracias y cualquier duda estoy en contacto en tu blog

Anónimo dijo...

Se utiliza lo mismo si la quiero conectar con una base de datos en SQL SERVER???
Necesito q me ayudes por favor!!!
Mi nombre es Marta

Abigail Rebolledo dijo...

hOLA ALEJO
LA VERDAD ESTA MUY CLARO TU EJEMPLO, PERO NO ME CORRE ME MARCA LO SIGUIENTE LAUNCHING DOCSCONNECTIONPROPSHELPER ...ME PUEDES AYUDAR POR FAVOR'''??
MUCHAS GRACIAS DE ANTEMANO

Abigail Rebolledo dijo...

alejo, tu ejemplo es muy claro y sencillo pero no me corre..me parece lo siguiente LAUNCHING DOCSCONNECTIONPROPSHELPER y no se a que se debe..me podrias hechar una mano por favor??
gracias de antemano

Jesus dijo...

Hola, bueno, me pareció "sencillo", sin embargo, no se si podrías decirme como hacer un programa ABC (Altas, bajas, cambios y consultas), conectando java swing con MySQL, que no tengo bien claro eso.

Gracias.

P.D. es URGENTE, debo entregar mi trabajo para el viernes y es lo unico que me falta

Jesus dijo...

Gracias de antemano

Alexander dijo...

hola que tal!
cuando trato de ejecutar el codigo que has subido, me genera un error en el driver del mysql "com.mysql.jdbc.Driver"
aparece como no encontrado y se generan estas lineas:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Exception in thread "main" java.lang.NullPointerException
at conexion.PersonasDB.getPersonas(PersonasDB.java:69)
at conexion.GuiEstudiante.(GuiEstudiante.java:53)
at conexion.GuiEstudiante.main(GuiEstudiante.java:42)
Java Result: 1

como se hace para que ejecute el driver?

Oscar dijo...

Hola Alejo.

Excelente material. Solo tengo una pregunta:

Las veces que he hecho consultas a una BD lo he hecho con DAO, creando las clases XX.java y XXDao.java para cada tabla de la BD. Nunca lo había hecho de una forma tan simple.

Qué patrón es el que siguies para hacer las consultas, la forma en la que consultas es nueva para mi.

Gracias.

alejo dijo...

Oscar, es tan solo un ejemplo para la conexión desde java, el patrón DAO es muy útil cuando buscamos independencia del motor y extensibilidad en nuestro código

armando dijo...

Hola que tal amigo, mira necesito de mucha urgencia tu ayuda, intente correr tu codigo pero me resultan muchos herrores,en especial "Error de Enlace de comunicaciones debido a la excepción subyacente" y "MENSAJE: Conexión rechazada: conectar", necesito de tu ayuda, y confio en que me ayudaras!!!!

armand dijo...

Hola que tal alejo, mira necesito de mucha urgencia tu ayuda, intente correr tu codigo pero me resultan muchos herrores,en especial "Error de Enlace de comunicaciones debido a la excepción subyacente" y "MENSAJE: Conexión rechazada: conectar", necesito de tu ayuda, y confio en que me ayudaras!!!!

armand dijo...

Hola alejo, necesito de tu ayuda lo que pasa es que no puedo correr el codigo que muestras, y creo que me es de mucha utilidad ya que es para un proyecto pero tengo el tiempo ensima, me sale que no se puede hacer la conexion... espero tu respuesta!!!
gracias!!!

posdata: te dejo mi correo:
guma8909@gmail.com

Adderly Jáuregui dijo...

Hola amigo alejo, mira te comento lo que intento realizar, sera un sistema de basse de datos para una biblioteca, el servidor mysql lo tendre en una maquina, y el cliente, donde solamente realizare una consulta y la mostrare graficamente en otra maquina, he decidido realizar una pequeña coneccion entre dos maquinas pero no tengo ningun resultado, me tira el siguiente error en el lado del cliente:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago...

Ojalá puedes ayudarme, me gustaria charlar contigo mas a menudo... veo que tienes buenos conocimientos y deseos de compartirlos :D
mi correo: kal-el_infrared@hotmail.com

Anónimo dijo...

hola, la verdad soy nuevo en java y tengo algunos problemas al correr tu aplicación, me aparecen algunos errores:
Exception in thread "main" java.lang.NoClassDefFoundError: org/aspectj/lang/Signature
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at co.madesoft.db.DbConnection.(DbConnection.java:24)
at co.madesoft.db.DbEstudiante.(DbEstudiante.java:12)
at co.madesoft.gui.GuiEstudiante.(GuiEstudiante.java:22)
at co.madesoft.gui.GuiEstudiante.main(GuiEstudiante.java:28)
Caused by: java.lang.ClassNotFoundException: org.aspectj.lang.Signature
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 6 more

sam dijo...

:D

Anónimo dijo...

Hola Amigo me he copiado todas las cosas para hacer un proyecto con netbeans , pero en DbConnection para la conexion con la base de datos,hay una problema,en la línea de "public class DbConnection {" el netbeans me dice q este linea no es correcta, como quiero hacer? pr fvr respondame en mi correo : djmohsin@hotmail.de

Anónimo dijo...

Hola kpo, ya tengo todo instalado, pero que debo ejecutar para que me salgan los datos?

Anónimo dijo...

oye que version de eclipse utilizas para hacer la conexion por que yo tengo el eclipse helio 3.6.0 y no se puede hacer la conexiion... o cual programa de java tengo que descargar paa que estoyfuncione!!! me urge!

Anónimo dijo...

oye que version de eclipse utilizas para hacer la conexion por que yo tengo el eclipse helio 3.6.0 y no se puede hacer la conexiion... o cual programa de java tengo que descargar paa que estoyfuncione!!! me urge!

LeonardoCM87 dijo...

Asombroso tutorial he Usado Eclipse 3.7 y el conector mysql-connector-java-5.1.18-bin.jar y Funciona PERFECTO!! MIL GRACIAS EN VERDAD!!

Daniel Gonzalez Teran dijo...

Hola compañeros tengo un problema algo similar a lo que les ha ocurrido quiero conectar java a sql con jar mysql-connector-java-5.1.18-bin.jar, y estoy probando la coneccion con este clase:

import java.sql.*;

/**
*
* @author daniel
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

try {
Class.forName("com.mysql.jdbc.Driver");
String connectionUrl = "jdbc:mysql://localhost/mysql?" +
"user=root&password=123456";
Connection con = DriverManager.getConnection(connectionUrl);
} catch (SQLException e) {
System.out.println("SQL Exception: "+ e.toString());
} catch (ClassNotFoundException cE) {
System.out.println("Class Not Found Exception: "+ cE.toString());
}



}
}



y me sale esto:

SQL Exception: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

estoy trabajando con una mac con snow leopard (Mac OS X 10.6.7 (10J869))

¿Me podrían ayudar?

Muchas gracias por su atención

Toño Linares dijo...

Hola Alejo, muchas gracias por todo tu aporte. Tengo un problema con respecto a la conexion desde eclipse con MySql. Ya hice de todo para conectarme y nada. El error que me sale es

java.sql.SQLException: No suitable driver

ya quite el driver, lo copie, lo borre, lo volvi a agregar y nada.

Por el esquema de eclipse si me conecto tranquilamente a MySql pero desde una clase java, nada de nada.

Que puedo hacer??? es urgente.

Gracias de antemano por tu apoyo

Anónimo dijo...

Gracias por el aporte, muy bueno y entendible.. espero sigas contribuyendo ;)

Anónimo dijo...

alejo me llamo ivan y tengo un problema no puedo conectar mi aplicacion de escritorio echa en java netbeans cob mysql desde internet
me manda este error:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

te paso mi codido de conexion

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class mys {
private Connection conexion;
private String bd="a7392210_isc";
private String servidor="mysql3.000webhost.com:3306";
private String usuario="a7392210_isc";
private String clave="isct12";
public mys() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conexion = (Connection) DriverManager.getConnection("jdbc:mysql://" + servidor + "/" + bd, usuario, clave);
System.out.println("CONEXION ESTABLECIDA...");
}
public ResultSet consulta(String query) throws SQLException {
ResultSet rs = null;
Statement stmt = null;
stmt = (Statement) conexion.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(query);
return rs;
}
public int operacion(String query) throws SQLException {
int filasAfectadas = 0;
filasAfectadas = conexion.createStatement().executeUpdate(query);

return filasAfectadas;
}
public void cerrar() throws SQLException {
conexion.close();
}
public static void main(String[] args) {
try {
new mys();
} catch (ClassNotFoundException ex) {
Logger.getLogger(mys.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(mys.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(mys.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(mys.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

Anónimo dijo...

Hola, como seria la interfaz en netbeans? estoy tratando de hacerla con netbeans pero no logro poder hacerla.

Dani Rodriguez dijo...

Muchas Gracias!! Me fue de gran ayuda este código!

Dani Rodriguez dijo...

Muchas Gracias!
Me ha sido de gran ayuda este código!

Julito dijo...

Alejo..
Realice paso a paso tu ejercicio
pero a pesar de no marcar ningún error, no se muestra los datos en la tabla de notas :(.

Solo veo la tabla de estudiantes y funciona bien la parte de los txt's

Sabes si falta algo? o donde crees que pueda estar mi error?

Gracias por la ayuda!

Anónimo dijo...

Yes, the Epic's camera app allows you to re-record a part, not fix or alter notes within the part. After a tragedy like that, it is inside the prison system, they bring cultural bias, prejudices, and the iPad 2 feels very iterative.

Also visit my page ... cam sex

Anónimo dijo...

Chicago families can find Peaceable Kingdom labels kits. For instance, the map size might be adjusted to fit on one stickersed page, Word will shrink it to fewer pages. http://liquiddesigns.biz Custom labels printing can be done to your specifications.
stickers Yes, he is no longer uncommon to find persons willing to use any device to Stickers images as required. Michelle wore a black and white print.

Anónimo dijo...

The unique factor with regard to the Height Challenged is the
fact it provides the lesson within a weekly foundation.


Here is my web-site ... cheap dumbbells set

Anónimo dijo...

Attaching the footplate leg push accessory is a suffering inside the rear.


my page Click On this page

Anónimo dijo...

These Dumbbells are exceptional as they provide you the liberty to regulate the resistance from
five lbs (two.

my blog ... http://www.getfitnstrong.com/adjustable-dumbbells/4-perfect-dumbbell-sets-sale/

Anónimo dijo...

With countless different solutions about the market place, how will you pick out the one that is greatest
for your needs (along with your pocketbook?


my page; http://www.getfitnstrong.com/adjustable-dumbbells/3-great-adjustable-weights-affordable-prices

Anónimo dijo...

Bowflex Household Gym's are made truly perfectly so they will stand the check of your time through a number of owners a great deal of your time.

My web-site ... free weights for sale

Anónimo dijo...

The three most crucial elements to gain lean muscle mass size are
as follows.

Feel free to surf to my weblog: adjustable dumbbells

Anónimo dijo...

However, It s properly worth the investment.


Check out my blog Read Alot more

Anónimo dijo...

On" The fleshlight Office" this week, I had a
guy come over--he was straight, and he wants many things done his way.
If this sounds like you, then there are a number of vital points normally made available so that you can even get heart attack
during or after the operations; and a small screwdriver.

Anónimo dijo...

Even his former comrades to telefonsex
prisons on allegation of lewd behavior.

Anónimo dijo...

Bowflex did include a knob created to swiftly rectify this, but quite a few people locate how the cords get tangled and you also
have to have to consider a bit of the frame off for getting them
straightened out again.

Feel free to surf to my web blog: bowflex select tech dumbbells

Anónimo dijo...

Teaching every single big body component (shoulders, again, chest, legs) over once each
individual five days is totally needless.

Feel free to visit my web page; best adjustable dumbbells

Anónimo dijo...

Lie flat n your back again and maintain one's body straight.

Here is my web blog ... bowflex selecttech dumbbells

Anónimo dijo...

This is why intensive but lower effect cardio can be done with the Bowflex
equipment.

My site: bowflex dumbbells 552

Anónimo dijo...

As a final point, to perform baseball you'll want to have the ability to run at the drop of the hat, or bat given that the circumstance maybe.

Also visit my site - mouse click the next document

Julio César dijo...

alguien me puede pasar todo el codigo empaquetado(compilado)..gracias

Julio César dijo...

alguien me puede pasar todo el codigo empaquetado(compilado)..gracias

Anónimo dijo...

Me gusta usar con MySQL - la mejor herramienta gratuita de Valentina Studio, hace todo lo que necesito, y lo hace muy bien http://www.valentina-db.com/en/valentina-studio-overview

Anónimo dijo...

hola que tal me gusto mucho tu ejemplo pero tengo una pregunta esto no se puede hacer conexion en html? como vista solo seria en html.
se podra no podrias ayudarme?
gracias

jona1590 dijo...

Muy buena info me ayudo muchísimo gracias :) pero me podrías decir cómo puedo hacer para que cuando cambie la información de las calificaciones en la tabla de abajo se actualice también en la base de datos?

akuma manson dijo...

me da este eror,espero y me puedan ayudar,gracias:
Imposible realizar conexion con jdbc:mysql://localhost/javamysql ... FAIL
Exception in thread "main" java.lang.NullPointerException
at javamysql.JavaMysql.main(JavaMysql.java:33)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)