Hallo zusammen
Ich bin absoluter java Neuling und habe am Montag angefangen mal was zu coden.
Ziel ist ein kleines Programm zum Verwalten von Filmtiteln und einer Ausleihfunktion.
Bisher habe ich ein einfaches GUI zum erfassen und löschen von Datensätzen in meiner mysql Datenbank erstellt. Beim integrierten JTable im GUI hab ich jedoch so meine Probleme
Wenn ich in der unten aufgeführten Klasse "MovieTableModel" den Array "data" manuell befülle funktioniert die Ansicht der Daten im JTable. Ziel ist es jedoch, eine Liste der Einträge aus der Datenbank ersichtlich zu machen.
Ich suche nun schon seit mehreren Stunden nach einer Lösung, durch meine begrenzten Kenntnisse war die Lösungssuche bisher leider nicht erfolgreich.
Der Fehler wird mir konkret hier angezeigt:
Ich habe im Code vor der obigen Schleife nun zusätzlich einige Kommandozeilen Ausgaben hinzugefügt die wunderbar funktioniert:
Anbei die komplette Consolen Ausgabe:
Hier die vollständige Klasse "MovieTableModel":
Und auch noch meine andere Klasse in welcher das GUI und zur Zeit noch weitere Methoden vorhanden sind:
Ich bin absoluter java Neuling und habe am Montag angefangen mal was zu coden.
Ziel ist ein kleines Programm zum Verwalten von Filmtiteln und einer Ausleihfunktion.
Bisher habe ich ein einfaches GUI zum erfassen und löschen von Datensätzen in meiner mysql Datenbank erstellt. Beim integrierten JTable im GUI hab ich jedoch so meine Probleme
Wenn ich in der unten aufgeführten Klasse "MovieTableModel" den Array "data" manuell befülle funktioniert die Ansicht der Daten im JTable. Ziel ist es jedoch, eine Liste der Einträge aus der Datenbank ersichtlich zu machen.
Ich suche nun schon seit mehreren Stunden nach einer Lösung, durch meine begrenzten Kenntnisse war die Lösungssuche bisher leider nicht erfolgreich.
Der Fehler wird mir konkret hier angezeigt:
Java:
while(rs.next()) {
System.out.println("index ist: " +index); //test indexdurchlauf
// 0 Ist ja Spalte title, 1 Spalte genre
data[index][0] = rs.getString("title");
data[index][1] = rs.getString("genre");
index++;
}
Ich habe im Code vor der obigen Schleife nun zusätzlich einige Kommandozeilen Ausgaben hinzugefügt die wunderbar funktioniert:
Java:
while(rs.next()){ //Test Ausgabe Kommandozeile
Strtitle = rs.getString("title");
Strgenre = rs.getString("genre");
System.out.println("- Titel = " + Strtitle + "- Genre = " + Strgenre);
}//end while loop
Anbei die komplette Consolen Ausgabe:
methode dataselect wird ausgeführt
try ausgeführt
- Titel = illuminati- Genre = thriller
- Titel = Staatsfeind nr. 1- Genre = Thriller
- Titel = 21- Genre = Thriller
- Titel = Das Sakrileg- Genre = Thriller
- Titel = Das perfekte Verbrechen- Genre = Thriller
- Titel = Das Haus am See- Genre = Romantik
- Titel = Der Datedoktor- Genre = Komödie
- Titel = der Film- Genre = komödie
- Titel = adsf- Genre = sadf
index ist: 0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at ch.haag.Start.MovieTableModel.dataselect(MovieTableModel.java:51)
at ch.haag.Start.MainJFrame.main(MainJFrame.java:45)
Hier die vollständige Klasse "MovieTableModel":
Java:
package ch.haag.Start;
import javax.swing.table.AbstractTableModel;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MovieTableModel extends AbstractTableModel
{
private String[][] data = new String[][]
{};
private String[] columnsNames = new String[]
{ "Title", "Genre" };
String Strtitle, Strgenre;
Connection con = null;
public void dataselect() throws InstantiationException,
IllegalAccessException, SQLException
{
System.out.println("methode dataselect wird ausgeführt");
try
{
System.out.println("try ausgeführt");
Statement stmt;
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost/movies",
"root", "");
stmt = con.createStatement(); // Generiert ein Object vom Typ
// Statement
ResultSet rs;
rs = stmt.executeQuery("SELECT title, genre FROM movies");
while(rs.next()){ //Test Ausgabe Kommandozeile
Strtitle = rs.getString("title");
Strgenre = rs.getString("genre");
System.out.println("- Titel = " + Strtitle + "- Genre = " + Strgenre);
}//end while loop
rs = stmt.executeQuery("SELECT title, genre FROM movies");
int index = 0;
while(rs.next()) {
System.out.println("index ist: " +index); //test indexdurchlauf
// 0 Ist ja Spalte title, 1 Spalte genre
data[index][0] = rs.getString("title");
data[index][1] = rs.getString("genre");
index++;
}
//int i = 0;
//while (rs.next())
//{
// data[i][0] = rs.getString("title");
// data[i][0] = rs.getString("genre");
// // data[i][0] = new String[](rs.getString(1),rs.getString(2)) ;
// System.out.println("daten: " + data);
// i++;
//}
} catch (ClassNotFoundException ex)
{
// TODO Auto-generated catch block
ex.printStackTrace();
} finally
{
try
{
if (con != null)
con.close();
} catch (SQLException ex)
{
}
}
}
public void test()
{
System.out.println("methode test wird aufgerufen");
}
public String getColumnName(int column)
{
return columnsNames[column];
}
@Override
public int getColumnCount()
{
return 2;
}
@Override
public int getRowCount()
{
return data.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
// TODO Auto-generated method stub
return data[rowIndex][columnIndex];
}
}
Und auch noch meine andere Klasse in welcher das GUI und zur Zeit noch weitere Methoden vorhanden sind:
Java:
package ch.haag.Start;
import javax.swing.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JPanel;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.Font;
import javax.swing.border.EmptyBorder;
import javax.swing.table.TableRowSorter;
import javax.swing.table.TableModel;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;
import java.util.regex.PatternSyntaxException;
public class MainJFrame // implements ActionListener
{
// int id, year;
String Lid, id, year, title, genre, media, stopper; // Strings
JButton button;
private JTextField getID;
private JTextField getTitle;
private JTextField getGenre;
private JTextField getYear;
private JTextField getMedia;
private JTextField getLID;
private JTable tableFilter;
private JTextField getFilter;
private TableRowSorter<TableModel> movieSorter;
private JPanel contentPane;
// private FilterListener FilterListener = new FilterListener();
public static void main(String[] args) throws InstantiationException,
IllegalAccessException, SQLException
{
MainJFrame gui = new MainJFrame();
gui.los();
MovieTableModel mtm = new MovieTableModel();
mtm.dataselect();
}
public void los()
{
JFrame frame = new JFrame("Filmverwaltung");
// System.out.println("gui.los wird ausgeführt");
JButton btnSpeichern = new JButton("speichern");
btnSpeichern.addActionListener(new SpeichernListener());
JButton btnLoeschen = new JButton("l\u00F6schen");
btnLoeschen.addActionListener(new LoeschenListener());
JButton btnFiltern = new JButton("Filtern");
btnFiltern.addActionListener(new FilterListener());
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JScrollPane scrollPaneMovies = new JScrollPane();
contentPane.add(scrollPaneMovies, BorderLayout.CENTER);
tableFilter = new JTable();
TableModel MovieTableModel = new MovieTableModel();
tableFilter.setModel(MovieTableModel);
movieSorter = new TableRowSorter<TableModel>(MovieTableModel);
tableFilter.setRowSorter(movieSorter);
scrollPaneMovies.setViewportView(tableFilter);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getID = new JTextField();
getID.setColumns(10);
getTitle = new JTextField();
getTitle.setColumns(10);
getGenre = new JTextField();
getGenre.setColumns(10);
getYear = new JTextField();
getYear.setColumns(10);
getMedia = new JTextField();
getMedia.setColumns(10);
getLID = new JTextField();
getLID.setColumns(10);
getFilter = new JTextField();
getFilter.setColumns(10);
JLabel lblId = new JLabel("ID");
JLabel lblTitel = new JLabel("Titel");
JLabel lblGenre = new JLabel("Genre");
JLabel lblJahr = new JLabel("Jahr");
JLabel lblMedium = new JLabel("Medium");
JLabel lblErfassung = new JLabel("Erfassung");
lblErfassung.setFont(new Font("Tahoma", Font.PLAIN, 14));
JLabel lblLschung = new JLabel("L\u00F6schung");
lblLschung.setFont(new Font("Tahoma", Font.PLAIN, 14));
JLabel lblId_1 = new JLabel("ID");
JLabel lblSuche = new JLabel("Suche");
lblSuche.setFont(new Font("Tahoma", Font.PLAIN, 14));
GroupLayout groupLayout = new GroupLayout(frame.getContentPane());
groupLayout
.setHorizontalGroup(groupLayout
.createParallelGroup(Alignment.LEADING)
.addGroup(
Alignment.TRAILING,
groupLayout
.createSequentialGroup()
.addGap(23)
.addGroup(
groupLayout
.createParallelGroup(
Alignment.LEADING)
.addComponent(lblId)
.addGroup(
groupLayout
.createParallelGroup(
Alignment.LEADING,
false)
.addComponent(
lblTitel,
Alignment.TRAILING,
GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
lblMedium,
Alignment.TRAILING,
GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
lblJahr,
Alignment.TRAILING,
GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
lblId_1))
.addComponent(lblGenre))
.addGroup(
groupLayout
.createParallelGroup(
Alignment.LEADING,
false)
.addComponent(getID)
.addComponent(
btnLoeschen,
GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(
lblErfassung)
.addComponent(
getMedia,
Alignment.TRAILING)
.addComponent(
getYear,
Alignment.TRAILING)
.addComponent(
getGenre,
Alignment.TRAILING)
.addComponent(
getTitle,
Alignment.TRAILING)
.addComponent(
lblLschung)
.addComponent(
btnSpeichern,
GroupLayout.DEFAULT_SIZE,
GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(getLID))
.addGap(83)
.addGroup(
groupLayout
.createParallelGroup(
Alignment.LEADING)
.addGroup(
groupLayout
.createSequentialGroup()
.addComponent(
getFilter)
.addPreferredGap(
ComponentPlacement.RELATED)
.addComponent(
btnFiltern,
GroupLayout.PREFERRED_SIZE,
98,
GroupLayout.PREFERRED_SIZE))
.addComponent(lblSuche)
.addComponent(
tableFilter,
Alignment.TRAILING,
GroupLayout.DEFAULT_SIZE,
345,
Short.MAX_VALUE))
.addContainerGap()));
groupLayout
.setVerticalGroup(groupLayout
.createParallelGroup(Alignment.LEADING)
.addGroup(
groupLayout
.createSequentialGroup()
.addGroup(
groupLayout
.createParallelGroup(
Alignment.LEADING)
.addGroup(
groupLayout
.createSequentialGroup()
.addGap(10)
.addComponent(
lblSuche)
.addGap(18)
.addGroup(
groupLayout
.createParallelGroup(
Alignment.LEADING)
.addComponent(
btnFiltern)
.addComponent(
getFilter,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE))
.addPreferredGap(
ComponentPlacement.RELATED)
.addComponent(
tableFilter,
GroupLayout.PREFERRED_SIZE,
211,
GroupLayout.PREFERRED_SIZE))
.addGroup(
groupLayout
.createSequentialGroup()
.addContainerGap()
.addComponent(
lblErfassung)
.addGap(28)
.addGroup(
groupLayout
.createSequentialGroup()
.addGap(18)
.addGroup(
groupLayout
.createParallelGroup(
Alignment.BASELINE)
.addComponent(
getTitle,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(
lblTitel))
.addPreferredGap(
ComponentPlacement.UNRELATED)
.addGroup(
groupLayout
.createParallelGroup(
Alignment.BASELINE)
.addComponent(
getGenre,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(
lblGenre))
.addPreferredGap(
ComponentPlacement.RELATED)
.addGroup(
groupLayout
.createParallelGroup(
Alignment.BASELINE)
.addComponent(
getYear,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(
lblJahr))
.addPreferredGap(
ComponentPlacement.RELATED)
.addGroup(
groupLayout
.createParallelGroup(
Alignment.BASELINE)
.addComponent(
getMedia,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(
lblMedium))
.addPreferredGap(
ComponentPlacement.RELATED)
.addComponent(
btnSpeichern)
.addGap(26)
.addComponent(
lblLschung)
.addGap(18)
.addGroup(
groupLayout
.createParallelGroup(
Alignment.BASELINE)
.addComponent(
lblId_1)
.addComponent(
getLID,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE))
.addPreferredGap(
ComponentPlacement.RELATED)
.addComponent(
btnLoeschen)))
.addGroup(
groupLayout
.createSequentialGroup()
.addGap(46)
.addGroup(
groupLayout
.createParallelGroup(
Alignment.BASELINE)
.addComponent(
getID,
GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE)
.addComponent(
lblId))))
.addContainerGap(121, Short.MAX_VALUE)));
frame.getContentPane().setLayout(groupLayout);
frame.setSize(610, 475);
frame.setVisible(true);
}
private void setContentPane(JPanel contentPane2)
{
// TODO Auto-generated method stub
}
class SpeichernListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Connection con = null;
try
{
Statement stmt;
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection(
"jdbc:mysql://localhost/movies", "root", "");
stmt = con.createStatement(); // Generiert ein Object vom Typ
// Statement
id = getID.getText();
title = getTitle.getText();
genre = getGenre.getText();
year = getYear.getText();
media = getMedia.getText();
stmt.executeUpdate("INSERT INTO movies(id,title,genre,year,media) VALUES('"
+ id
+ "','"
+ title
+ "','"
+ genre
+ "','"
+ year
+ "','" + media + "')");
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} finally
{
try
{
if (con != null)
con.close();
} catch (SQLException e)
{
}
}
}
}
class LoeschenListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Connection con = null;
try
{
Statement stmt;
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection(
"jdbc:mysql://localhost/movies", "root", "");
stmt = con.createStatement(); // Generiert ein Object vom Typ
// Statement
Lid = getLID.getText();
stmt.executeUpdate("DELETE FROM movies WHERE id = '" + Lid
+ "'");
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} finally
{
try
{
if (con != null)
con.close();
} catch (SQLException e)
{
}
}
}
}
class FilterListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String filterText = getFilter.getText();
if (filterText == null || filterText.length() == 0)
{
movieSorter.setRowFilter(null);
}
try
{
movieSorter.setRowFilter(RowFilter.regexFilter(filterText));
} catch (PatternSyntaxException ex)
{
getFilter.setText("Falsche Eingabe");
}
}
}
}