hey ich habe ein programm zusammengestellt was eine tabelle die in einer DB gespeichert ist ausgibt und die ich verändern kann(zeile hinzufügen und speichern). wenn ich aber testwerte eingebe zb
priorität | aufgabe
1 | test1
2 | test2
3 | test3
4 | test4
und die daten speicher und dann das programm schließe und wieder öffne fehlt aber das "test4" dh der letzte wert der zweiten spalte wird nicht angezeigt
hier der ganze code:
und hier der teil bei dem die daten gespeichert werden:
ist mein erstes großes java programm, bin noch am lernen.
mfg loxol
priorität | aufgabe
1 | test1
2 | test2
3 | test3
4 | test4
und die daten speicher und dann das programm schließe und wieder öffne fehlt aber das "test4" dh der letzte wert der zweiten spalte wird nicht angezeigt
hier der ganze code:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.table.*;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
public class Projekt {
Connection con = null;
DefaultTableModel tabModel;
JTable tab;
public final static Vector COLUMN_IDENTIFIERS = new Vector() {//spalten festlegen
{
add("Priorität"); //spaltennamen werden in der tabelle hinzugefügt
add("Aufgabe");
}// new vector
};//p f s vector
public static void main (String args[]){
Projekt p = new Projekt();
}// p s v main
public Projekt(){
initDatabaseStuff(); //methode wird abgerufen
Vector results = daten(); //results werden abgerufen
//#########################################################################################################
tabModel = new DefaultTableModel(3, 2); //erstellt 2 spalten und 3 zeilen
tabModel.setColumnIdentifiers(COLUMN_IDENTIFIERS); //tabelle mit defaulttablemodel wird erstellt
//defaulttablemodel wird benötigt um bei einer tabelle zeilen oder spalten hinzu zu fügen
tabModel.setDataVector(results, COLUMN_IDENTIFIERS);//daten werden in die tabelle geladen
tab = new JTable(tabModel); //tabelle wird erstellt
tab.getTableHeader().setReorderingAllowed(false); //spaltennamen lassen sich nciht verschieben
JScrollPane sP = new JScrollPane(tab); //ein feld mit einer scrollleiste wird erstellt und die tabelle in diese hineingeladen
//#########################################################################################################
TableRowSorter<TableModel> sort = new TableRowSorter<TableModel>();//der sortierer sort wird erstellt
tab.setRowSorter(sort); //fügt sort der tabelle zu
sort.setModel(tabModel); //
sort.setSortable(1, false); //spalte 1 kann nicht sortiert werden
//sort.setSortsOnUpdates(true); //wenn die eingabe gemacht wurde wird automatisch sortiert, false: es wird unübersichtlich
//#########################################################################################################
JPanel bP = new JPanel(); //panel für buttons wird erstellt
JButton addrow = new JButton("Zeile hinzufügen"); //button wird erstellt
//JButton delrow = new JButton("Markierte Zeile löschen"); //button wird erstellt
JButton save = new JButton("Speichern"); //button für die speicherung in die db
bP.add(addrow); //button zum zeilen erstellen wird auf dem panel hinzugefügt
//bP.add(delrow); //button zum zeilen löschen wird auf dem panel hinzugefügt
bP.add(save);
//##########################################################################################################
//methode um eine zeile hinzu zu fügen mit dem actionlistener
addrow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Object[] newrow = {"",""}; //neue zeile
tabModel.addRow(newrow); //neue zeile wird im jtable hinzugefügt
try
{
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO `projekt2`(`Priorität`, `Task`) VALUES ('','')");//sql befehl um eine zeile in der db einzufügen //x für zeilen anzahl wird hochgezählt
} //try
catch (SQLException ce)
{
System.out.println("Fehler: "+ce); //übersicht
ce.printStackTrace();
}//catch
}//public void actionperformed
});//Addrow
/*
// methode um eine zeile zu löschen mit einem actionlistener
delrow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if (tab.getSelectedRow() != -1){
tabModel.removeRow(tab.getSelectedRow());
}
else{
if (tab.getRowCount()==0){ //wenn es keine zeilen gibt fürt ein eine errormeldung (s.u.)aus
JOptionPane.showMessageDialog(tab, "Es sind keine Zeilen mehr vorhanden!", "Error", JOptionPane.ERROR_MESSAGE);//gibt eine fehlermeldung aus wenn keine zeilen mehr vorhanden sind
}
else{
tabModel.removeRow(tab.getRowCount()-1);//wenn keine zeile markiert ist wird die letzte gelöscht
}
}
//http://www.java-forum.org/java-basics-anfaenger-themen/37345-datenzeile-sql-db-java-loeschen.html
}
});
*/
save.addActionListener(new ActionListener(){ //funktion für den speichern butten, ruft die methode tabtoary auf
public void actionPerformed(ActionEvent e){
tabtoary(); //methode tabtoary wird aufgerufen s.u.
}//public coid aciton performed
});//save
//##################################################################################################
JPanel p = new JPanel(); // hauptpanel wird erstellt
JFrame f = new JFrame("Taskliste"); // fenster wird erstellt
p.setLayout(new BorderLayout()); //layout
p.add(sP, "Center"); //scrollpanel wir auf dem hauptpanel hinzugefügt
p.add(bP, "South"); //buttonpanel wird auf dem haupt panel hinzugefügt
f.getContentPane().add(p); //panel wird auf dem fenster hinzugefügt
f.pack(); //größe des fensters wird angepasst
f.setVisible(true); //fenster erscheint
}
//#################################################################################################
private void initDatabaseStuff() { //connector
MysqlDataSource mds = new MysqlDataSource();
mds.setServerName("localhost"); //addresse der datenbank
mds.setPort(3306); //standart port 3306
mds.setDatabaseName("projekt"); //name der datenbank unter der die tabelle zu finden ist
mds.setUser("root"); //benutzername
mds.setPassword(""); //passwaort (standart= null)
try {
con = mds.getConnection();
}//try
catch (SQLException e) {
throw new RuntimeException(e);
}//catch
Runtime.getRuntime().addShutdownHook(new Thread() {//wenn du connection nicht besteht soll das programm geschlsosen werden?
public void run() {
try {
if (!con.isClosed()) {
con.close();
}//try
} catch (SQLException e) {
e.printStackTrace();
}//catch
}//public void run
});//runtime
}//private coid initdateabasestuff
protected Vector daten() { //daten werden abgerufen
Vector daten = new Vector();
try {
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT Priorität, Task FROM projekt2");//SELECT spaltenname FROM tabellenname
while (rs.next()) { //daten werden ausgelesen
Vector inhalt = new Vector();
inhalt.add(rs.getString("Priorität"));
inhalt.add(rs.getString("Task"));
daten.add(inhalt); //daten werden in rs geschrieben
}//while
}//try
catch (SQLException e) {
e.printStackTrace();
}//catch
return daten; //results werden weitergegeben
}//vector daten
//##########################################################################################################
private void tabtoary() { //methode mit 2d array als string
String[][] tabstr = new String[tab.getRowCount()][tab.getColumnCount()];//array wird erstellt mit den spalten und zeilen
for(int zeile=0; zeile<tab.getRowCount(); zeile++){
for(int spalte=0; spalte<tab.getColumnCount(); spalte++){
tabstr[zeile][spalte] = tab.getValueAt(zeile, spalte).toString();//table zum string
System.out.println(tabstr[zeile][spalte]); //dient zur übersicht
}//for spalte
}//for zeile
try
{
Statement stmt = con.createStatement();
int x = 1;
for(int i=0; i<tab.getRowCount(); i++){
stmt.executeUpdate("UPDATE `projekt2` SET `Priorität`='"+tabstr[i][0] // daten werden aktualisiert
+"',`Task`='"+tabstr[i][1]
+"' WHERE ID = "+x);
System.out.println(x); //übersicht
x++; //x für zeilen anzahl wird hochgezählt
}//for
} //try
catch (SQLException e)
{
System.out.println("Fehler: "+e); //übersicht
e.printStackTrace();
}//catch
}//private
}//class
Java:
private void tabtoary() { //methode mit 2d array als string
String[][] tabstr = new String[tab.getRowCount()][tab.getColumnCount()];//array wird erstellt mit den spalten und zeilen
for(int zeile=0; zeile<tab.getRowCount(); zeile++){
for(int spalte=0; spalte<tab.getColumnCount(); spalte++){
tabstr[zeile][spalte] = tab.getValueAt(zeile, spalte).toString();//table zum string
System.out.println(tabstr[zeile][spalte]); //dient zur übersicht
}//for spalte
}//for zeile
try
{
Statement stmt = con.createStatement();
int x = 1;
for(int i=0; i<tab.getRowCount(); i++){
stmt.executeUpdate("UPDATE `projekt2` SET `Priorität`='"+tabstr[i][0] // daten werden aktualisiert
+"',`Task`='"+tabstr[i][1]
+"' WHERE ID = "+x);
System.out.println(x); //übersicht
x++; //x für zeilen anzahl wird hochgezählt
}//for
} //try
catch (SQLException e)
{
System.out.println("Fehler: "+e); //übersicht
e.printStackTrace();
}//catch
}//private
ist mein erstes großes java programm, bin noch am lernen.
mfg loxol