import java.sql.*;
import java.util.concurrent.SynchronousQueue;

import javax.swing.table.DefaultTableModel;

public class Helper {

	Connection con;
	Statement stmt;
	ResultSet rs;
	ResultSetMetaData rsmd;

	//baut verbindung auf
	public void connect() {
		try {
			con = DriverManager.getConnection("jdbc:mysql://102-012/", "intabi19", "hallo");
			System.out.println("connected");
		} catch (SQLException e) {
			System.out.println(e);
		}
	}
	
	//baut verbindung auf zur Auswahl 
	public void connect(String databaseName) {
		try {
			con = DriverManager.getConnection("jdbc:mysql://102-012/"+ databaseName, "intabi19", "hallo");
			System.out.println("connected");
		} catch (SQLException e) {
			System.out.println(e);
		}
	}

	public void listTables()
	{
		try {
			rs = con.getMetaData().getTables(null, null, null, null);
			while (rs.next())
			{
				System.out.println(rs.getString(3));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void passSQL(String sql)
	{
		try {
			stmt = con.createStatement();
			stmt.execute(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public DefaultTableModel getTableModel(String sqlString) {
		DefaultTableModel model = new DefaultTableModel();

		try {
			// wichtig nicht vergessen ohne diese Aussage gibts nen Fehler(Nullpointer)
			stmt = con.createStatement();
			// schickt SQL Abfrage ab und speichert im Objekt rs
			rs = stmt.executeQuery(sqlString);
			// liest MetaDaten aus und speichert im Objekt rsmd
			rsmd = rs.getMetaData();
			// Breite der Tabelle
			int colCount = rsmd.getColumnCount();

			// Ein String Array hat die Länge der Breite der Tabelle
			String colData[] = new String[colCount];
			// Läuft einmal die Breite ab und fügt die Spaltennamen zum Array hinzu
			for (int i = 1; i <= colCount; i++) {
				colData[i - 1] = rsmd.getColumnLabel(i);
			}
			// setzt die Spaltennamen im DefaultTableModel
			model.setColumnIdentifiers(colData);
			
			// Ein String Array hat die Länge der Breite der Tabelle 
			String rowData[] = new String[colCount];
			//Läuft solange es noch weitere Zeilen im rs gibt
			while (rs.next()) {
				// Läuft jede Spalte ab
				for (int i = 0; i < colCount; i++) {
					//trägt Werte der spalte in den Array ein überschreibt vorherige Werte
					rowData[i] = rs.getString(i+1);
				}
				// fügt komplette Zeile dem DefaultTableModel hinzu
				model.addRow(rowData);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//gibt fertiges DefaultTableModel zurück
		return model;
	}
}
