SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an

TheTruth88

Neues Mitglied
Hi Leute,

ich wollte eine Rangliste mit SWT erstellen, in der die Daten aus einer Mysql-Datenbank ausgelesen werden sollen. Ich hab jetzt das Problem, das immer nur ein Wert ausgelesen wird.

Hier der Code:

Java:
import java.sql.*;

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;


public class x {
	
	
	static Display display = new Display();
	static ResultSet rs[] = new ResultSet[100];

	public static void main(String[] args) {
		

		Shell shell = new Shell(display);
	
		
		shell.setBounds(0,0,1365,725);
		shell.setText("Rangliste");
		shell.setBounds(0,0,1365,725);
		shell.open();	
	
		Table table = new Table(shell, SWT.NONE);
		table.setBounds(10,10,627,650);
		
		table.setLinesVisible(true); table.setHeaderVisible(true);

		TableColumn a = new TableColumn(table,SWT.CENTER);
		a.setText("Platz");
		a.setWidth(40);
		TableColumn b = new TableColumn(table,SWT.LEFT);
		b.setText("Name");
		b.setWidth(160);
		TableColumn c = new TableColumn(table,SWT.LEFT);
		c.setText("Land");
		c.setWidth(100);
		TableColumn g = new TableColumn(table,SWT.CENTER);
		g.setText("Punkte");
		g.setWidth(75);
		TableColumn d = new TableColumn(table,SWT.CENTER);
		d.setText("Erste Plätze");
		d.setWidth(75);
		TableColumn e = new TableColumn(table,SWT.CENTER);
		e.setText("Zweite Plätze");
		e.setWidth(85);
		TableColumn f = new TableColumn(table,SWT.CENTER);
		f.setText("Dritte Plätze");
		f.setWidth(75);
		final TableItem[] a2 = new TableItem[2];
	
	  
	
		    for (int i = 0; i <= 1; i++) {
		      a2[i] = new TableItem(table, SWT.NONE);
		      populateItem(a2[i]);
		    }

		Button aktu = new Button(shell, SWT.BUTTON1);
		aktu.setBounds(700,540,100,25);
		aktu.setText("Aktualisieren");
		
		aktu.addListener(SWT.Selection, new Listener() {
		      public void handleEvent(Event event) {
		    	  for (int i = 0; i <= 1; i++) {
				      
				      populateItem(a2[i]);
				    }
		        }
		});
		
		while (!shell.isDisposed()){
			if (!display.readAndDispatch()){
			display.sleep();
			}}	
				
		}	
			
		static void populateItem(TableItem a1) {
		
		try{
			int[] platz = new int[3];
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost/skialpin","root","limoneneis");
			
			con.setReadOnly(true);
			Statement stmt = con.createStatement();
			 
			for(int i = 0;i <= 1; i++){
			rs[i] = stmt.executeQuery("Select name,lname,punkte,erster,zweiter,dritter from fahrer ORDER BY id ASC");
		
			rs[i].next();
				platz[i]= i+1;
			
				
			
				if(platz[i] <= 10){
					a1.setForeground(display.getSystemColor (SWT.COLOR_RED));
					}
				a1.setText(new String[] {""+platz[i],rs[i].getString(1)+" ",rs[i].getString(2)+"",rs[i].getInt(3)+"",rs[i].getObject(4)+"",rs[i].getObject(5)+"",rs[i].getObject(6)+""});
			}
			
			}catch(Exception e){
				System.out.println("Es ist ein Fehler aufgetreten!"+e);
				}
				
		}

		}


Habt ihr ne Lösung? Hab es auch schon mit while(rs.next()) probiert, hat aber auch nicht geholfen.

MfG
Truth
 
Oh Gott. Ich glaube du hast hier einige Konzepte reichlich missverstanden, das wäre mir jetzt im Moment zu viel, alles zu Beantworten. Nur Kurz:
- Verwende in SWT keine TableItems mehr - schau dir mal JFace an, das ist nach initialer Lernphase weitaus effizienter zu programmieren.
- ResultSet-Array? Ernsthaft? Du hast hier ein massives Verständnissproblem, wie man Daten via JDBC aus einer DB-leist, daher ist das gesamte Thema hier nichts, was mit SWT zu tun hat und sollte eher im Unterforum http://www.java-forum.org/datenbankprogrammierung/ diskutiert werden!
 
Java:
			for(int i = 0;i <= 1; i++){
			rs[i] = stmt.executeQuery("Select name,lname,punkte,erster,zweiter,dritter from fahrer ORDER BY id ASC");
		
			rs[i].next();
				platz[i]= i+1;
			
				
			
				if(platz[i] <= 10){
					a1.setForeground(display.getSystemColor (SWT.COLOR_RED));
					}
				a1.setText(new String[] {""+platz[i],rs[i].getString(1)+" ",rs[i].getString(2)+"",rs[i].getInt(3)+"",rs[i].getObject(4)+"",rs[i].getObject(5)+"",rs[i].getObject(6)+""});
			}

Dein Grundproblem ist das du jedesmal am Anfang deiner Schleife dein Statement neu ausführst.
Dieses solltest du 1x vor der Schleife ausführen.

Ansonsten nimm dir die Ratschläge der anderen zu Herzen, in deinem Code fehlt ein Konzept.
UI und Datenbankzugriffe sollten nie so miteinander arbeiten.
 
Zuletzt bearbeitet:

Zurück
Oben