Ik ben een applicatie aan het maken in Java waarbij ik een aantal gegevens moet toevoegen aan een MYSQL
database.
Dit toevoegen van de gegevens gebeurd via een GUI met daarin een 3tal JTextFields en 2 JTextAreas. De gebruiker voert daar dus zijn gegevens in en als de gebruiker vervolgens op de JButton: "voeg toe" drukt worden de gegevens in de database toegevoegd. Alleen hier kom ik dus niet uit. Ik heb nu de volgende code:
De connectie klasse die de verbinding met de database vormt ( De verbinding werkt goed ).
[code=java]
public class Connectie {
private String host = "localhost";
private String user = "root";
private String password = "";
private String databasenaam = "kreta";
Connection connection;
public void displaySQLErrors(Exception e) {
String error;
error = "SQL foutmelding: " + e.getMessage();
JOptionPane.showMessageDialog(null, error, "foutmelding", JOptionPane.ERROR_MESSAGE);
System.out.println("SQL error:" + e.getMessage());
}
public Connectie() {
try {
Class.forName("com.mysql.jdbc.Driver"). newInstance();
}
catch(Exception e){
String error = "Niet mogelijk om de driver te laden";
JOptionPane.showMessageDialog(null, error, "foutmelding", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
try {
connection = DriverManager.getConnection("jdbc:mysql://" + this.host + "/" + this.databasenaam + "?user=" + this.user + "&password=" + this.password);
String succes = "Er is een connectie met de database";
JOptionPane.showMessageDialog(null, succes, "succes", JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception e) {
displaySQLErrors(e);
}
}
}
[/code=java]
De afhaalmenus klasse:
[code=java]
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
public class afhaalmenus {
private Connectie con;
private int menu_id;
private String naam_gerecht;
private int prijs;
private String ingredienten;
private String recept;
private Vector vec;
public afhaalmenus() {
con = new Connectie();
vec = new Vector();
}
public afhaalmenus(int menu_id, String naam_gerecht, int prijs, String ingredienten, String recept){
this();
this.menu_id = menu_id;
this.naam_gerecht = naam_gerecht;
this.prijs = prijs;
this.ingredienten = ingredienten;
this.recept = recept;
}
public int getmenu_id() {
return this.menu_id;
}
public void setmenu_id(){
this.menu_id = menu_id;
}
public String getNaam_gerecht() {
return this.naam_gerecht;
}
public void setNaam_gerecht(){
this.naam_gerecht = naam_gerecht;
}
public int getPrijs() {
return this.prijs;
}
public void setPrijs(){
this.prijs = prijs;
}
public String getIngredienten() {
return this.ingredienten;
}
public void setIngredienten(){
this.ingredienten = ingredienten;
}
public String getRecept() {
return this.recept;
}
public void setRecept(){
this.recept = recept;
}
public void leesMenus(int id) {
try { Statement statement = con.connection.createStatement();
String gget;
gget = "SELECT DISTINCT * FROM afhaalmenus WHERE (id = \"" + id + "\");";
ResultSet rs = statement.executeQuery(gget);
rs.next();
this.menu_id = rs.getInt(1);
this.naam_gerecht = rs.getString(2);
this.prijs = rs.getInt(3);
this.ingredienten = rs.getString(4);
this.recept = rs.getString(5);
System.out.println(this.menu_id);
}
catch(Exception e){
}
}
public void schrijfKaart() {
try { Statement statement = con.connection.createStatement();
String gget;
gget = "SELECT afhaalmenus.id FROM afhaalmenus";
ResultSet rs = statement.executeQuery(gget);
rs.last();
this.menu_id = (rs.getInt(1) + 1);
} catch (Exception e) {
con.displaySQLErrors(e);
}
try {
Statement statement = con.connection.createStatement();
String sset;
sset = "INSERT INTO 'afhaalmenus' ('menu_id', 'naam_gerecht', 'prijs', 'ingredienten', 'recept')VALUES ('" +
this.menu_id + "', '" + this.naam_gerecht + "', '" + this.prijs + "', '" +
this.ingredienten + "', '" + this.recept + "');";
statement.executeUpdate(sset);
}
catch(Exception e){
System.out.println("foutje");
}
}
public void bewerkKaart() {
try {Statement statement = con.connection.createStatement();
String sset;
sset = "UPDATE afhaalmenus" + " SET naam_gerecht = '" + this.naam_gerecht + "', " +
"prijs = '" + this.prijs + "', " + "ingredienten = '" + this.ingredienten + "', " +
"recept = '" + this.recept + "' " +
" WHERE afhaalmenus.id = " + this.menu_id;
statement.executeUpdate(sset);
}
catch(Exception e){
}
}
public void wisKaart(){
try {Statement statement = con.connection.createStatement();
String sset;
sset = "DELETE FROM afhaalmenus WHERE menu_id = " + this.menu_id;
statement.executeUpdate(sset);
}
catch(Exception e){
}
}
public Vector leesAlleKaarten(){
try { Statement statement = con.connection.createStatement();
String gget;
gget = "SELECT DISTINCT * FROM afhaalmenus;";
ResultSet rs = statement.executeQuery(gget);
while (rs.next()) {
Vector vRow = new Vector();
for(int x = 1; x <= 5; x++){
vRow.addElement(rs.getString(x));
}
vec.add(vRow);
}
} catch (Exception e) {
con.displaySQLErrors(e);
}
return vec;
}
}
[/code=java]
En de GUI klasse die de GUi opzet:
[code=java]
public class GUI extends afhaalmenus {
private JLabel naam;
private JLabel gerecht;
private JLabel prijs;
private JLabel recept;
private JLabel ingredienten;
private JFrame frame2;
private JPanel panel;
private JPanel panel2;
private JTextField naam1;
private JTextField gerecht1;
private JTextField prijs1;
private JTextArea recept1;
private JTextArea ingredienten1;
private JButton nieuw;
private JButton voegtoe;
private JButton bewerk;
private JButton wisknoppen;
private JList lijst;
private JLabel gerecht2;
public GUI(){
Connectie con = new Connectie();
afhaalmenus ak = new afhaalmenus();
Vector tabel = ak.leesAlleKaarten();
frame2 = new JFrame();
panel = new JPanel();
panel2 = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
naam = new JLabel("ID van het gerecht:");
gerecht = new JLabel("Naam van het gerecht:");
prijs = new JLabel("De prijs:");
ingredienten = new JLabel("De Ingredienten:");
recept = new JLabel("Het recept:");
naam1 = new JTextField();
gerecht1 = new JTextField();
prijs1 = new JTextField();
recept1 = new JTextArea();
ingredienten1 = new JTextArea();
nieuw = new JButton("Nieuw");
voegtoe = new JButton("Voeg toe");
bewerk = new JButton("bewerk");
wisknoppen = new JButton("Wis");
lijst = new JList(tabel);
gerecht2 = new JLabel("Het overzicht van alle gerechten:");
nieuw.addActionListener(new NieuwListener());
voegtoe.addActionListener(new voegtoeListener());
bewerk.addActionListener(new bewerkListener());
wisknoppen.addActionListener( new wisknoppenListener());
naam1.addActionListener(new naam1Listener());
gerecht1.addActionListener(new gerecht1Listener());
prijs1.addActionListener(new prijs1Listener());
recept1.addActionListener(new recept1Listener());
ingredienten1.addActionListener(new ingredienten1Listener());
panel.add(naam);
panel.add(naam1);
panel.add(gerecht);
panel.add(gerecht1);
panel.add(prijs);
panel.add(prijs1);
panel.add(ingredienten);
panel.add(ingredienten1);
panel.add(recept);
panel.add(recept1);
panel.add(nieuw);
panel.add(voegtoe);
panel.add(bewerk);
panel.add(wisknoppen);
panel2.add(gerecht2);
panel2.add(lijst);
frame2.getContentPane().add(BorderLayout.CENTER, panel2);
frame2.getContentPane().add(BorderLayout.WEST, panel);
frame2.setSize(1200,1000);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setVisible(true);
}
public class NieuwListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
}
}
public class voegtoeListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
schrijfKaart();
}
}
public class bewerkListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
}
}
public class wisknoppenListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
wisKaart();
}
}
public class naam1Listener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String menu_id = naam1.getText();
setmenu_id();
}
}
public class gerecht1Listener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String gerecht_naam = gerecht1.getText();
setNaam_gerecht();
}
}
public class prijs1Listener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String prijs = prijs1.getText();
setPrijs();
}
}
public class recept1Listener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String recept = recept1.getText();
setRecept();
}
}
public class ingredienten1Listener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String ingredienten = ingredienten1.getText();
setIngredienten();
}
}
public static void main(String[] args) {
GUI gui = new GUI();
}
}
[/code=java]
Zoals te zien is heb ik nu een action listener toegevoegd aan alle JTextfields en JTextareasdie dan de waarde daarvan leest en vervolgens wordt dan de waarde van ingredienten bepaald. Dit moet dan allemaal overgebracht worden naar de schrijfMenu methode die alles in 1 keer toevoegt aan de database.
Alleen waarschijnlijk moet de gebruiker ook eerst op enter drukken voordat de gegevens uit de JTextfield gelezen worden en dit moet eigenlijk niet. Ik wil dat de gebruiker gewoon de waardes in de JTextfields en JTextAreas invoert en dan gelijk op de "voeg toe JButton" kan drukken en dat dan alle gegevens in de database toegevoegd worden.
Alleen ik heb dus geen idee hoe ik dit precies doe. Kan hier iemand aangeven hoe ik dit het beste aan kan pakken?
database.
Dit toevoegen van de gegevens gebeurd via een GUI met daarin een 3tal JTextFields en 2 JTextAreas. De gebruiker voert daar dus zijn gegevens in en als de gebruiker vervolgens op de JButton: "voeg toe" drukt worden de gegevens in de database toegevoegd. Alleen hier kom ik dus niet uit. Ik heb nu de volgende code:
De connectie klasse die de verbinding met de database vormt ( De verbinding werkt goed ).
[code=java]
public class Connectie {
private String host = "localhost";
private String user = "root";
private String password = "";
private String databasenaam = "kreta";
Connection connection;
public void displaySQLErrors(Exception e) {
String error;
error = "SQL foutmelding: " + e.getMessage();
JOptionPane.showMessageDialog(null, error, "foutmelding", JOptionPane.ERROR_MESSAGE);
System.out.println("SQL error:" + e.getMessage());
}
public Connectie() {
try {
Class.forName("com.mysql.jdbc.Driver"). newInstance();
}
catch(Exception e){
String error = "Niet mogelijk om de driver te laden";
JOptionPane.showMessageDialog(null, error, "foutmelding", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
try {
connection = DriverManager.getConnection("jdbc:mysql://" + this.host + "/" + this.databasenaam + "?user=" + this.user + "&password=" + this.password);
String succes = "Er is een connectie met de database";
JOptionPane.showMessageDialog(null, succes, "succes", JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception e) {
displaySQLErrors(e);
}
}
}
[/code=java]
De afhaalmenus klasse:
[code=java]
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
public class afhaalmenus {
private Connectie con;
private int menu_id;
private String naam_gerecht;
private int prijs;
private String ingredienten;
private String recept;
private Vector vec;
public afhaalmenus() {
con = new Connectie();
vec = new Vector();
}
public afhaalmenus(int menu_id, String naam_gerecht, int prijs, String ingredienten, String recept){
this();
this.menu_id = menu_id;
this.naam_gerecht = naam_gerecht;
this.prijs = prijs;
this.ingredienten = ingredienten;
this.recept = recept;
}
public int getmenu_id() {
return this.menu_id;
}
public void setmenu_id(){
this.menu_id = menu_id;
}
public String getNaam_gerecht() {
return this.naam_gerecht;
}
public void setNaam_gerecht(){
this.naam_gerecht = naam_gerecht;
}
public int getPrijs() {
return this.prijs;
}
public void setPrijs(){
this.prijs = prijs;
}
public String getIngredienten() {
return this.ingredienten;
}
public void setIngredienten(){
this.ingredienten = ingredienten;
}
public String getRecept() {
return this.recept;
}
public void setRecept(){
this.recept = recept;
}
public void leesMenus(int id) {
try { Statement statement = con.connection.createStatement();
String gget;
gget = "SELECT DISTINCT * FROM afhaalmenus WHERE (id = \"" + id + "\");";
ResultSet rs = statement.executeQuery(gget);
rs.next();
this.menu_id = rs.getInt(1);
this.naam_gerecht = rs.getString(2);
this.prijs = rs.getInt(3);
this.ingredienten = rs.getString(4);
this.recept = rs.getString(5);
System.out.println(this.menu_id);
}
catch(Exception e){
}
}
public void schrijfKaart() {
try { Statement statement = con.connection.createStatement();
String gget;
gget = "SELECT afhaalmenus.id FROM afhaalmenus";
ResultSet rs = statement.executeQuery(gget);
rs.last();
this.menu_id = (rs.getInt(1) + 1);
} catch (Exception e) {
con.displaySQLErrors(e);
}
try {
Statement statement = con.connection.createStatement();
String sset;
sset = "INSERT INTO 'afhaalmenus' ('menu_id', 'naam_gerecht', 'prijs', 'ingredienten', 'recept')VALUES ('" +
this.menu_id + "', '" + this.naam_gerecht + "', '" + this.prijs + "', '" +
this.ingredienten + "', '" + this.recept + "');";
statement.executeUpdate(sset);
}
catch(Exception e){
System.out.println("foutje");
}
}
public void bewerkKaart() {
try {Statement statement = con.connection.createStatement();
String sset;
sset = "UPDATE afhaalmenus" + " SET naam_gerecht = '" + this.naam_gerecht + "', " +
"prijs = '" + this.prijs + "', " + "ingredienten = '" + this.ingredienten + "', " +
"recept = '" + this.recept + "' " +
" WHERE afhaalmenus.id = " + this.menu_id;
statement.executeUpdate(sset);
}
catch(Exception e){
}
}
public void wisKaart(){
try {Statement statement = con.connection.createStatement();
String sset;
sset = "DELETE FROM afhaalmenus WHERE menu_id = " + this.menu_id;
statement.executeUpdate(sset);
}
catch(Exception e){
}
}
public Vector leesAlleKaarten(){
try { Statement statement = con.connection.createStatement();
String gget;
gget = "SELECT DISTINCT * FROM afhaalmenus;";
ResultSet rs = statement.executeQuery(gget);
while (rs.next()) {
Vector vRow = new Vector();
for(int x = 1; x <= 5; x++){
vRow.addElement(rs.getString(x));
}
vec.add(vRow);
}
} catch (Exception e) {
con.displaySQLErrors(e);
}
return vec;
}
}
[/code=java]
En de GUI klasse die de GUi opzet:
[code=java]
public class GUI extends afhaalmenus {
private JLabel naam;
private JLabel gerecht;
private JLabel prijs;
private JLabel recept;
private JLabel ingredienten;
private JFrame frame2;
private JPanel panel;
private JPanel panel2;
private JTextField naam1;
private JTextField gerecht1;
private JTextField prijs1;
private JTextArea recept1;
private JTextArea ingredienten1;
private JButton nieuw;
private JButton voegtoe;
private JButton bewerk;
private JButton wisknoppen;
private JList lijst;
private JLabel gerecht2;
public GUI(){
Connectie con = new Connectie();
afhaalmenus ak = new afhaalmenus();
Vector tabel = ak.leesAlleKaarten();
frame2 = new JFrame();
panel = new JPanel();
panel2 = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS));
naam = new JLabel("ID van het gerecht:");
gerecht = new JLabel("Naam van het gerecht:");
prijs = new JLabel("De prijs:");
ingredienten = new JLabel("De Ingredienten:");
recept = new JLabel("Het recept:");
naam1 = new JTextField();
gerecht1 = new JTextField();
prijs1 = new JTextField();
recept1 = new JTextArea();
ingredienten1 = new JTextArea();
nieuw = new JButton("Nieuw");
voegtoe = new JButton("Voeg toe");
bewerk = new JButton("bewerk");
wisknoppen = new JButton("Wis");
lijst = new JList(tabel);
gerecht2 = new JLabel("Het overzicht van alle gerechten:");
nieuw.addActionListener(new NieuwListener());
voegtoe.addActionListener(new voegtoeListener());
bewerk.addActionListener(new bewerkListener());
wisknoppen.addActionListener( new wisknoppenListener());
naam1.addActionListener(new naam1Listener());
gerecht1.addActionListener(new gerecht1Listener());
prijs1.addActionListener(new prijs1Listener());
recept1.addActionListener(new recept1Listener());
ingredienten1.addActionListener(new ingredienten1Listener());
panel.add(naam);
panel.add(naam1);
panel.add(gerecht);
panel.add(gerecht1);
panel.add(prijs);
panel.add(prijs1);
panel.add(ingredienten);
panel.add(ingredienten1);
panel.add(recept);
panel.add(recept1);
panel.add(nieuw);
panel.add(voegtoe);
panel.add(bewerk);
panel.add(wisknoppen);
panel2.add(gerecht2);
panel2.add(lijst);
frame2.getContentPane().add(BorderLayout.CENTER, panel2);
frame2.getContentPane().add(BorderLayout.WEST, panel);
frame2.setSize(1200,1000);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setVisible(true);
}
public class NieuwListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
}
}
public class voegtoeListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
schrijfKaart();
}
}
public class bewerkListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
}
}
public class wisknoppenListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
wisKaart();
}
}
public class naam1Listener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String menu_id = naam1.getText();
setmenu_id();
}
}
public class gerecht1Listener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String gerecht_naam = gerecht1.getText();
setNaam_gerecht();
}
}
public class prijs1Listener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String prijs = prijs1.getText();
setPrijs();
}
}
public class recept1Listener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String recept = recept1.getText();
setRecept();
}
}
public class ingredienten1Listener implements ActionListener {
public void actionPerformed (ActionEvent e) {
String ingredienten = ingredienten1.getText();
setIngredienten();
}
}
public static void main(String[] args) {
GUI gui = new GUI();
}
}
[/code=java]
Zoals te zien is heb ik nu een action listener toegevoegd aan alle JTextfields en JTextareasdie dan de waarde daarvan leest en vervolgens wordt dan de waarde van ingredienten bepaald. Dit moet dan allemaal overgebracht worden naar de schrijfMenu methode die alles in 1 keer toevoegt aan de database.
Alleen waarschijnlijk moet de gebruiker ook eerst op enter drukken voordat de gegevens uit de JTextfield gelezen worden en dit moet eigenlijk niet. Ik wil dat de gebruiker gewoon de waardes in de JTextfields en JTextAreas invoert en dan gelijk op de "voeg toe JButton" kan drukken en dat dan alle gegevens in de database toegevoegd worden.
Alleen ik heb dus geen idee hoe ik dit precies doe. Kan hier iemand aangeven hoe ik dit het beste aan kan pakken?