Soy un novato aquí y yo tengo una pregunta que me estoy pasando tiempos difíciles de conseguir una respuesta. Necesito configurar un programa en Java que podría permitir que el usuario introduzca los valores en una base de datos la base de lo que escriba en el campo de texto. Aquí están las 3 clases que he creado:

public class Odabrani{
public int id;
String ime;
String prezime;
public Odabrani(int id, String ime, String prezime){
this.id=id;
this.ime=ime;
this.prezime=prezime;
}
}
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class MySQL{ 
public static Connection connect() throws InstantiationException, ClassNotFoundException, IllegalAccessException, SQLException{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/prodavnica", "root", "");
return conn;
}
public static void Obrisi(int id) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
Connection conn = connect();
Statement st = (Statement) conn.createStatement();
st.execute("delete from prodavac where id = " + id);
conn.close();
}
public static List<Prodavac> GetProdavci() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
Connection conn = connect();
Statement st = (Statement) conn.createStatement();
st.executeQuery("select * from prodavac");
ResultSet rs = st.getResultSet();
List<Prodavac> pr = new ArrayList<Prodavac>();
while(rs.next()){
pr.add(new Prodavac(rs.getInt(1),rs.getString(2),rs.getString(3)));
//String ime = rs.getString(2);
}
conn.close();
return pr;
}
public static void Dodaj(String ime, String prezime) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
Connection conn = connect();
PreparedStatement pst = conn.prepareStatement("insert into prodavac (id, ime, prezime) values (null,' ,' ) + ime, prezime;");
conn.close();
}
}
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.List;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JRootPane;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author v
*/
**public class Main** {
static TextField unos;
public static Prodavac odabrani_prodavac;
public static JComboBox c;
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException{
Frame f = new Frame("Biblioteka");
f.setSize(300, 300);
f.setLocation(300, 300);
f.setVisible(true);
f.setLayout(new FlowLayout()); 
c = new JComboBox();
List l = new List();
unos = new TextField(20);
f.add(unos);
unos.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
MySQL.Dodaj(odabrani_prodavac.ime, odabrani_prodavac.prezime);
} catch (InstantiationException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
Button b = new Button("obrisi");
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(odabrani_prodavac!=null)
try {
MySQL.Obrisi(odabrani_prodavac.id);
c.removeAllItems();
java.util.List<Prodavac> prlist = MySQL.GetProdavci();
for(Prodavac p: prlist)
c.addItem(p);
} catch (InstantiationException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
java.util.List<Prodavac> prlist = MySQL.GetProdavci();
for(Prodavac p: prlist)
c.addItem(p);
f.add(c);
f.add(b);
c.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED){
Prodavac p = (Prodavac)e.getItem();
odabrani_prodavac = p;
JOptionPane.showMessageDialog(null, "Odabrali ste: " + p.toString());
}
}
});
}
}

Ahora, si usted presta atención a esto, se puede ver que los delete() y gettAll() métodos de trabajo perfecto, pero es el método insert(s) que me molestan. ¿Cómo puedo jugar este código en cuestión, de manera que el texto que el usuario escribe en el se almacenan en una base de datos. Por favor avise. Gracias! Ivan

  • Su Insert declaración tiene un error de sintaxis, por favor vuelva a leer la sintaxis de la misma.
  • Como una nota del lado, debe usted acaba de publicar el código que es relevante para el problema. En su caso, que usted ha mencionado el «método insert(s)». Es mucho más fácil solucionar problemas pequeños fragmentos de código…
  • Ok, aquí está el código en cuestión que yo creo que los errores pueden provenir de:
  • El código es demasiado largo para tirar, pero, de nuevo: unos = new TextField(20); f.agregar(unos), Botón a = new Button(«insert»); f.agregar(a); una.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(unos!=null) /*aquí es donde algunos pieza de código debe venir a la vista. Básicamente se debe leer como si hay cualquier texto escrito en el campo de texto ponerlo en una base de datos llamando al método insert de MySQL clase: MySQL.Dodaj(Cadena de ime, Cadena de prezime).¿Cómo puedo llegar a obtener el texto en el campo de texto 2B almacenados en la base de datos?*/

2 Comentarios

  1. 1

    Cambiar su instrucción insert para

    PreparedStatement pst = conn.prepareStatement("insert into prodavac (id, ime, prezime) values (null,'"+ime+"','"+prezime+"'" ); 
    • Hola, el código me parece bien, pero mi programa sigue tirando errores en mí, que podría tener algo que ver con la forma en que el texto de entrada se coloca en una base de datos, el evento de la acción en la clase principal? No tengo idea?
    • ¿Me puedes mostrar los errores??
    • Excepción en el thread «AWT-EventQueue-0» java.lang.NullPointerException en el Principal de$1.actionPerformed(Principal.java:47) en java.awt.TextField.processActionEvent(TextField.java:594) en java.awt.TextField.processEvent(TextField.java:562) en java.awt.Componente.dispatchEventImpl(Componente.java:4630) en java.awt.Componente.dispatchEvent(Componente.java:4460) en java.awt.EventQueue.dispatchEvent(EventQueue.java:599) en java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    • en java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) en java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) en java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) en java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) en java.awt.EventDispatchThread.ejecutar(EventDispatchThread.java:122)
    • Se intenta de esta PreparedStatement pst = conn.prepareStatement("insert into prodavac (ime, prezime) values ('"+ime+"','"+prezime+"'" );
  2. 1

    PreparedStatement proporciona marcador de posición de caracteres para proteger contra La Inyección de SQL ataques, así como manejar la inserción de cualquier cita que puede ser requerida. También si id es un incremento automático campo, puede omitir este de la SQL:

    PreparedStatement pst = 
    conn.prepareStatement("insert into prodavac (ime, prezime) values (?, ?)");
    pst.setString(1, ime);
    pst.setString(2, prezime);
    pst.executeUpdate();
    • sí, el auto_increment fue puesto en la columna de id así que todo lo que tienes que hacer es poner el nombre y apellido de él, pero incluso después de aplicar el código del programa no está funcionando, ¿eh?
    • Hizo llamar a executeUpdate? Ver la actualización
    • Sí Señor, yo lo hice.
    • OK chicos, gracias por su ayuda este puzzle ha sido finalmente reconstruido. El principal problema surgió de mi incapacidad para obtener el texto a partir del texto presentado y, a continuación, insértelo en la tabla. Así que lo que hice puse otro textField donde yo voy a estar recibiendo el nombre y apellido de entrada de, poner como parámetros en MySQL.Dodaj() método y avanzó a partir de ahí. Mi SQL me estaba pidiendo que inserte caracteres comodín(?,?,?) en representación de la entrada del usuario, por lo que este programa de la mina a mi me funciona perfecto ahora. Gracias a todos por su asistencia.

Dejar respuesta

Please enter your comment!
Please enter your name here