- Conectar nuestra aplicación java a la base de datos.
- Recorrer las tablas de la base de datos.
*ESTE CÓDIGO ES PARA JAVA SE, NO FUNCIONA PARA ANDROID. SI QUIERES HACER UNA CONEXIÓN MYSQL CON ANDROID PINCHA AQUÍ
Bien, no voy a explicar en este tema como montar un servicio mysql, ya que me quedaría demasiado extenso, más adelante es posible que me anime, pero por el momento vamos a ver solamente el código necesario para conectarnos a nuestra base de datos y recorrer sus tablas. Podéis buscar en Google como montar un servicio mysql, hay tutoriales a patadas.
Bien, no voy a explicar en este tema como montar un servicio mysql, ya que me quedaría demasiado extenso, más adelante es posible que me anime, pero por el momento vamos a ver solamente el código necesario para conectarnos a nuestra base de datos y recorrer sus tablas. Podéis buscar en Google como montar un servicio mysql, hay tutoriales a patadas.
Lo primero de todo es descargarnos la librería o conector para poder trabajar con mysql:
[descargar conector]
Es imprescindible para poder conectar nuestra base de datos. Así pues, para cada tipo de motor de base de datos necesitaremos su librería o conector, lo cual, normalmente, se ofrece en la página principal del fabricante que utilicemos. Es algo muy común.
una vez descargado el conector, lo agregamos en nuestro proyecto, para ello hacemos lo siguiente:
En el constructor levantaremos la conexión y la obtendremos, para ello seguiremos 2 sencillos pasos:
Es imprescindible para poder conectar nuestra base de datos. Así pues, para cada tipo de motor de base de datos necesitaremos su librería o conector, lo cual, normalmente, se ofrece en la página principal del fabricante que utilicemos. Es algo muy común.
una vez descargado el conector, lo agregamos en nuestro proyecto, para ello hacemos lo siguiente:
- Pulsamos sobre nuestro proyecto con el botón derecho del ratón y pulsamos, al final de la lista desplegable, en propiedades.
- En la siguiente ventana que se nos abre, elegiremos la pestaña "Biblioteca" y pulsaremos sobre la opción "Añadir JAR externo...", donde nos permitirá elegir nuestro conector descargado:
Bien, ya tenemos nuestra librería dentro de nuestro proyecto. Antes de nada me gustaría agregar que voy a trabajar sobre una base de datos llamada empresa con una tabla llamada empleados. Dicha tabla constara de 3 columnas:
Bueno, ahora lo que nos toca crear es una clase capaz de establecer una conexión. Esta clase constará de 4 atributos:
- private static String servidor: Aquí colocaremos la ruta de nuestra base de datos.
- private static String user: El nombre de usuario de mysql
- private static String pass: La clave de usuario de mysql
- private static String driver: Nuestra librería mysql.
Y crearemos un objeto de la clase Connection del paquete java.sql para crear la conexión:
- private static Connection conexion: Nos devuelve la conexión.
Como veis, establezco la ruta del servidor, utilizo el usuario y el pass que viene por defecto en mysql, indico la posición del driver y creo el objeto Connection.
En el constructor levantaremos la conexión y la obtendremos, para ello seguiremos 2 sencillos pasos:
- Levantar el driver.
- Establecer la conexión.
Bien, con el método estático de la clase "class" levanto el driver que le paso por argumentos:
- Class.forName(driver);
Con el objeto Conecction obtengo la conexión por medio del método estático getConnection de la clase DriverManager, pasándole por argumentos el servidor, el usuario y el pass:
- conexion=DriverManager.getConnection(servidor,user,pass);
Bien, esta clase establece la conexión, ahora vamos a crear otra clase que se encargue de:
- Insertar valores
- Seleccionar valores
- Borrar valores
- Modificar valores
Nuestra clase tendrá 5 atributos:
- Un objeto de la clase escaner para leer desde teclado.
- Un objeto Connection para obtener la conexión a la base de datos.
- Un objeto tipo String para el nombre.
- Un objeto de tipo String para el departamento.
- Una variable de tipo int para las opciones del menú.
Bueno, ahora crearemos una sentencia condicional switch, dentro de un bucle do/while, para que vaya dándonos las opciones que queramos realizar hasta salir de la aplicación, y todo esto, dentro del método MAIN:
Bueno, aquí podéis ver las opciones que tendrá nuestro menú:
Bueno, aquí podéis ver las opciones que tendrá nuestro menú:
- Insertar
- Modificar
- Eliminar
- Mostrar
- Salir
En el blucle do/while establecemos que no se saldrá del menú hasta que la opción 5 sea elegida. Ahora vamos a ir explicando los métodos realizados para completar todas las funciones del menú:
INSERTAR:
Por pasos:
- Cargamos nuestra conexión.
- conexion=new Conexion();
- Pasamos al objeto Connection de esta clase la conexión de la clase "Conexion" por medio de nuestro método getConnection():
- Connection con=conexion.getConnection();
- Creamos un objeto de la clase Statement, la cual será la encargada de procesar la sentencia sql que le pasemos e interactuar con nuestra base de datos.
- Statement st;
- Pedimos los datos por pantalla y por medio del objeto teclado de la clase Scanner, leemos los datos que deseemos agregar. Una cosa antes de continuar, es que, aunque mi tabla consta de 3 campos, yo tengo establecido el primero (ID) como primary key, y he establecido que se auto-incremente, por lo tanto no tengo que introducirselo.
- Una vez introducido los datos, creamos la sentencia sql para insertarlos en nuestra base de datos.
- String sql="insert into empleados(nombre,departamento) values ('"+nombre+"','+departamento+"')";
- Hay que darse cuenta que los "values" que le pasamos han de estar entre comillas simples ''.
- Establecemos la comunicación entre nuestra aplicación java y la base de datos:
- st=con.createStatement();
- Le indicamos que ejecute la actualización de la tabla y le pasamos por argumentos nuestra sentencia sql:
- st.executeUpdate(sql);
- Cerramos las conexiones, en orden inverso a su apertura:
- st.close();
- con.close();
Con esto ya podremos insertar filas en nuestra base de datos.
Modificar:
Por pasos:
- Cargamos nuestra conexión.
- conexion=new Conexion();
- Pasamos al objeto Connection de esta clase la conexión de la clase "Conexion" por medio de nuestro método getConnection():
- Connection con=conexion.getConnection();
- Creamos un objeto de la clase Statement, la cual será la encargada de procesar la sentencia sql que le pasemos e interactuar con nuestra base de datos.
- Statement st;
- Pedimos por teclado el número de ID del registro a modificar y se lo asignamos a una variable tipo int llamada "n", posteriormente volvemos a pedir el nombre y el departamento para modificarlos.
- Creamos nuestra sentencia sql:
- String sql="update empleados set nombre='"+nombre+"', departamento='"+departamento+"' where id="+n;
- Establecemos la comunicación entre nuestra aplicación java y la base de datos:
- st=con.createStatement();
- Le indicamos que ejecute la actualización de la tabla y le pasamos por argumentos nuestra sentencia sql:
- st.executeUpdate(sql);
- Cerramos las conexiones, en orden inverso a su apertura:
- st.close();
- con.close();
Esta vez le he puesto una sentencia "if" para que me avise de si se modifico con éxito o no. Con esto podremos modificar nuestros registros.
Eliminar:
Lo mismo que anteriormente:
- Cargamos nuestra conexión.
- conexion=new Conexion();
- Pasamos al objeto Connection de esta clase la conexión de la clase "Conexion" por medio de nuestro método getConnection():
- Connection con=conexion.getConnection();
- Creamos un objeto de la clase Statement, la cual será la encargada de procesar la sentencia sql que le pasemos e interactuar con nuestra base de datos.
- Statement st;
- Introducimos por teclado el registro a eliminar.
- Creamos nuestra sentencia sql:
- String sql="delete from empleados where id="+n;
- Establecemos la comunicación entre nuestra aplicación java y la base de datos:
- st=con.createStatement();
- Le indicamos que ejecute la actualización de la tabla y le pasamos por argumentos nuestra sentencia sql:
- st.executeUpdate(sql);
- Cerramos las conexiones, en orden inverso a su apertura:
- st.close();
- con.close();
Llegados a este punto, ya te deberías de dar cuenta de que lo único que cambio es la sentencia sql, el resto es un copy/paste, para que veas que no es tan complicado como parece.
Mostrar:
Esta varía un poco con respecto a las otras:
- Cargamos nuestra conexión.
- conexion=new Conexion();
- Pasamos al objeto Connection de esta clase la conexión de la clase "Conexion" por medio de nuestro método getConnection():
- Connection con=conexion.getConnection();
- Creamos un objeto de la clase Statement, la cual será la encargada de procesar la sentencia sql que le pasemos e interactuar con nuestra base de datos.
- Statement st;
- Creamos un objeto de la clase ResultSet que será la encargada de devolvernos los resultados de los registros:
- ResultSet rs;
- Creamos nuestra sentencia sql:
- String sql="select * from empleados";
- Establecemos la comunicación entre nuestra aplicación java y la base de datos:
- st=con.createStatement();
- Le pasamos al objeto de ResultSet el resultado de ejecutar la sentencia sql:
- rs=st.executeQuery(sql);
- En este caso no actualizamos la tabla (executeUpdate()), sino que realizamos una consulta (executeQuery());
- Por medio de un bucle while vamos recorriendo valores mientras existan (rs.next()) y por medio de los métodos getInt y getString obtenemos los valores de las diferentes columnas, tened en cuenta de que le tenemos que pasar el número de columna:
- while (rs.next){
- System.out.println("ID:"+rs.getInt(1));
- System.out.println("Nombre: "+rs.getString(2));
- System.out.println("Departamento: "+rs.getString(3));
- System.out.println("**************************");
- }
- Cerramos las conexiones, en orden inverso a su apertura:
- rs.close();
- st.close();
- con.close();
Bien, con esto doy por terminada la entrada, mencionar que esto es algo muy básico del JDBC pero suficiente para empezar a explorarlo. Un saludo a todos.
hola .oye ya hice todo como en el tutorial pero no me realiza la conexión . me quedo de esta forma
ResponderEliminarprivate static String servidor="jdbc:mysql://10.0.2.2/empresa";
private static String user="root";//nombre del usuario
private static String pass="vertrigo";//claves
private static String driver="com.mysql.jdbc.Driver";
private static Connection conexion;
Buenas Omar.
EliminarAsí tal cual me lo muestras no se decirte que te falla. ¿Te salta alguna excepción o algún error?, ¿el user y el pass son correctos?. puedes probar a cambiar la ip por "127.0.0.0" si estas ejecutando la conexión en la misma red que tu base de datos....
Necesito más datos para poder evaluar tu problema.
Un saludo.
falta el puerto en la URl 10.0.2.2:3306/.. para mysql
EliminarSegún la documentación de android, no es posible realizar conexiones directas con bases de datos en versiones de android superiores a la 3, sobre un hilo principal, para poderlo hacer es necesario iniciar un hilo adicional. Ese codigo funciona para la version 2.3.
ResponderEliminarBuenas Dario, veo que te has leído la documentación android, eso está bien, pero déjame que te corrija en una cosa, este código está escrito para JAVA SE, es decir, para crear aplicaciones de escritorio, no móviles. Ya sé que es posible usar este código para versiones anteriores a la versión 3 de Android, pero harías de tu App un colador en lo que a seguridad se refiere.
EliminarPara este tipo de conexiones en android necesitas:
1. Una base de datos corriendo en un servidor.
2. Un WebService que se comunique con el servidor y con tu app.
3. Una conexión por medio de la clase HttpClient de la API de Apache.
4. Correrlo todo en una clase que herede de AsyncTask (Esta clase maneja los hilos en android).
Si necesitas ayuda con el código y/u orientación en algún aspecto, puedes mandarme un email personal a bartolomeabellan@gmail.com
Un saludo.
Buenisimo, pero, disculpa, soy nuevo en Java, ¿cómo lo hago por ejemplo para invocar esta clase y abrir la conexión en el menú principal de mi aplicación que es un formulario MDI?, ya tengo agregada la clase al proyecto. En NetBeans
ResponderEliminarBuenas Mauricio; si te refieres a que ya has copiado la clase "conexión ", con hacer
EliminarConexión conexión= new Conexion();
Connection connection= conexion.getConnection();
Con esto, en tu clase principal, ya tendrías tu conexión establecida, ya solo te faltaría utilizar la clase statment y resultset para el manejo de datos.
Espero haber resuelto tu duda. Un saludo
Buenas cuando ejecuto el programa me dice que se corrio en 4 segundos pero no me muestra el mensaje de conexion estsblecida,
ResponderEliminarBuenas Oscar;
Eliminar¿Te salta alguna exception? Si no te salta ninguna exception es posible que sea problema del servidor. Si estas completamente seguro de que no es problema del servidor, necesito más datos. Si no deseas que la gente vea tu código o tu log, puedes enviarme la información a bartolomeabellan@gmail.com. Pero ya te digo, que si no te salta ninguna exception, es muy posible que sea problema de tu servidor mysql, o del cortafuegos de tu pc (algún problema me dio el cortafuegos en alguna ocasión). Suerte.
Buen día Bartolomé,me podría auxiliar como detecto si es problema es del servidor, estoy jalando mi base desde mysql comand line, pero eso no tiene nada que ver o si??,, o como detecto el problema si esta en el cortafuegos
Eliminarhola está muy bueno e tuutorial gracs me sirvió de algo gracs
ResponderEliminaruna consulta tambien utilizas IDE netbeans??
Utilizo principalmente Eclipse, no por nada, simplemente me gusta más, pero si, tengo Netbeans y alguna vez lo he utilizado. Su paleta de desarrollo es muy buena, mejor incluso que la de eclipse, pero Netbeans genera código por si solo que no puedes modificar, y es muy pesado, de ahí que me guste más eclipse.
Eliminarhola que tal, muy buena explicacion, pero solo tengo una pregunta, a que clase pertenece la declaracion de la funcion Scanner?
ResponderEliminargracias!
Buenas, no se si te he entendido bien, pero ¿te refieres a la linea private static Scanner teclado=new Scanner(System.in)? La clase es Scanner, no hay ninguna función, que yo haya entendido.
EliminarLa clase Scanner es una clase que nos proporciona java desde su versión 5 que nos permite leer datos por teclado, por ejemplo, y que podamos manejarlos a nuestro antojo. Le paso por constructor "System.in" para indicarle el tipo de entrada y que va a obtener datos por consola. Aunque en este ejemplo la utilizo para leer datos desde teclado, tiene otras utilidades.
No se si he respondido a tu duda.
Un saludo.
Saludos amigo. llegue a tu tutorial... pero me pregunto, en que momento haces la selecciona de la base de datos?...
ResponderEliminarEn la clase Conexion hay una String llamada servidor que pone: "jdbc:mysql://localhost/Empresa", ahí pongo la ruta de mi DB. Posteriormente ,en el constructor, le paso los parámetros (servidor, user, pass) por medio de DriverManager.getConnection a la clase Connection, que es la que hace la conexión:
Eliminarconexion=Drivermanager.getConnection(servidor, user, pass).
En esa linea realizo la conexión a mi BD y posteriormente en las sentencias sql realizo las consultas a las tablas de mi BD.
Un saludo.
Hola, me ha encantado el tutorial, muchas gracias! Veo que trabajas sobre una base de datos que ya tenías previamente creada, pero ¿cómo hago para crear una nueva base y sus tablas en JDBC?
ResponderEliminarBuenas marc;
EliminarNo se pueden crear bases de datos en un proyecto, es decir, no con java; te explico
Mysql, por ejemplo, es un programa externo a tu programa java, al cual tu haces conexiones por medio de un driver, es decir, se comunican entre ellos y se pasan información, pero son independientes, si tu instalas tu proyecto en varios equipos, esos equipos tendrán que tener una base de datos en cada pc exactamente igual, por lo que la mejor opción, que yo utilizo, es montar un servidor apache con mysql con lo puedes instalar tu proyecto en cientos de equipos y una base de datos sirviendo a todo el mundo.
Otra opción, seria con sqlite, crear una base de datos, estas bases de datos van en archivos que se crean sqlite, por lo que solo tendrías que agregar ese archivo a tu proyecto como un archivo normal y copiarlo en la carpeta de instalación.
Si te decantas por mysql, busca en google "Tutorial Apache+Mysql" y si te decides por sqlite "Crear BAse de daatos Sqlite", te pondria yo mismo los links pero no se si violo la nueva ley de propiedad intelectual :S
Un saludo.
Saludos Bartolomé, te hago una pregunta, mira
ResponderEliminarHe desarrollado una aplicacion de escritorio en java con conexion a una bd en mysql por medio de xampp como servidor local.
me puedes explicar como alojar una base de datos a un servidor web donde mi aplicacion se comunica a la base de datos desde cual quier computador ??
gracias , espero pronto alguna respuestaaaa
jajajajaja "espero pronto alguna respuesta", esas respuestas no las esperes pronto. Bueno, mira Angel Reyes, si ya montaste un servidor xampp puedes registrar un DNS de alguna compañia que se dedique como DynDns, la mayoria de los routers traen configuración para el mismo y poder configurar usuario y contraseña y tener un subdominio. habria que configurar cortafuegos del router y del computador. si no te la quieres quebrar puedes rentar un servidor que tenga instalado MySql e igual habria que configurar. te recomiendo investigar paso por paso ahorita la ventaja es que san google lo dice todo. saludos atte. Alejandro
EliminarHola saludos:
ResponderEliminarEstoy haciendo un programa que en primera instancia debo ingresar una dirección IP, el puerto y presionar un botón CONTECAR para establecer una conexión con un software de computadora llamado Hércules SETUP Utility, este debe mandar un mensaje pequeño () dando a conocer que realmente se llevo a cabo una conexión.
Pero no se como realizar dicha conexión. La verdad no había trabajado con programas que usaran Sockets TCP/IP.
¿Me podría ayudar por favor?
De antemano muchas gracias, quedo en espera de su respuesta, Saludos cordiales
muchas gracias, esta muy claro todo y paso a paso, te lo agradezco. Saludos.
ResponderEliminarHola.
ResponderEliminarSoy estudiante, y me gustaria saber la forma de realizar un metodo main, para comprobar la conexion.
Estoy tratando de conectar mi programa Java a un hosting.
Pero no encuentro la forma de comprobar la conexion.
Seria de gran ayuda, que supieras como. Muchas Gracias.
public class Conexion {
//no se si falta el puerto :3306
private static String servidor = "jdbc:mysql://mysql.hostinger.mx/u433066093_santa";
private static String user = "u433066093_shaw"; //nombre del usuario
private static String pass = "Break"; //contraseña
private static String driver = "con.mysql.jdbs.Driver";
private static Connection con;
public Conexion(){
try {
Class.forName(driver); //Levato el driver
con = DriverManager.getConnection(servidor, user, pass); //Establezco conexion
JOptionPane.showMessageDialog(null, "Conexion realizada con exito");
} catch (ClassNotFoundException | SQLException e){
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "Conexion fallida");
}
}
public Connection getConnection(){
return con; //Devuelvo el objeto con
}
}