En este primer ejemplo desarrollaremos un
pequeño sistema para dar mantenimiento a una tabla de base de datos. Como la
utilizaremos para ponernos al día e ir entrando en calor, será lo más sencillo
posible.
1. Ambiente de desarrollo
- JDK v1.7.0.27
- Netbeans v7.1.2
- MySql v5.1.61
2. Tecnologías de desarrollo
- Java Swing
- JDBC
3. Manos a la obra
3. Manos a la obra
3.1. Como mencioné al inicio de este post, la
aplicación que crearemos será para darle mantenimiento a una tabla de base de
datos: tabla de clientes.
Para esto, primero creamos la base de datos y
la tabla clientes mediante el siguiente estructura:
3.2. Luego de tener nuestra base de datos
"swdefabrica" y la tabla clientes, vamos al Netbeans y creamos un
nuevo proyecto web. Para esto, pulsamos las teclas CTRL + N, seleccionamos Java
y Java Application, le asignamos un nombre finalizamos.
3.3. Agregamos las librerias que necesitemos, en este caso son las necesarias
para conexión a base de datos (mysql)
3.4
En el paquete edu.pe.cibertec.sql
creamos la clase (clic derecho en el paquete, new, Java class) ConectaBD, para
poder conectarnos con nuestra base de datos MySql.
package edu.pe.cibertec.sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConectaBD {
public Connection getConnection (){
Connection cn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
cn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/prueba",
"root",
"root");
} catch (SQLException e2) {
System.out.println("Error :
" + e2.getMessage());
}catch(Exception e){
System.out.println("Error:
" + e.getMessage());
}
return
cn;
}
}
3.5. Luego de esto creamos nuestro objeto
Cliente (la clase cliente con todos los atributos necesarios) en el paquete edu.pe.cibertec.dto.
Para esto hacemos clic derecho en el paquete, new, Java class.
3.6. Luego de crear nuestra clase Cliente, y
para manejar todos sus métodos (o acciones que podremos realizar sobre un
cliente) creamos la interfaz ClienteDAO en el paquete edu.pe.cibertec.dao
(clic derecho en el paquete, new, Java interface) y la implementamos mediante
la clase ClienteDAOImpl (en estas capas se realiza el trabajo con
conexión a base de datos) que creamos en el paquete edu.pe.cibertec.dao.impl
(clic derecho en el paquete, new, Java class), como se ven en las siguientes codigo:
ClienteDAO
package
edu.pe.cibertec.dao;
import
edu.pe.cibertec.dto.Cliente;
import
java.util.List;
public interface ClienteDao {
public List<Cliente> list();
public String insertar (Cliente cliente);
public Integer idCliente();
public Cliente get(Integer id);
public String delete (Integer id);
public String update (Cliente cliente);
}
Clase ClienteDAOImpl
package
edu.pe.cibertec.dao.impl;
import
edu.pe.cibertec.dao.ClienteDao;
import
edu.pe.cibertec.dto.Cliente;
import
edu.pe.cibertec.sql.ConectaBD;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class ClienteDaoImpl
implements ClienteDao {
public ConectaBD db;
public ClienteDaoImpl() {
db = new ConectaBD();
}
@Override
public List<Cliente> list() {
List<Cliente> list = null;
String sql = "select * from
cliente";
try {
Connection cn = db.getConnection();
PreparedStatement st =
cn.prepareStatement(sql);
ResultSet rs =
st.executeQuery(sql);
list = new
ArrayList<Cliente>();
while (rs.next()) {
Cliente c = new
Cliente();
c.setIdcliente(rs.getInt(1));
c.setNombre(rs.getString(2));
c.setApellidos(rs.getString(3));
c.setDni(rs.getString(4));
c.setDireccion(rs.getString(5));
list.add(c);
}
} catch (SQLException e) {
System.out.println("Error :
" + e.getMessage());
}
return list;
}
@Override
public String insertar(Cliente cliente) {
String result = null;
String sql = "INSERT INTO cliente
(nombre,apellidos,dni,direccion)"
+ "VALUES (?,?,?,?)";
try {
Connection cn = db.getConnection();
PreparedStatement ps =
cn.prepareStatement(sql);
ps.setString(1,
cliente.getNombre());
ps.setString(2,
cliente.getApellidos());
ps.setString(3, cliente.getDni());
ps.setString(4,
cliente.getDireccion());
ps.executeUpdate();
ps.close();
cn.close();
} catch (SQLException e) {
result = e.getMessage();
}
return result;
}
// es es un metodo que obtiene un sele
@Override
public Integer idCliente() {
Integer id = 0;
String sql = "select max(idcliente)
+ 1 as codigo from cliente";
try {
Connection cn = db.getConnection();
PreparedStatement ps =
cn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
id = rs.getInt(1);
}
ps.close();
cn.close();
System.out.println("" +
id.getClass());
} catch (SQLException e) {
System.out.println("Error :
" + e.getMessage());
}
return id;
}
@Override
public Cliente get(Integer id) {
Cliente cliente = null;
String sql = "select * from
cliente where idcliente=?";
try {
Connection cn = db.getConnection();
PreparedStatement ps =
cn.prepareStatement(sql);
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
cliente = new Cliente();
if (rs.next()) {
cliente.setIdcliente(rs.getInt(1));
cliente.setNombre(rs.getString(2));
cliente.setApellidos(rs.getString(3));
cliente.setDni(rs.getString(4));
cliente.setDireccion(rs.getString(5));
}
cn.close();
ps.close();
} catch (SQLException e) {
System.out.println("Error :
" + e.getMessage());
}
return cliente;
}
@Override
public String delete(Integer id) {
String result = null;
String sql = "delete from cliente
where idcliente =?";
try {
Connection cn = db.getConnection();
PreparedStatement ps =
cn.prepareStatement(sql);
ps.setInt(1, id);
ps.executeUpdate();
} catch (SQLException e) {
result = e.getMessage();
}
return result;
}
@Override
public String update(Cliente cliente) {
String result = null;
String sql = "UPDATE cliente"
+ " SET nombre
=?,apellidos =?,dni =?,direccion =?"
+ "WHERE idcliente =
?";
try {
Connection cn = db.getConnection();
PreparedStatement ps =
cn.prepareStatement(sql);
ps.setString(1,
cliente.getNombre());
ps.setString(2,
cliente.getApellidos());
ps.setString(3, cliente.getDni());
ps.setString(4,
cliente.getDireccion());
ps.setInt(5,
cliente.getIdcliente());
ps.executeUpdate();
cn.close();
ps.close();
} catch (SQLException e) {
result = e.getMessage();
}
return result;
}
}
3.7. Luego creamos en el paquete edu.pe.cibertec.negocio (clic derecho en el paquete, new, Java class), como se ven en las siguientes codigo:
package
edu.pe.cibertec.negocio;
import
edu.pe.cibertec.dao.ClienteDao;
import
edu.pe.cibertec.dao.impl.ClienteDaoImpl;
import
edu.pe.cibertec.dto.Cliente;
import java.util.List;
public class ClienteNE {
ClienteDao clienteDao;
public ClienteNE() {
clienteDao = new ClienteDaoImpl();
}
public List<Cliente> list() {
return clienteDao.list();
}
public String insertarCliente(Cliente cliente) {
return clienteDao.insertar(cliente);
}
public Integer idCliente(){
return clienteDao.idCliente();
}
public Cliente getInteger(Integer id) {
return clienteDao.get(id);
}
public String delete(Integer id) {
return clienteDao.delete(id);
}
public String update(Cliente cliente) {
return
clienteDao.update(cliente);
}
}
3.8.
Luego creamos en el paquete edu.pe.cibertec.presentacion
(clic derecho en el paquete, new, Jframe Form),
como se ven en las siguientes codigo:
public
ClienteNE clienteNE;
public List<Cliente> lista;
public Cliente cliente;
DefaultTableModel modelo;
public
boolean opcion=false;
public FrmManCLiente() {
initComponents();
this.setLocationRelativeTo(null);
this.setTitle("Acceso a base de
datos Mysql");
clienteNE= new ClienteNE();
codCliente();
cargarCliente();
}
public
final void cargarCliente(){
String[] titulos = {"Codigo",
"Nombres", "Apellidos", "Dni",
"Direccion"};
modelo = new DefaultTableModel(null,
titulos);
String[] fila = new String[5];
lista= clienteNE.list();
for(Cliente c :lista){
fila[0]=String.valueOf(c.getIdcliente());
fila[1]=c.getNombre();
fila[2]=c.getApellidos();
fila[3]=c.getDni();
fila[4]=c.getDireccion();
modelo.addRow(fila);
}
tblCliente.setModel(modelo);
}
public
void asignarEntradas (){
cliente =new Cliente();
cliente.setIdcliente(Integer.parseInt(txtCodigo.getText()));
cliente.setNombre(txtNombre.getText());
cliente.setApellidos(txtApellidos.getText());
cliente.setDni(txtDni.getText());
cliente.setDireccion(txtDireccion.getText());
System.out.println("apellidos: "
+ cliente.getApellidos());
System.out.println("Nombres: " +
cliente.getNombre());
}
public void BuscarClinte (Integer id
){
cliente =
clienteNE.getInteger(id);
if(cliente.getIdcliente()!=null){
txtCodigo.setText(String.valueOf(cliente.getIdcliente()));
txtNombre.setText(String.valueOf(cliente.getNombre()));
txtApellidos.setText(String.valueOf(cliente.getApellidos()));
txtDni.setText(String.valueOf(cliente.getDni()));
txtDireccion.setText(String.valueOf(cliente.getDireccion()));
}else{
JOptionPane.showMessageDialog(null,
"Datos no encontrados");
}
}
public void eliminarCliente (){
Integer id = Integer.parseInt(txtCodigo.getText());
String rpta = clienteNE.delete(id);
if(rpta ==null){
JOptionPane.showMessageDialog(null,
"cliente Eliminado");
}else{
JOptionPane.showMessageDialog(null,
"Error al eliminar cliente" + rpta);
}
}
public void codCliente (){
Integer id=clienteNE.idCliente();
txtCodigo.setText(String.valueOf(id)
);
}
public void insertarCliente (){
String rpta;
asignarEntradas();
rpta=clienteNE.insertarCliente(cliente);
if(rpta == null){
JOptionPane.showMessageDialog(null,
"Cliente Agregado con exito");
}else{
JOptionPane.showMessageDialog(null,
"Error en Ingreso" + rpta);
}
}
public
void actualizarCliente (){
String rpta;
asignarEntradas();
rpta=clienteNE.update(cliente);
if(rpta == null){
JOptionPane.showMessageDialog(null,
"Cliente Agregado con exito");
}else{
JOptionPane.showMessageDialog(null,
"Error en Ingreso" + rpta);
}
}
Codigo
del formulario
private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
insertarCliente();
cargarCliente();
}
private void txtDireccionActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
}
private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
Integer id =
Integer.valueOf(txtCodigo.getText());
BuscarClinte(id);
}
private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
eliminarCliente();
cargarCliente();
}
private void btnModificarActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
actualizarCliente();
cargarCliente();
}
Formulario
Oye Eras no me deja llenar la tabla, me marca error este error:
ResponderEliminar- Error: Can't use query methods that take a query string on a PreparedStatement.
esta mal tu consulta creo
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminar