Hi,
ich übe gerade, Daten aus einer mysql Datenbank in einer Tabelle abzubilden, dort dann zu editieren und dann wieder zurück in die Datenbank zu geben.
Das läuft nun auch alles - das einzige Problem ist das Updaten der Tabelle.
Wenn ich die Daten nach der Editierung wieder in das Model überführe und dann in der Tabelle anzeigen lassen möchte, geht das sogar, erhalte dann aber die ArrayIndexOutOfBoundsException -1.
Zwar funktioniert immer noch alles, aber zufrieden bin ich damit nun nicht.
Der Code ist gerade zwar nur zum Training und somit nicht 100% ig optimiert, über Rückmeldung bin ich jedoch trotzdem sehr dankbar.
ich übe gerade, Daten aus einer mysql Datenbank in einer Tabelle abzubilden, dort dann zu editieren und dann wieder zurück in die Datenbank zu geben.
Das läuft nun auch alles - das einzige Problem ist das Updaten der Tabelle.
Wenn ich die Daten nach der Editierung wieder in das Model überführe und dann in der Tabelle anzeigen lassen möchte, geht das sogar, erhalte dann aber die ArrayIndexOutOfBoundsException -1.
Zwar funktioniert immer noch alles, aber zufrieden bin ich damit nun nicht.
Der Code ist gerade zwar nur zum Training und somit nicht 100% ig optimiert, über Rückmeldung bin ich jedoch trotzdem sehr dankbar.
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.*;
public class TableFromDatabase extends JFrame implements ListSelectionListener {
private DefaultTableModel model;
private final String userName = ***;
private final String password = ***;
private String databaseURL = ***;
private JTable table;
private JTextField tf_Vorname;
private JTextField tf_Nachname;
private JCheckBox chkbx_boolean;
private int selRow;
private int selCol;
private Class[] types = new Class []
{
String.class, String.class, String.class, Boolean.class
};
public static void main(String[] args)
{
TableFromDatabase frame = new TableFromDatabase();
}
public void loadData()
{
System.out.println("LOADING DATA");
Vector <String> columnNames = new Vector<String>(); // die Spaltennamen werden hier gespeichert
Vector <Vector> data = new Vector <Vector>(); // datensatz wird gespeichert
model = new DefaultTableModel();
try {
// Connect to the Database
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName( driver );
Connection connection = DriverManager.getConnection(databaseURL, userName, password);
// Read data from a table
String sql = "Select id_Persons, Vorname, Nachname, BoolTest from tbl_Persons";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery( sql );
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
// Get column names
for (int i = 1; i <= columns; i++)
{
columnNames.addElement( md.getColumnName(i) );
System.out.println(md.getColumnName(i));
}
// Get row data
while (rs.next())
{
Vector <Object> row = new Vector<Object>(columns);
for (int i = 1; i <= columns; i++)
{
row.addElement( rs.getObject(i) );
}
data.addElement( row );
}
rs.close();
stmt.close();
model.setDataVector(data, columnNames);
} catch(Exception e)
{
System.out.println( e );
}
}
public TableFromDatabase()
{
model = new DefaultTableModel()
{
public Class getColumnClass(int columnIndex)
{
return types [columnIndex];
}
public boolean isCellEditable( int rowIndex, int columnIndex )
{
return false;
}
};
setDefaultCloseOperation( EXIT_ON_CLOSE );
setBounds(100,100,500,500);
getContentPane().setLayout(null);
loadData(); // lädt daten in model
// Erstelle Tabelle
table = new JTable(model); // fügt daten zur tabelle hinzu
JScrollPane scrollPane = new JScrollPane( table ); // tabelle zum Scrollpane hinzufügen
scrollPane.setBounds(20, 20, 400, 200);
getContentPane().add( scrollPane ); // hinzufügen zum Frame
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionModel selectionModel = table.getSelectionModel();
selectionModel.addListSelectionListener( this );
tf_Vorname = new JTextField();
tf_Vorname.setBounds(76, 252, 86, 20);
getContentPane().add(tf_Vorname);
tf_Vorname.setColumns(10);
tf_Nachname = new JTextField();
tf_Nachname.setBounds(76, 291, 86, 20);
getContentPane().add(tf_Nachname);
tf_Nachname.setColumns(10);
chkbx_boolean = new JCheckBox("New check box");
chkbx_boolean.setBounds(76, 331, 97, 23);
getContentPane().add(chkbx_boolean);
JButton btn_Save = new JButton("Save");
btn_Save.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try {
// Connect to the Database
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName( driver );
Connection myCon = DriverManager.getConnection(databaseURL, userName, password);
String query = "UPDATE tbl_Persons SET Vorname = '" + tf_Vorname.getText() + "', Nachname = '" + tf_Nachname.getText() + "' WHERE id_Persons = " + model.getValueAt(selRow, 0);
PreparedStatement stmt = myCon.prepareStatement(query);
stmt.executeUpdate();
myCon.close();
loadData();
table.setModel(model);
}
catch(Exception e1)
{
System.out.println( e1 );
}
}
});
btn_Save.setBounds(247, 304, 89, 23);
getContentPane().add(btn_Save);
setVisible(true);
}
public void valueChanged(ListSelectionEvent e)
{
if (!e.getValueIsAdjusting())
{
selRow = table.getSelectedRow();
selCol = table.getSelectedColumn();
// Show values in textfields
tf_Vorname.setText((String) model.getValueAt(selRow, 1));
tf_Nachname.setText((String) model.getValueAt(selRow, 2));
chkbx_boolean.setSelected((Boolean) model.getValueAt(selRow,3));
}
}
}
Zuletzt bearbeitet von einem Moderator: