У меня есть экзамен по Java, где мне нужно использовать sqlJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 У меня есть экзамен по Java, где мне нужно использовать sql

Сообщение Anonymous »

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»