Tuesday, 12 May 2009

Trabajando con JDBC (MySQL - Prepared Statements)

Aquí os dejo un pequeño ejemplo utilizando JDBC (Prepared Statements ) con una BD MySQL. El ejemplo consiste en tener una pequeña tabla de usuarios y trabajar con esta, añadiendo, eliminando, visualizando, etc. los diferentes usuarios que tenemos en la tabla. El ejemplo es bastante simple y fácil de entender. Primero creo una tabla en la BD de MySQL llamada "users", la dejaré dentro de la BD que tengo de pruebas llamada "WebShop". La sentencia para crear la tabla en MySQL es la siguiente:

CREATE TABLE users (dni varchar(20),
name varchar(20),
surname varchar(20),
phone varchar(20));

El código fuente del ejemplo es el siguiente:

UsersJDBC.java




package MySQL.exercice;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class UsersJDBC {
private java.sql.Connection con = null;
private final String url = "jdbc:mysql://";
private final String serverName= "127.0.0.1";
private final String portNumber = "3306";
private final String databaseName= "webshop";
private final String userName = "root";
private final String password = "1234";

private String getConnectionUrl(){
return url + serverName + ":" + portNumber + "/" + databaseName;
}

private void closeConnection(){
try{
if(con!=null) con.close();
con=null;
}

catch(Exception e){
e.printStackTrace();
}
}

public void displayAllUsers(){
java.sql.ResultSet rs = null;
try{
con= this.getConnection();
if(con!=null){
Class.forName("org.gjt.mm.mysql.Driver");
con = java.sql.DriverManager.getConnection(getConnectionUrl(), userName, password);
Statement s = con.createStatement();
rs = s.executeQuery("select * from users");
System.out.println("Users:\n");
System.out.println("DNI Name Surname Phone Number");

while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getString(4));
}
System.out.println("\n");
rs.close();
rs = null;
closeConnection();
}
else System.out.println("Error: Connection is not allowed");
}
catch(Exception e){
e.printStackTrace();
}
}

private java.sql.Connection getConnection(){
try{
Class.forName("org.gjt.mm.mysql.Driver");
con = java.sql.DriverManager.getConnection(getConnectionUrl(),userName,password);
if(con!=null)
System.out.println("Connection OK.");
}
catch(Exception e){
e.printStackTrace();
System.out.println("Error following getConnection() : " + e.getMessage());
}
return con;
}

public void addNewUser(String dni, String name, String surname, String phone) {
try{
con= this.getConnection();
if(con!=null){
Class.forName("org.gjt.mm.mysql.Driver");
con = java.sql.DriverManager.getConnection(getConnectionUrl(), userName, password);
PreparedStatement s = con.prepareStatement("INSERT INTO users(dni, name, surname, phone) VALUES (?,?,?,?)");
s.setString(1, dni);
s.setString(2, name);
s.setString(3, surname);
s.setString(4, phone);
s.execute();
closeConnection();
}
else System.out.println("Error: Connection is not allowed");
}
catch(Exception e){
e.printStackTrace();
}
}

public void SearchUserByDNI(String dni) {
java.sql.ResultSet rs = null;
try{
con= this.getConnection();
if(con!=null){
Class.forName("org.gjt.mm.mysql.Driver");
con = java.sql.DriverManager.getConnection(getConnectionUrl(), userName, password);
PreparedStatement s = con.prepareStatement("SELECT * FROM users WHERE dni = ?");
s.setString(1, dni);
rs = s.executeQuery();
System.out.println("Users:\n");
System.out.println("DNI\t Name\t Surname\t Phone Number");
while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getString(4));
}
System.out.println("\n");
rs.close();
rs = null;
closeConnection();
}
else System.out.println("Error: Connection is not allowed");
}
catch(Exception e){
e.printStackTrace();
}
}

public void DeleteUserByDNI(String dni) {
try{
con= this.getConnection();
if(con!=null){
Class.forName("org.gjt.mm.mysql.Driver");
con = java.sql.DriverManager.getConnection(getConnectionUrl(), userName, password);
PreparedStatement s = con.prepareStatement("DELETE FROM users WHERE dni = ?");
s.setString(1, dni);
s.execute();
closeConnection();
}
else System.out.println("Error: Connection is not allowed");
}
catch(Exception e){
e.printStackTrace();
}
}

public static void main(String[] args) {
UsersJDBC myDbTest = new UsersJDBC();
int p=0;
while (true) {
System.out.print("Menu\n");
System.out.print("Choose one option:\n");
System.out.print("\n");
System.out.print("1 - add new User\n");
System.out.print("2 - delete user\n");
System.out.print("3 - search user by name\n");
System.out.print("4 - show users list\n");
System.out.print("5 - Exit\n");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
p = Integer.parseInt(br.readLine());
}
catch (IOException ioe) {
System.out.println("IO error trying to read your value!");
}
switch (p) {
case 1:
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("Enter DNI:\n");
String dni = br2.readLine();
System.out.print("Enter Name:\n");
String name = br2.readLine();
System.out.print("Enter Surname:\n");
String surname = br2.readLine();
System.out.print("Enter Phone number:\n");
String phone = br2.readLine();
myDbTest.addNewUser(dni, name, surname, phone);
}
catch (IOException ioe) {
System.out.println("IO error trying to read your value!");
}
break;
case 2:
BufferedReader br4 = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("Enter DNI:\n");
String dni = br4.readLine();
myDbTest.DeleteUserByDNI(dni);
}
catch (IOException ioe) {
System.out.println("IO error trying to read your value!");
}
break;
case 3:
BufferedReader br3 = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("Enter DNI:\n");
String dni = br3.readLine();
myDbTest.SearchUserByDNI(dni);
}
catch (IOException ioe) {
System.out.println("IO error trying to read your value!");
}
break;
case 4:
myDbTest.displayAllUsers();
break;
case 5:
System.exit(1);
break;
}
}
}
}





La ejecución de la aplicación muestra lo siguiente:

Al escoger una de las opciones, se generan las diversas consultas mediante prepared statements. Este ejemplo os puede dar una visión de como funcionan y como se declaran.

Acordaros de cargar el external jar mysql-connector-java-5.0.8-bin.jar.

  • Enlaces de interés:
http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html
http://www.jdbc-tutorial.com/jdbc-prepared-statements.htm

0 comments:

Post a Comment