mysql Abfrage in Array überführen für Darstellung in jTable

JBerry

Grünschnabel
Seid gegrüsst
Ich bin auf dieses Forum aufmerksam geworden aufgrund dieses Beitrags hier:
http://www.tutorials.de/java-grundl...rray-while-schleife-fuellen-und-ausgeben.html

Leider hat dies bei mir nicht zum gewünschten Erfolg geführt bzw. in meinem Code befinden sich scheinbar immernoch massive Fehler. Ich beschäftige mich mehr oder weniger seit dem ganzen Tag mit diesen Zeilen, habe schon einige Hürden durch nachlesen und forschen nehmen können, komme jetzt aber definitiv nicht mehr weiter und wende mich hoffnungsvoll an dieses Forum.


Im Moment wird mir im Eclipse auf Zeile 19 folgender Fehler ausgegeben: "Syntax error on token ";", { expected after this token"
Wenn ich den Lösungsvorschlag der Zeile umsetzte bekomme ich etliche construtor Fehlermeldungen.

Danke schon vorab für die Hilfestellung.
Noch eine Anmerkung: dies ist mein erstes Java Projekt, ich bin also blutiger Anfänger. wählte eure Erklärungen bitte so, dass ich nicht bei jeder zweiten Zeile mein Java Buch aufschlagen muss :D

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[][]{};
		
			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

ResultSet rs;
rs =	  stmt.executeQuery("SELECT title, genre FROM movies");
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)) ;
i++ ;
}

		
		} catch (ClassNotFoundException ex)
		{
			// TODO Auto-generated catch block
			ex.printStackTrace();
		} finally {
		    try {
		      if(con != null)
		        con.close();
		    } catch(SQLException ex) {}

		}
			
		
	}

private String[] columnsNames = new String[] {"Title", "Genre"};
	
	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];
	}
}

Für die dies interessiert. Mein Java Projekt soll eine Filmverwaltungssoftware mit Ausleihfunktion werden. Als erstes habe ich einen mysql datenbank erstellt (2 tables, nicht der rede wert ;) ) da ich dies zumindest konnte. Anschliessend habe ich begonnen Records in der Datenkban zu erstellen und zu löschen über die Kommandozeile in Java. Seit gestern beschäftige ich mich mit dem GUI und habe seither grosse Mühe.
Ich habe bisher ein GUI zum erfassen und löschen von Filmeinträgen in der Datenbank. Die Auflistung der vorhandenen Datensätze funktioniert noch nicht.
 
Zuletzt bearbeitet:
Grund ist hier, dass der Code von Zeile 20ff. nicht in einer Klasse stehen darf, sondern immer
a) in einer Methode
b) in dem Constructor
c) in einem static-Block
stehen muss.

PS: Mein Tipp: Code korrekt formatieren, einrücken, etc. In Eclipse gibt es dafür den Formatter unter Source | Format.
 
Habe wohl vor lauter Bäumen den Wald nicht mehr gesehen. Habe eine Methode eingefügt und Eclipse meldet mir jetzt keinen Fehler mehr direkt im Code.

Allerdings habe ich nun eine "java.lang.ArrayIndexOutOfBoundsException" die ich mit meinem Anfänger-Wissen bisher nicht beheben konnte.

Der Fehler liegt bei:
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)

Darf ich wohl erneut um Hilfe ersuchen?

Hier nochmal 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");
			}
		}
	}
}
 
Diese Exception tritt auf, weil in deiner MovieTableModel.java in der Methode dataselect() auf das Array 'data' zugegriffen wird. Dieses Array wird aber offensichtlich überhaupt nicht initialisiert: 'data' ist ein privates Attribut und in der Klasse MovieTableModel steht nur
Java:
private String[][] data = new String[][]
(Zeile 13), jedoch keine Initialisierung mit der gewünschten Größe.
So etwas lässt sich übrigens mit dem Debugger der gängigen IDEs aufdecken:
http://eclipsetutorial.sourceforge.net/debugger.html
http://netbeans.org/features/java/debugger.html
 
darauf bin ich kurz zuvor auch gekommen und habe den array mit NULL initialisiert und später überschrieben.
Allerdings entsteht nun bereits der nächste Fehler denn ich aber noch nicht genauer nachforschen konnte. So langsam vergeht mir die Lust am ganzen :)

Code:
Exception in thread "main" java.lang.NullPointerException
	at ch.haag.Start.MovieTableModel.getRowCount(MovieTableModel.java:85)
	at javax.swing.table.TableRowSorter$TableRowSorterModelWrapper.getRowCount(Unknown Source)
	at javax.swing.DefaultRowSorter.setModelWrapper(Unknown Source)
	at javax.swing.table.TableRowSorter.setModel(Unknown Source)
	at javax.swing.table.TableRowSorter.<init>(Unknown Source)
	at ch.haag.Start.MainJFrame.los(MainJFrame.java:77)
	at ch.haag.Start.MainJFrame.main(MainJFrame.java:45)

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 = null;

	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");
			int count = rs.getInt(1);
			data = new String[count][2];

			int index = 0;
			while (rs.next())
			{
				System.out.println("index ist: " + index); // indexdurchlauf
				// 0 Ist die Spalte title, 1 Spalte genre
				data[index][0] = rs.getString("title");
				data[index][1] = rs.getString("genre");
				index++;
			}

		} catch (ClassNotFoundException ex)
		{
			// TODO Auto-generated catch block
			ex.printStackTrace();
		} finally
		{
			try
			{
				if (con != null)
					con.close();
			} catch (SQLException ex)
			{
			}

		}

	}

	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];
	}

}
 
jetzt scheints soweit zu funktionieren. musste die anzahl rows in "count" noch anderst zählen.
jetzt funktioniert der code soweit. aber mein JTable wird noch immer leer angezeigt. aber das ist wohl ein anderes problem vermute ich. Hier nochmal die Klasse die jetzt zu funktionieren scheint:

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 = null;

	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
		{
			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");
			int count = 0;
			while ( rs.next() )
			count++;
			System.out.println("count ist: " +count);
			//int count = rs.getInt(1);
			data = new String[count][2];

			rs = stmt.executeQuery("SELECT title, genre FROM movies");
			int index = 0;
			while (rs.next())
			{
				System.out.println("index ist: " + index); // indexdurchlauf
				// 0 Ist die Spalte title, 1 Spalte genre
				data[index][0] = rs.getString("title");
				data[index][1] = rs.getString("genre");
				index++;
				
				if(data==null)
					System.out.println("data ist null");
				else
					System.out.println("data ist nicht null");
					System.out.println("data ist: "+data);
				
				
			}

		} catch (ClassNotFoundException ex)
		{
			// TODO Auto-generated catch block
			ex.printStackTrace();
		} finally
		{
			try
			{
				if (con != null)
					con.close();
			} catch (SQLException ex)
			{
			}

		}

	}

	public String getColumnName(int column)
	{
		return columnsNames[column];
	}

	@Override
	public int getColumnCount()
	{
		return 2;
	}

	@Override
	public int getRowCount()
    {
		if(data == null)
			return 0;
		else
			return data.length;
	}

    

	@Override
	public Object getValueAt(int rowIndex, int columnIndex)
	{
		// TODO Auto-generated method stub
	if(data == null)
		return 0;
		else
		return data[rowIndex][columnIndex];
	}

}
 
Zurück