jueman
Grünschnabel
Hallo,
bin ziemlich neu beim Programmieren mit Java.
Habe es hingekriegt, ein kleines Programm zu schreiben, welches eine MySQL-DB abfragt und sie auch aktualisiert. Dazu habe ich in der Methode setValueAt eine eigene UPDATE-Funktion für die MySQL-DB eingebaut. Der Wert wird auch in der DB aktualisiert, und auch im JTable aktualisiert angezeigt. Einziges Problem, die Tabelle soll nun auch sortiert angezeigt werden, und zwar nicht nach einer Sortierroutine von java, sondern nach der SQL-ABfrage mit ORDER BY, so wie sie sortiert angezeigt wird, beim ersten Anzeigen der Tabelle. Es muß doch möglich sein, eine Funktion ausfindig zu machen, die die Tabelle so aufruft, wie der erste Aufruf über das Menü. Ich suche schon seit 2 Tagen, habe schon alles Mögliche mit Listeners und Events ausprobiert, ich komm einfach nicht drauf:
Hier der Code:
und hier das Hauptprogramm mit main:
bin ziemlich neu beim Programmieren mit Java.
Habe es hingekriegt, ein kleines Programm zu schreiben, welches eine MySQL-DB abfragt und sie auch aktualisiert. Dazu habe ich in der Methode setValueAt eine eigene UPDATE-Funktion für die MySQL-DB eingebaut. Der Wert wird auch in der DB aktualisiert, und auch im JTable aktualisiert angezeigt. Einziges Problem, die Tabelle soll nun auch sortiert angezeigt werden, und zwar nicht nach einer Sortierroutine von java, sondern nach der SQL-ABfrage mit ORDER BY, so wie sie sortiert angezeigt wird, beim ersten Anzeigen der Tabelle. Es muß doch möglich sein, eine Funktion ausfindig zu machen, die die Tabelle so aufruft, wie der erste Aufruf über das Menü. Ich suche schon seit 2 Tagen, habe schon alles Mögliche mit Listeners und Events ausprobiert, ich komm einfach nicht drauf:
Hier der Code:
Java:
/*
* GerichtTableModel.java
*
* Created on 25. Juli 2007, 16:09
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package dblib;
import doku0001.doku;
import javax.swing.table.AbstractTableModel;
import java.sql.*;
import java.util.ArrayList;
/**
*
* @author jue
*/
public class GerichtTableModel extends AbstractTableModel {
private boolean DEBUG = false;
private int colnum = 4;
private int rownum;
private String[] colNames = { "gericht_id", "gericht_name", "gericht_proz_aufschlag", "gericht_preisfest" };
private ArrayList<String[]> ResultSets;
/** Creates a new instance of GerichtTableModel */
public GerichtTableModel( ResultSet rs ) {
ResultSets = new ArrayList<String[]>();
try {
while(rs.next()){
String[] row = {
rs.getString("gericht_id"), rs.getString("gericht_name"), rs.getString("gericht_proz_aufschlag"), rs.getString("gericht_preisfest")
};
ResultSets.add(row);
}
} catch (Exception e) {
System.out.println("Exception in GerichtTableModel");
}
}
public Object getValueAt(int rowIndex, int columnIndex) {
String[] row = ResultSets.get(rowIndex);
return row[columnIndex];
}
public int getRowCount() {
return ResultSets.size();
}
public int getColumnCount() {
return colnum;
}
public String getColumnName( int param ){
return colNames[param];
}
public boolean isCellEditable(int row, int col) {
//Note that the data/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 1) {
return false;
} else {
return true;
}
}
public void setValueAt(Object value, int rowIndex, int columnIndex) {
if (DEBUG) {
System.out.println("Setting value at " + rowIndex + "," + columnIndex
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
}
String[] row = ResultSets.get(rowIndex);
row[columnIndex] = (String) value;
String gericht_id = row[0];
try {
dblc = new DBLibClass();
} catch (Exception e) {
System.out.println("Exception Aufruf DBLibClass");
}
dblc.updateGerichtSetRow(row);
fireTableCellUpdated(rowIndex, columnIndex);
if (DEBUG) {
System.out.println("New value of data:");
printDebugData();
}
}
private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
//System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
private DBLibClass dblc;
private doku dokuclass;
}
Java:
/*
* DBLibClass.java
*
* Created on 25. Juli 2007, 14:13
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package dblib;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import java.sql.SQLException;
/**
*
* @author jue
*/
public class DBLibClass {
/** Creates a new instance of DBLibClass */
public DBLibClass() throws Exception {
mdbc = new MyDBConnection();
mdbc.init();
Connection conn = (Connection) mdbc.getMyConnection();
stmt = conn.createStatement();
}
public ResultSet getResultFromGericht() {
ResultSet rs = null;
try{
rs = (ResultSet) stmt.executeQuery("SELECT * FROM k_gericht ORDER BY gericht_name");
} catch(SQLException e){
System.out.println("Fehler bei Abfrage: getResultFromGericht: SELECT * FROM k_gericht ORDER BY gericht_name");
}
return rs;
}
public boolean updateGerichtSetRow(String[] row) {
String gericht_id = row[0];
String gericht_name = row[1];
String gericht_proz_aufschlag = row[2];
String gericht_preisfest = row[3];
String updateStr="";
try{
updateStr="UPDATE k_gericht SET gericht_name = " + quotate(gericht_name) + "," +
"gericht_proz_aufschlag = " + quotate(gericht_proz_aufschlag) + "," +
"gericht_preisfest = " + quotate(gericht_preisfest) +
" WHERE gericht_id = " + quotate(gericht_id);
int done=stmt.executeUpdate(updateStr);
return true;
} catch(Exception e){
e.printStackTrace();
return false;
}
}
public String quotate(String content){
return "'"+content+"'";
}
private java.sql.Statement stmt;
private MyDBConnection mdbc;
}
und hier das Hauptprogramm mit main:
Java:
/*
* doku.java
*
* Created on 23. Juli 2007, 12:46
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package doku0001;
import com.mysql.jdbc.ResultSetMetaData;
import dblib.*;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.*;
/**
*
* @author jue
*/
public class doku extends javax.swing.JLayeredPane{
/** Creates a new instance of doku */
public doku() throws Exception {
mdbc = new MyDBConnection();
mdbc.init();
Connection conn = (Connection) mdbc.getMyConnection();
stmt = conn.createStatement();
JFrame frame = new JFrame("doku");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar;
JMenu menu, submenu;
JMenuItem MI_bewohner;
JMenuItem MI_gesetzlichebetreuer;
// Create the menu bar
menuBar = new JMenuBar();
// Build the first menu.
menu = new JMenu("Allgem. Daten");
menu.setMnemonic(KeyEvent.VK_A);
menuBar.add(menu);
frame.setJMenuBar(menuBar);
pane = frame.getContentPane();
JPanel card1 = new JPanel();
card1.add(new JButton("Button 1"));
card1.add(new JButton("Button 2"));
card1.add(new JButton("Button 3"));
JPanel card2 = new JPanel();
nameField = new JTextField(30);
card2.add(nameField);
label = new JLabel();
card2.add(label);
//card2.add(new JTextField("nameField", 20));
jScrollPane1 = new javax.swing.JScrollPane();
card2.add(jScrollPane1);
MI_bewohner = new JMenuItem("Bewohner", KeyEvent.VK_B);
menu.add(MI_bewohner);
MI_bewohner.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
MI_bewohnerActionPerformed(evt);
}
});
MI_gesetzlichebetreuer = new JMenuItem("Gesetzl. Betreuer", KeyEvent.VK_G);
menu.add(MI_gesetzlichebetreuer);
MI_gesetzlichebetreuer.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
MI_gesetzlichebetreuerActionPerformed(evt);
}
});
//Create the panel that contains the "cards".
cards = new JPanel(new CardLayout());
cards.add(card1, "BUTTONPANEL");
cards.add(card2, "TEXTPANEL");
//pane.add(comboBoxPane, BorderLayout.PAGE_START);
pane.add(cards, BorderLayout.CENTER);
//Display the window.
frame.setSize(1000,700);
//frame.pack();
frame.setVisible(true);
}
private void MI_bewohnerActionPerformed(java.awt.event.ActionEvent evt) {
CardLayout cl = (CardLayout)(cards.getLayout());
cl.show(cards, "TEXTPANEL");
ResultSetMetaData rowcount;
ResultSet rs_ = null;
try{
rs_ = (ResultSet)stmt.executeQuery("Select * from k_gericht" +
" ORDER BY gericht_name DESC");
while(rs_.next()){
nameField.setText(rs_.getString("gericht_name"));
label.setText(rs_.getString("gericht_name"));
}
} catch(Exception e){
System.out.println("Exception in doku");
}
try {
dblc = new DBLibClass();
} catch (Exception e) {
System.out.println("Exception Aufruf DBLibClass");
}
gerichtTable = new javax.swing.JTable();
ResultSet rs = dblc.getResultFromGericht();
gerichtTable.setModel(new GerichtTableModel(rs));
mdbc.close(rs);
jScrollPane1.setViewportView(gerichtTable);
}
private void MI_gesetzlichebetreuerActionPerformed(java.awt.event.ActionEvent evt) {
CardLayout cl = (CardLayout)(cards.getLayout());
cl.show(cards, "BUTTONPANEL");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
new doku();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
private Container pane;
private JPanel cards;
private MyDBConnection mdbc;
private java.sql.Statement stmt;
private JTextField nameField;
private JLabel label;
private DBLibClass dblc;
private javax.swing.JTable gerichtTable;
private javax.swing.JScrollPane jScrollPane1;
}
Zuletzt bearbeitet: