Hola buenas, tengo un problemilla con un programa de Java que como estoy aun aprendiendo no consigo sacarlo.
El problema es que tengo una base de datos en MySQL y quiero recoger informacion, agregar y quitar cosas de la base de datos desde Java, pero el problema viene cuando intento consultar los datos de la base de datos que tengo las siguientes columnas:
Codigo Descripcion Precio Stock
y yo quiero que me busque una descripcion que le ponga yo y me devuelva el precio y el stock pero nose pq la parte donde pongo que lo busque en la tabla solo funciona con numeros no con caracteres, solo funciona si le pongo que me busque "codigo" y me devuelve el precio y stock y nose como solucionarlo para que pueda meterle yo la descripcion, tal como pongo en el la parte del programa.
Consultar = new JButton("Consultar");
Consultar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Resultado.setText("");
tf2.setText("No existe dicho Articulo"); // Articulo
tf3.setText("0"); // Precio
tf4.setText("0"); // Stock
try {
Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/tienda","root" ,"");
Statement comando=conexion.createStatement();
ResultSet registro = comando.executeQuery("SELECT `Descripcion`, `Precio`, `Stock` FROM `articulos` WHERE `Descripcion`="+tf1.getText());
if (registro.next()==true) {
tf2.setText(registro.getString("Descripcion"));
tf3.setText(registro.getString("Precio"));
tf4.setText(registro.getString("Stock"));
Resultado.setText("Articulo encontrado");
} else {
Resultado.setText("No existe un artículo con dicha descripcion");
}
conexion.close();
} catch(SQLException ex){
setTitle(ex.toString());
}
}
});
El codigo completo es el siguiente:
package Tienda;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Tienda extends JFrame
{
private JPanel contenido;
private JTextField tf1; // tf1 es texto a consultar
private JTextField tf2; // tf2 es articulo consultado
private JTextField tf3; // tf3 es precio consultado
private JTextField tf4; // tf4 es stock consultado
private JTextField tf5; // tf5 es el articulo a agregar
private JTextField tf6; // tf6 es el precio a agregar
private JTextField tf7; // tf7 es la cantidad a agregar
private JTextField tf8; // tf8 es el articulo a eliminar
private JTextField tf9; // tf10 es la cantidad a eliminar
private JButton Consultar;
private JButton Agregar;
private JLabel ConsultarCodigo;
private JLabel AgregarCodigo;
private JLabel EliminarCodigo;
private JLabel Resultado;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Tienda frame = new Tienda();
frame.setSize(570, 450);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Tienda() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contenido = new JPanel();
contenido.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contenido);
contenido.setLayout(null);
// tf1.setEditable(false); para decir que el texto no se puede editar
//
// CONSULTAR
//
ConsultarCodigo = new JLabel("Ingrese el articulo a Consultar:");
ConsultarCodigo.setBounds(60, 30, 243, 14);
contenido.add(ConsultarCodigo);
JLabel DescripcionDelArtculo = new JLabel("Consultar artículo:");
DescripcionDelArtculo.setBounds(23, 65, 193, 14);
contenido.add(DescripcionDelArtculo);
tf1 = new JTextField();
tf1.setBounds(140, 63, 120, 20);
contenido.add(tf1);
tf1.setColumns(10);
// Articulo
JLabel Articulo = new JLabel("Artículo:");
Articulo.setBounds(293, 37, 95, 14);
contenido.add(Articulo);
tf2 = new JTextField();
tf2.setBounds(380, 32, 150, 20);
contenido.add(tf2);
tf2.setColumns(10);
tf2.setEditable(false);
// Precio
JLabel Precio = new JLabel("Precio:");
Precio.setBounds(293, 77, 95, 14);
contenido.add(Precio);
tf3 = new JTextField();
tf3.setBounds(380, 72, 150, 20);
contenido.add(tf3);
tf3.setColumns(10);
tf3.setEditable(false);
// Stock
JLabel Stock = new JLabel("Stock:");
Stock.setBounds(293, 117, 95, 14);
contenido.add(Stock);
tf4 = new JTextField();
tf4.setBounds(380, 112, 150, 20);
contenido.add(tf4);
tf4.setColumns(10);
tf4.setEditable(false);
//
// AGREGAR
//
AgregarCodigo = new JLabel("Agregar nuevo Artículo:");
AgregarCodigo.setBounds(60, 170, 243, 14);
contenido.add(AgregarCodigo);
// Agregar Articulo
JLabel ArticuloAdd = new JLabel("Artículo:");
ArticuloAdd.setBounds(23, 210, 95, 14);
contenido.add(ArticuloAdd);
tf5 = new JTextField();
tf5.setBounds(110, 210, 150, 20);
contenido.add(tf5);
tf5.setColumns(10);
// Agregar Precio
JLabel PrecioAdd = new JLabel("Precio:");
PrecioAdd.setBounds(23, 250, 95, 14);
contenido.add(PrecioAdd);
tf6 = new JTextField();
tf6.setBounds(110, 250, 150, 20);
contenido.add(tf6);
tf6.setColumns(10);
// Agregar Stock
JLabel CantidadAdd = new JLabel("Cantidad:");
CantidadAdd.setBounds(23, 290, 95, 14);
contenido.add(CantidadAdd);
tf7 = new JTextField();
tf7.setBounds(110, 290, 150, 20);
contenido.add(tf7);
tf7.setColumns(10);
//
// ELIMINAR
//
EliminarCodigo = new JLabel("Eliminar Artículo:");
EliminarCodigo.setBounds(360, 170, 243, 14);
contenido.add(EliminarCodigo);
// Eliminar Articulo
JLabel ArticuloDel = new JLabel("Artículo:");
ArticuloDel.setBounds(293, 225, 95, 14);
contenido.add(ArticuloDel);
tf8 = new JTextField();
tf8.setBounds(380, 225, 150, 20);
contenido.add(tf8);
tf8.setColumns(10);
// Eliminar Cantidad
JLabel CantidadDel = new JLabel("Cantidad:");
CantidadDel.setBounds(293, 275, 95, 14);
contenido.add(CantidadDel);
tf9 = new JTextField();
tf9.setBounds(380, 275, 150, 20);
contenido.add(tf9);
tf9.setColumns(10);
Resultado = new JLabel("");
Resultado.setBounds(150, 380, 400, 14);
contenido.add(Resultado);
cargarDriver();
// Boton Consultar
Consultar = new JButton("Consultar");
Consultar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Resultado.setText("");
tf2.setText("No existe dicho Articulo");
tf3.setText("0");
tf4.setText("0");
try {
Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/tienda","root" ,"");
Statement comando=conexion.createStatement();
ResultSet registro = comando.executeQuery("SELECT `Descripcion`, `Precio`, `Stock` FROM `articulos` WHERE `Descripcion`="+tf1.getText());
if (registro.next()==true) {
tf2.setText(registro.getString("Descripcion"));
tf3.setText(registro.getString("Precio"));
tf4.setText(registro.getString("Stock"));
Resultado.setText("Articulo encontrado");
} else {
Resultado.setText("No existe un artículo con dicha descripcion");
}
conexion.close();
} catch(SQLException ex){
setTitle(ex.toString());
}
}
});
Consultar.setBounds(45, 100, 193, 30);
contenido.add(Consultar);
// Boton de Agregar
Agregar = new JButton("Añadir articulo/s");
Agregar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Resultado.setText("");
try {
Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/tienda","root" ,"");
Statement comando=conexion.createStatement();
comando.executeUpdate("insert into articulos(Descripcion,Precio,Stock) values ('"+tf5.getText()+"',"+tf6.getText()+","+tf7.getText()+")");
conexion.close();
Resultado.setText("Se ha/n añadido el/los articulo/s");
tf5.setText("");
tf6.setText("");
tf7.setText("");
} catch(SQLException ex){
setTitle(ex.toString());
}
}
});
Agregar.setBounds(40, 330, 193, 30);
contenido.add(Agregar);
// Boton de Eliminar
JButton Eliminar = new JButton("Eliminar articulo");
Eliminar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Resultado.setText("");
try {
Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/tienda","root" ,"");
Statement comando=conexion.createStatement();
int cantidad = comando.executeUpdate("delete from articulos where descripcion="+tf8.getText());
if (cantidad==1) {
tf8.setText("");
tf9.setText("");
Resultado.setText("Se borro el artículo con dicha descripción");
} else {
Resultado.setText("No existe un artículo con dicha descripción");
}
conexion.close();
} catch(SQLException ex){
setTitle(ex.toString());
}
}
});
Eliminar.setBounds(320, 330, 193, 30);
contenido.add(Eliminar);
cargarDriver();
}
private void cargarDriver() {
try {
Class.forName("com.mysql.jdbc.Driver");
}catch(Exception ex) {
setTitle(ex.toString());
}
}
}
(recordar agregar mysql connector java si lo probais)
Gracias
recomiendo que imprime tu consulta por consola y luego prueba lo en la base de datos
tu consulta esta mal por que las cadenas en sql siempre van entre comillas
Select * from personal where nombre = 'pancho'
la siguiente consulta esta mal
Select * from personal where nombre = pancho
por que pancho es cadena y tiene que estar entre comillas y no lo esta
en tu caso
"SELECT `Descripcion`, `Precio`, `Stock` FROM `articulos` WHERE `Descripcion`="+tf1.getText
y lo que el servidor recibe es
SELECT `Descripcion`, `Precio`, `Stock` FROM `articulos` WHERE `Descripcion`=televisor
puedes corregirlo así
"SELECT `Descripcion`, `Precio`, `Stock` FROM `articulos` WHERE `Descripcion`= '"+tf1.getText+"' "
Imprime tu consulta System.out.println(); para que veas que te está enviando.
Además tienes un try catch, fijate que error te envía.
Descripción es de tipo varchar.
Así que debes colocar comillas en tu consulta en java.
String query="SELECT Descripcion, Precio, Stock FROM articulos WHERE Descripcion='"+tf1.getText()+"'";
ResultSet registro = comando.executeQuery(query);
Saludos.
Funciono!!!
Gracias por las respuestas llevaba 2 días con esto.