i have a java exam test twhere i need to use sql
01:58 23 Jan 2026
package aplicatie;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;

public class MainApp extends JFrame {
    private JList jList;
    private DefaultListModel listModel;
    private JTextField txtTara, txtStatie, txtNumarObiective;
    private JButton btnAdauga, btnSterge;
    private Connection connection;
    
    public MainApp() {
        setTitle("Gestiune Destinații Turistice");
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout(10, 10));
        
        // Conectare la baza de date
        conectareBazaDate();
        
        // Panou de sus pentru afișare
        JPanel panouSus = new JPanel(new BorderLayout());
        panouSus.setBorder(BorderFactory.createTitledBorder("Destinații Turistice"));
        
        listModel = new DefaultListModel<>();
        jList = new JList<>(listModel);
        JScrollPane scrollPane = new JScrollPane(jList);
        panouSus.add(scrollPane, BorderLayout.CENTER);
        
        // Buton ștergere sub listă
        btnSterge = new JButton("Șterge Destinație Selectată");
        btnSterge.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                stergeDestinatie();
            }
        });
        panouSus.add(btnSterge, BorderLayout.SOUTH);
        
        // Panou de jos pentru adăugare
        JPanel panouJos = new JPanel(new GridLayout(4, 2, 5, 5));
        panouJos.setBorder(BorderFactory.createTitledBorder("Adăugare Destinație Nouă"));
        
        panouJos.add(new JLabel("Țara:"));
        txtTara = new JTextField();
        panouJos.add(txtTara);
        
        panouJos.add(new JLabel("Stațiunea:"));
        txtStatie = new JTextField();
        panouJos.add(txtStatie);
        
        panouJos.add(new JLabel("Număr Obiective:"));
        txtNumarObiective = new JTextField();
        panouJos.add(txtNumarObiective);
        
        btnAdauga = new JButton("Adaugă Destinație");
        btnAdauga.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                adaugaDestinatie();
            }
        });
        panouJos.add(new JLabel(""));
        panouJos.add(btnAdauga);
        
        add(panouSus, BorderLayout.CENTER);
        add(panouJos, BorderLayout.SOUTH);
        
        // Încărcare date inițiale
        incarcaDate();
        
        setLocationRelativeTo(null);
        setVisible(true);
    }
    
    private void conectareBazaDate() {
        String url = "jdbc:mysql://localhost:3306/turism";
        try {
            connection = DriverManager.getConnection(url, "root", "root");
            creeazaTabelDacaNuExista();
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this, 
                "Eroare la conectarea la baza de date: " + e.getMessage(),
                "Eroare Conexiune", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    private void creeazaTabelDacaNuExista() {
        String sql = "CREATE TABLE IF NOT EXISTS destinatii (" +
                     "id INT AUTO_INCREMENT PRIMARY KEY, " +
                     "tara VARCHAR(50), " +
                     "statie VARCHAR(50), " +
                     "numar_obiective INT)";
        try (Statement statement = connection.createStatement()) {
            statement.executeUpdate(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    private void incarcaDate() {
        listModel.clear();
        String sql = "SELECT * FROM destinatii";
        
        try (Statement statement = connection.createStatement();
             ResultSet rs = statement.executeQuery(sql)) {
            
            while (rs.next()) {
                int id = rs.getInt("id");
                String tara = rs.getString("tara");
                String statie = rs.getString("statie");
                int numarObiective = rs.getInt("numar_obiective");
                
                String linie = String.format("%s, %s, %d", tara, statie, numarObiective);
                listModel.addElement(linie);
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this, 
                "Eroare la încărcarea datelor: " + e.getMessage(),
                "Eroare", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    private void adaugaDestinatie() {
        String tara = txtTara.getText().trim();
        String statie = txtStatie.getText().trim();
        String numarObStr = txtNumarObiective.getText().trim();
        
        if (tara.isEmpty() || statie.isEmpty() || numarObStr.isEmpty()) {
            JOptionPane.showMessageDialog(this, 
                "Vă rugăm să completați toate câmpurile!",
                "Câmpuri Incomplete", JOptionPane.WARNING_MESSAGE);
            return;
        }
        
        try {
            int numarObiective = Integer.parseInt(numarObStr);
            
            String sql = "INSERT INTO destinatii (tara, statie, numar_obiective) VALUES (?, ?, ?)";
            
            try (PreparedStatement ps = connection.prepareStatement(sql)) {
                ps.setString(1, tara);
                ps.setString(2, statie);
                ps.setInt(3, numarObiective);
                
                int randuri = ps.executeUpdate();
                
                if (randuri > 0) {
                    JOptionPane.showMessageDialog(this, 
                        "Destinația a fost adăugată cu succes!",
                        "Succes", JOptionPane.INFORMATION_MESSAGE);
                    
                    // Golire câmpuri
                    txtTara.setText("");
                    txtStatie.setText("");
                    txtNumarObiective.setText("");
                    
                    // Reîncărcare date
                    incarcaDate();
                }
            }
            
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, 
                "Numărul de obiective trebuie să fie un număr întreg!",
                "Format Invalid", JOptionPane.ERROR_MESSAGE);
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this, 
                "Eroare la adăugarea destinației: " + e.getMessage(),
                "Eroare", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    private void stergeDestinatie() {
        int index = jList.getSelectedIndex();
        
        if (index == -1) {
            JOptionPane.showMessageDialog(this, 
                "Vă rugăm să selectați o destinație din listă!",
                "Nicio Selecție", JOptionPane.WARNING_MESSAGE);
            return;
        }
        
        String linie = listModel.getElementAt(index);
        String[] parti = linie.split(", ");
        String tara = parti[0];
        String statie = parti[1];
        
        int confirmare = JOptionPane.showConfirmDialog(this,
            "Sigur doriți să ștergeți destinația: " + tara + ", " + statie + "?",
            "Confirmare Ștergere", JOptionPane.YES_NO_OPTION);
        
        if (confirmare == JOptionPane.YES_OPTION) {
            String sql = "DELETE FROM destinatii WHERE tara = ? AND statie = ?";
            
            try (PreparedStatement ps = connection.prepareStatement(sql)) {
                ps.setString(1, tara);
                ps.setString(2, statie);
                
                int randuri = ps.executeUpdate();
                
                if (randuri > 0) {
                    JOptionPane.showMessageDialog(this, 
                        "Destinația a fost ștearsă cu succes!",
                        "Succes", JOptionPane.INFORMATION_MESSAGE);
                    
                    incarcaDate();
                }
                
            } catch (SQLException e) {
                e.printStackTrace();
                JOptionPane.showMessageDialog(this, 
                    "Eroare la ștergerea destinației: " + e.getMessage(),
                    "Eroare", JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new MainApp();
            }
        });
    }
}

used code

Interfeţele Statement, PreparedStatement, Connection, ResultSet implementează interfaţa AutoCloseable, putând fi folosite în blocuri try cu resurse, pentru ca resursa să fie închisă automat

does it work?

idk?

please help

În blocurile catch se afişează pe lângă mesajul excepţiei şi comanda sql care a determinat-o Metoda executeUpdate() este utilizată pentru a rula comenzile SQL insert, update şi delete. Metoda returnează numărul de rânduri afectate de comanda SQL. Comenzile update şi delete pot afecta de la nici un rând până la toate rândurile din tabelă, în funcţie de condiţia din clauza where Valorile efective ale parametrilor au fost stabilite prin metodele setInt(nr_parametru,valoare) sausetString(nr_parametru,valoare)  Accesarea coloanelor din ResultSet s-a făcut de această dată precizând index-ul coloanei, nu denumirea acesteia

java