Update JTable

Baste

Mitglied
Hi @ all.
Ich hole mir aus einer MySQL DB Daten in eine JTable, klappt ja soweit.
Die Tabelle ist editierbar. Wenn ich nun die gewünschten Datensätze in meiner Table bearbeitet hab, möchte ich diese Änderungen gleich an meine Datenbank weitergeben (z.B. per Button "Datensätze updaten" oder so).
Hier mein
Code:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class AnsichtPanel extends JPanel {
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	public final static Vector COLUMN_IDENTIFIERS = new Vector() {
		{
			add("Nummer");
			add("Mitarbeitername");
		}
	};
	JTable table;
	JButton btnAnz;
	DefaultTableModel defaultTableModel;
	Connection con;
	public AnsichtPanel() {
		defaultTableModel = new DefaultTableModel(0, 10);
		defaultTableModel.setColumnIdentifiers(COLUMN_IDENTIFIERS);
		//table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		
		table = new JTable(defaultTableModel);
		
		btnAnz = new JButton("Files anzeigen");
		btnAnz.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Vector results = findAllPersons();
		    	defaultTableModel.setDataVector(results, COLUMN_IDENTIFIERS);
		    	table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
				defaultTableModel.fireTableDataChanged();
			}
		});
		add(new JScrollPane(table), BorderLayout.CENTER);
		add(btnAnz, BorderLayout.SOUTH);

		initDatabase();

		setVisible(true);
	}

	private void initDatabase() {
		MysqlDataSource mds = new MysqlDataSource();
		mds.setServerName("localhost");
		mds.setPort(3306);
		mds.setDatabaseName("esfiles");
		mds.setUser("root");
		mds.setPassword("");
		try {
			con = mds.getConnection();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}

		Runtime.getRuntime().addShutdownHook(new Thread() {
			public void run() {
				try {
					if (!con.isClosed()) {
						con.close();
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		});
	}

	protected Vector findAllPersons() {

		Vector results = new Vector();
		try {
			Statement statement = con.createStatement();
			ResultSet rs = statement.executeQuery("SELECT * FROM test");

			while (rs.next()) {
				Vector person = new Vector();
				person.add(rs.getString("nr"));
				person.add(rs.getString("mitarbeiter"));
				results.add(person);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		return results;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
	          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
	        }
	        catch (Exception ex) {
	          System.out.println("**ERROR** Konnte den Stil der Oberfläche nicht festlegen...");
	        }
		new AnsichtPanel();
	}
}

Hat jemand ne Idee wie ich das Problem lösen könnte, hab irgendwie keine so richtige Idee ;)
Danke.
 
Erstell' Dir z.B. ein PreparedStatement und lese zeilenweise beim ActionEvent Deines Buttons die Datenfelder Deiner JTable aus, stecke die Daten ins PreparedStatement und ab damit als Update in die DB.

Code:
Object o = myJTable.getValueAt(7, 6); //Inhalt der entsprechenden Zelle
//...
myPreparedStatement.setObject(11, o); //11. Fragezeichen
 

Neue Beiträge

Zurück