Java HDSQL Java daten hinzufügen

NichtExpert

Lt. Junior Grade
Registriert
Feb. 2020
Beiträge
465
Hallo Liebe Community,
Ich brauch dringende Hilfe. Und zwar:
Ich habe bisher eine java GUI geschrieben. In dieser GUI habe ich eine Tabelle (JTable) und eben Daten drin.
Einen Filter konnte ich auch schon einbauen und ScrollPane auch.
Die GUI habe ich mit HDSQL verbunden (Von dort kommen die Daten).

Nun soll man jedoch noch Zeilen hinzufügen, bearbeiten und löschen können.
ich habe es mir noch nicht ganz ausgemalt wie es gehen soll, ist eigentlich egal, ob mit button oder wie genau...
Ich bräuchte nur mal einen Ansatz. Dann könnte ich es bestimmt selber vervollständigen.

Ich habe mich auch schon umgeschaut, wie es geht bwz. gehen könnte und werde einfach nicht schlau aus den ganzen "Fitzel-Codes". Ich bräuchte entweder kurze Beispiele, Lösungen auf mein Programm abgestimmt oder sowas in der Art.
Ich bin schon auf Begriffe wie
Execute-Insert, -Update, -Delete oder -batch gestoßen.
Dann habe ich schon etwas über JPA gehört und einer hatte was von Hibernate erzählt. Diese kenne ich nicht und würde gerne bei JDBC bleiben, außer ihr könntet mir dabei helfen und sagen wie es geht und ob man das ganze zwingend braucht.

Bedanke mich jetzt schon mal



Code:

package AA_Test;

import java.awt.EventQueue;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class MyForm extends JFrame {

/**
* Launch the application
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MyForm frame = new MyForm();
frame.setVisible(true);
}
});
}

/**
* Create the Frame
*/
public MyForm() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 580, 242);
setTitle("ThaiCreate.Com Java GUI Tutorial");
getContentPane().setLayout(null);

// Scrollpane
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(64, 44, 440, 89);
getContentPane().add(scrollPane);

// Table
JTable table = new JTable();
scrollPane.setViewportView(table); /////////////////

// Model for Table
DefaultTableModel model = (DefaultTableModel)table.getModel(); //////////////
model.addColumn("CustomerID");
model.addColumn("Name");
model.addColumn("Email");
model.addColumn("CountryCode");
model.addColumn("Budget");
model.addColumn("Used");


JLabel lblFilter = new JLabel("Filter :");
lblFilter.setBounds(158, 147, 72, 14);
getContentPane().add(lblFilter);

// Filter
final JTextField txtFilter = new JTextField();
txtFilter.setBounds(197, 144, 129, 20);
getContentPane().add(txtFilter);

// Header Sort
final TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(model);
table.setRowSorter(sorter);

// Button OK
JButton btnOK = new JButton("OK");
btnOK.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
String expr = txtFilter.getText();
sorter.setRowFilter(RowFilter.regexFilter(expr));
sorter.setSortKeys(null);
}
});
btnOK.setBounds(336, 144, 59, 23);
getContentPane().add(btnOK);

Connection connect = null;
Statement s = null;

try {
Class.forName("com.mysql.cj.jdbc.Driver");

connect = DriverManager.getConnection("jdbc:mysql://localhost/test","till","Tillerni02");

s = connect.createStatement();

String sql = "SELECT * FROM customer ORDER BY CustomerID ASC";

ResultSet rec = s.executeQuery(sql);
int row = 0;
while ((rec!=null) && (rec.next()))
{
model.addRow(new Object[0]);
model.setValueAt(rec.getString("CustomerID"), row, 0);
model.setValueAt(rec.getString("Name"), row, 1);
model.setValueAt(rec.getString("Email"), row, 2);
model.setValueAt(rec.getString("CountryCode"), row, 3);
model.setValueAt(rec.getFloat("Budget"), row, 4);
model.setValueAt(rec.getFloat("Used"), row, 5);
row++;
}

rec.close();

} catch (Exception e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, e.getMessage());
e.printStackTrace();
}

try {
if (s != null) {
s.close();
connect.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
 
Bitte nutze code Tags da man den Quellcode dann besser sieht. Ich würde es mit zwei Elementen von JButton lösen wovon einer welcher ein Update Statement sendet und der andere einen neuen Datensatz anlegt. Dazu alle Daten in editierbare Textfelder füllen.
 
Verzeihung, normalerweise mache ich das auch. Dieser Code ist ein BSP-Code und ich stehe etwas unter Zeitdruck. Sonst hätte ich es gemacht.
das ich ein Update-Statement machen muss und ein Button mit Daten anlegen weiß ich ja, habe nur keinen Plan wie ich das genau umsetzen soll.
Und ein Editierbares textfeld --> Ist das nich ein ganz Normales oder was spezielles?
 
NichtExpert schrieb:
Und ein Editierbares textfeld --> Ist das nich ein ganz Normales oder was spezielles?

Ein ganz normales JTextField. Wenn man sich weniger Arbeit machen möchte, kann man auch direkt in der Tabelle editieren (ist letztlich auch ein JTextField bei JTable).
 
Kann jemand Hilfestellung geben?:confused_alt:
 
Einen Ansatz für den Umgang mit den Daten, meinst Du?

  • Initialisierung hast Du ja schon.
  • Den Rest mit Events. Ob Du jetzt einen Update-Button verwendest und damit den Status von einem (allen) Feldern an die Datenbank zurückgibst, oder ob Du Felder mit Focuswechsel automatisch aktualisierst, oder sonst was, kannst nur Du entscheiden.

Wobei ich mir grad nicht recht im Klaren bin, inwieweit Du mit JAVA einerseits und SQL andererseits vertraut bist (oder nicht bist).

Die Vorgehensweise ist aber immer dieselbe,
-- das Abfrageschema (DB) wird auf dem Objektmodell (OO) abgebildet
-- Werte werden in die einzelnen Steuerelemente gestopft
-- je nach Schema über ein Mapping (Text, numerischer Text, Auswahlfelder, Checkbox, Slider, was weiß ich was am besten paßt) oder eins zu eins einfach in ein nicht näher beschränktes Textfeld
-- fürs Zurückschreiben ein passendes Event abfangen
-- den aktuellen Wert aus dem(oder den) Steuerelement(en) holen
-- diese dann einzeln oder geschlossen aktualisieren.

Jenes Aktualisieren kann man dann natürlich mit UPDATE, MERGE, ON CONFLICT... oder sogar DELETE oder sonst wie anders umsetzen.
Aber da muß man selber entscheiden. Wenn ich in ein Feld nichts eingebe bzw den Inhalt rauslösche, soll dann NULL eingetragen werden oder der Datensatz gelöscht oder ein spezifischer Standardwert eingesetzt oder sonst irgendwas Seltsames passieren?
Das kannst Du nur selbst wissen. Vor allem hat das auch mit JAVA nix mehr zu tun. Das ist dann nur noch SQL und das eine sollte vom anderen schon möglichst vollständig getrennt bleiben.
 
fuer sowas nimmt man Hibernate oder meinetwegen mit Hang zu Overkill dann auch Spring.

NichtExpert schrieb:
das ich ein Update-Statement machen muss und ein Button mit Daten anlegen weiß ich ja, habe nur keinen Plan wie ich das genau umsetzen soll.
ach komm, du kannst mir nicht erzaehlen dass du dazu nix findest. Du baust eine Form mit paar Textfeldern und nem Button und fuellst dann dein PrparedStatement und fuehrst das aus bei Button Klick. Wenn du keine Form nutzen willst, dann musst du dir TableEditor ansehen. Niemand hier wird dir den fertigen Code servieren, ob du nun unter Zeitdruck stehst oder nicht ...
 

Ähnliche Themen

Zurück
Oben