Код: Выделить всё
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();
}
});
}
}
Интерфейсы Statement, ReadedStatement, Connection, ResultSet реализуют интерфейс AutoCloseable, который можно использовать в блоках try с ресурсами, чтобы ресурс автоматически закрывался.
работает ли это?
не знаю?
пожалуйста, помогите
В блоках catch он отображается рядом с сообщением об исключении и sql, которая это определила Метод выполненияUpdate() используется для запуска команд SQL вставки, обновления и удаления. Метод возвращает количество строк, на которые влияет оператор SQL. Команды обновления и удаления могут влиять на все строки таблицы, от отсутствия строки, в зависимости от условия в предложенииwhere Фактические значения параметров были установлены методами setInt(parameter_no, value) или setString(parameter_no, value) На этот раз доступ к столбцам ResultSet осуществлялся путем указания индекса столбца, а не его имени
Подробнее здесь: https://stackoverflow.com/questions/798 ... to-use-sql
Мобильная версия