Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

JAVA TABLE aktualiesieren





Frage

Hallo, ich suche nach einem Befehlscode der meine Javatable die mit einer SQL-Datenbank verküpft ist immer aktualiesiert wenn meine SQL-datenbank geändert wird. Im moment wird zwar die Datenbank aktualiesiert aber nicht die Java Table. Auszug meines bisherigen codes unten. gruß Ralf //Neuer Eintrag in die SQL Datenbank! Fehlt aufruf um meine Tabelle zu aktualliesieren!! void jButton1_actionPerformed(ActionEvent e) { jTextField2.setText(jTextField1.getText ()); Statement stmt = database1.createStatement(); String n = jTextField2.getText(); String a = "Company"; try { stmt.executeUpdate( "UPDATE Customer SET ZIP = " + n + " " + "WHERE TITLE = " + a + " "); } catch (SQLException ex) { } } } // Button "Auftrag abschicken" class hotelframe_jButton1_actionAdapter implements java.awt.event.ActionListener { hotelframe adaptee; hotelframe_jButton1_actionAdapter(hotelframe adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jButton1_actionPerformed(e); } }

Antwort 1 von mr_x_hacker

Hmm, was erwartest Du jetzt für eine Update-Methode? Also Du wirst wohl schon sowas haben wie "buildTable()", was die gewünschten Sachen aus der SQL-Tabelle holt und in die JTable schreibt - das mußt halt bei jedem Update nochmal aufrufen...

Falls das zu teuer ist, wirst die Daten wohl "cachen" müssen, also entweder manuell den "UPDATE"-Befehl auf die JTable anwenden (ziemlich doof...) oder die Daten in irgendeiner zusätzlichen Form speichern (String[ ][ ]...?), wo das leichter geht mit dem Update...

Ich denke ich würde es einfach jedesmal aus der DB holen :-)

Ciao Sascha

Antwort 2 von disco

moin

ich versteh jetzt dein problem nicht. wie mr_x schon sagt, musst mehr oder weniger nur das machen, was du machst, wenn das programm gestartet wird, da dort doch sicherlich die tablle mit den daten aus der DB gefüllt wird?!

beim zwischenspeichern von daten um kosten zu sparen, musst du vorsichtig sein (je nach wichtigkeit der daten). je mehr leute die DB benutzen und je mehr daten generiert werden, umso mehr dateninkonsistenzen können auftreten.

g,
disco

Antwort 3 von ralfboetsch

package hotel;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.dx.sql.dataset.*;
import com.borland.dbswing.*;
import java.sql.*;
import com.borland.dx.dataset.*;

public class hotelframe extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
Database database1 = new Database();
QueryDataSet queryDataSet1 = new QueryDataSet();
DBDisposeMonitor dBDisposeMonitor1 = new DBDisposeMonitor();
TableScrollPane tableScrollPane1 = new TableScrollPane();
JdbTable jdbTable1 = new JdbTable();
JPanel jPanel1 = new JPanel();
FlowLayout flowLayout1 = new FlowLayout();
JdbNavField jdbNavField1 = new JdbNavField();
JLabel jLabel1 = new JLabel();
JdbNavToolBar jdbNavToolBar1 = new JdbNavToolBar();
JPanel jPanel2 = new JPanel();
JdbStatusLabel jdbStatusLabel1 = new JdbStatusLabel();
Column column1 = new Column();
JPanel jPanel3 = new JPanel();
BorderLayout borderLayout2 = new BorderLayout();
FlowLayout flowLayout2 = new FlowLayout();
JTextField jTextField1 = new JTextField();
JButton jButton1 = new JButton();
JTextField jTextField2 = new JTextField();

//Den Frame konstruieren
public hotelframe() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}

//Initialisierung der Komponenten
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
dBDisposeMonitor1.setDataAwareComponentContainer(this);
queryDataSet1.setReadOnly(false);
queryDataSet1.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(database1, "SELECT * FROM CUSTOMER", null, true, Load.ALL));
database1.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:sapdb://image.faps.uni-erlangen.de/HOTELDB", "UDO", "RED", false, "com.sap.dbtech.jdbc.DriverSapDB"));
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(610, 300));
this.setTitle("Hotelübersicht");
jdbTable1.setDataSet(queryDataSet1);
jPanel1.setLayout(flowLayout1);
jdbNavField1.setPreferredSize(new Dimension(125, 21));
jdbNavField1.setText("jdbNavField1");
jdbNavField1.setDataSet(queryDataSet1);
jLabel1.setText("Suche:");
jdbStatusLabel1.setText("jdbStatusLabel1");
column1.setColumnName("ZIP");
column1.setDataType(com.borland.dx.dataset.Variant.STRING);
column1.setPrecision(5);
column1.setTableName("CUSTOMER");
column1.setServerColumnName("ZIP");
column1.setSqlType(1);
queryDataSet1.setColumns(new Column[] {column1});
jPanel2.setLayout(borderLayout2);
jPanel3.setLayout(flowLayout2);
jTextField1.setText("TF1");
jButton1.setText("Auftrag abschicken");
jButton1.addActionListener(new hotelframe_jButton1_actionAdapter(this));
jTextField2.setText("TF2");
contentPane.add(tableScrollPane1, BorderLayout.CENTER);
contentPane.add(jPanel1, BorderLayout.NORTH);
jPanel1.add(jdbNavToolBar1, null);
jPanel1.add(jLabel1, null);
jPanel1.add(jdbNavField1, null);
contentPane.add(jPanel2, BorderLayout.SOUTH);
jPanel2.add(jPanel3, BorderLayout.WEST);
jPanel3.add(jTextField2, null);
jPanel3.add(jButton1, null);
jPanel3.add(jTextField1, null);
jPanel2.add(jdbStatusLabel1, BorderLayout.CENTER);
tableScrollPane1.getViewport().add(jdbTable1, null);
}
//Überschrieben, so dass eine Beendigung beim Schließen des Fensters möglich ist
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
//Auftrag abschicken und Datenbank aktualisieren

void jButton1_actionPerformed(ActionEvent e) {
jTextField2.setText(jTextField1.getText ());
Statement stmt = database1.createStatement(); // Ganze datenbank in stmt speichern
String n = jTextField2.getText();
String a = "Company";
try {
stmt.executeUpdate(
"UPDATE Customer SET ZIP = " + n + " " +
"WHERE TITLE = " + a + " ");

Hier möchte ich eine aufruf der mir erneut meine daten aus der SQL liest und in meine javatabelle schreibt. Ich habe mal meinen ganzen quellcode eingefügt hoffe alles ist auch drauf.

}
catch (SQLException ex) {
}
}
}
// Initialiesirung Button "Auftrag abschicken"
class hotelframe_jButton1_actionAdapter implements java.awt.event.ActionListener {
hotelframe adaptee;

hotelframe_jButton1_actionAdapter(hotelframe adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}

Antwort 4 von ralfboetsch

hier der anfang von meinem programm!

package hotel;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.dx.sql.dataset.*;
import com.borland.dbswing.*;
import java.sql.*;
import com.borland.dx.dataset.*;

public class hotelframe extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
Database database1 = new Database();
QueryDataSet queryDataSet1 = new QueryDataSet();
DBDisposeMonitor dBDisposeMonitor1 = new DBDisposeMonitor();
TableScrollPane tableScrollPane1 = new TableScrollPane();
JdbTable jdbTable1 = new JdbTable();
JPanel jPanel1 = new JPanel();
FlowLayout flowLayout1 = new FlowLayout();
JdbNavField jdbNavField1 = new JdbNavField();
JLabel jLabel1 = new JLabel();
JdbNavToolBar jdbNavToolBar1 = new JdbNavToolBar();
JPanel jPanel2 = new JPanel();
JdbStatusLabel jdbStatusLabel1 = new JdbStatusLabel();
Column column1 = new Column();
JPanel jPanel3 = new JPanel();
BorderLayout borderLayout2 = new BorderLayout();
FlowLayout flowLayout2 = new FlowLayout();
JTextField jTextField1 = new JTextField();
JButton jButton1 = new JButton();
JTextField jTextField2 = new JTextField();

//Den Frame konstruieren
public hotelframe() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}

//Initialisierung der Komponenten
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
dBDisposeMonitor1.setDataAwareComponentContainer(this);
queryDataSet1.setReadOnly(false);
queryDataSet1.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(database1, "SELECT * FROM CUSTOMER", null, true, Load.ALL));
database1.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:sapdb://image.faps.uni-erlangen.de/HOTELDB", "UDO", "RED", false, "com.sap.dbtech.jdbc.DriverSapDB"));
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(610, 300));
this.setTitle("Hotelübersicht");
jdbTable1.setDataSet(queryDataSet1);
jPanel1.setLayout(flowLayout1);
jdbNavField1.setPreferredSize(new Dimension(125, 21));
jdbNavField1.setText("jdbNavField1");
jdbNavField1.setDataSet(queryDataSet1);
jLabel1.setText("Suche:");
jdbStatusLabel1.setText("jdbStatusLabel1");
column1.setColumnName("ZIP");
column1.setDataType(com.borland.dx.dataset.Variant.STRING);
column1.setPrecision(5);
column1.setTableName("CUSTOMER");
column1.setServerColumnName("ZIP");
column1.setSqlType(1);
queryDataSet1.setColumns(new Column[] {column1});
jPanel2.setLayout(borderLayout2);

Antwort 5 von ralfboetsch

Sorry hatte probleme ganzen code einzufügen
hoffe trotzdem das man es versteht was ich will.


package hotel;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.dx.sql.dataset.*;
import com.borland.dbswing.*;
import java.sql.*;
import com.borland.dx.dataset.*;

public class hotelframe extends JFrame {
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
Database database1 = new Database();
QueryDataSet queryDataSet1 = new QueryDataSet();
DBDisposeMonitor dBDisposeMonitor1 = new DBDisposeMonitor();
TableScrollPane tableScrollPane1 = new TableScrollPane();
JdbTable jdbTable1 = new JdbTable();
JPanel jPanel1 = new JPanel();
FlowLayout flowLayout1 = new FlowLayout();
JdbNavField jdbNavField1 = new JdbNavField();
JLabel jLabel1 = new JLabel();
JdbNavToolBar jdbNavToolBar1 = new JdbNavToolBar();
JPanel jPanel2 = new JPanel();
JdbStatusLabel jdbStatusLabel1 = new JdbStatusLabel();
Column column1 = new Column();
JPanel jPanel3 = new JPanel();
BorderLayout borderLayout2 = new BorderLayout();
FlowLayout flowLayout2 = new FlowLayout();
JTextField jTextField1 = new JTextField();
JButton jButton1 = new JButton();
JTextField jTextField2 = new JTextField();

//Den Frame konstruieren
public hotelframe() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}

//Initialisierung der Komponenten
private void jbInit() throws Exception {
contentPane = (JPanel) this.getContentPane();
dBDisposeMonitor1.setDataAwareComponentContainer(this);
queryDataSet1.setReadOnly(false);
queryDataSet1.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(database1, "SELECT * FROM CUSTOMER", null, true, Load.ALL));
database1.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:sapdb://image.faps.uni-erlangen.de/HOTELDB", "UDO", "RED", false, "com.sap.dbtech.jdbc.DriverSapDB"));
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(610, 300));
this.setTitle("Hotelübersicht");
jdbTable1.setDataSet(queryDataSet1);
jPanel1.setLayout(flowLayout1);
jdbNavField1.setPreferredSize(new Dimension(125, 21));
jdbNavField1.setText("jdbNavField1");
jdbNavField1.setDataSet(queryDataSet1);
jLabel1.setText("Suche:");
jdbStatusLabel1.setText("jdbStatusLabel1");
column1.setColumnName("ZIP");
column1.setDataType(com.borland.dx.dataset.Variant.STRING);
column1.setPrecision(5);
column1.setTableName("CUSTOMER");
column1.setServerColumnName("ZIP");
column1.setSqlType(1);
queryDataSet1.setColumns(new Column[{column1});
jPanel2.setLayout(borderLayout2);

Antwort 6 von ralfboetsch

Hab mein problem zwischenzeitlich selbst gelöst:
schreib das nur weil viele ein änliches problem hatten und selten eine passende Antwort bekommen haben.

update einer Tabelle die mit querry die daten aus einer SQLDatenbank bezieht geht mit
<name deines querrys>(hier.queryDataSet1).refresh();

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: