# Fehler beim Starten des Servers für H2 Database



## Alex_winf01 (10. Dez 2007)

Folgender Code:


```
import java.awt.*;
import javax.swing.*;
import java.sql.*;
import org.h2.tools.Server;
 

/** Die Klasse Login stellt die Verbindung zur Datenbank her.*/
public class Login
{
	// Variablendeklaration für die gesamte Klasse
	public static Connection connection;
  	public static String lese, lese_dokumentation, lese_icd1, lese_icd2, lese_icd3;
  	public static Statement stmt, stmt1, stmt2, stmt3, stmt4;
  	public static ResultSet result, result_dokumentation, result_icd1, result_icd2, result_icd3;
        	
              
   	/******************************************************************

	Anmeldedialog mit Benutzernamen, Passort und DB-Namen

	******************************************************************/
	
	private static void login()
	{
		String[] s_options = {"Anmelden", "Abbrechen"};
		
		JPanel pnl_main = new JPanel();
		pnl_main.setLayout(new GridLayout(3,3,10,10));

                JLabel lbl_username = new JLabel("Benutzername: ", JLabel.RIGHT);
		JTextField txt_username = new JTextField();

		JLabel lbl_password = new JLabel("Passwort: ", JLabel.RIGHT);
		JPasswordField txt_password = new JPasswordField();


		pnl_main.add(lbl_username,0);
		pnl_main.add(txt_username,1);

		pnl_main.add(lbl_password,2);
		pnl_main.add(txt_password,3);

                
		if(JOptionPane.showOptionDialog(null, pnl_main,
				"DB-Anmeldung",
				JOptionPane.OK_CANCEL_OPTION,
				JOptionPane.INFORMATION_MESSAGE,
				null, s_options,
				s_options[0]) != 0)
				{
    				System.exit(0);
				}
	}


	/******************************************************************
	main-Methode

	******************************************************************/
	public static void main(String[] args)
	{
		

        // Aufruf des Dialogs zur Identifikation
            
        login();
        try
        {
        	Server server = Server.createTcpServer(args).start();
        	Class.forName("org.h2.Driver");
    		connection = DriverManager.getConnection("jdbc:h2:tcp:localhost/test", "sa", "");
    		lese = "Select * from p";
			stmt = connection.createStatement();
			result = stmt.executeQuery(lese.toString());
			
			lese_dokumentation = "Select * from d";
			stmt1 = connection.createStatement();
			result_dokumentation = stmt1.executeQuery(lese_dokumentation.toString());
			
			lese_icd1 = "Select * from i";
			stmt2 = connection.createStatement();
			result_icd1 = stmt2.executeQuery(lese_icd1.toString());
			
			}
		}
	    catch(Exception e)
	    {
	    	JOptionPane.showMessageDialog(null, "Es ist folgender Fehler aufgetreten: " + e,
				"DB-Meldung", JOptionPane.ERROR_MESSAGE);
			System.out.println(e);
	    }
        
        StartFrame frm = new StartFrame("BIK-BADO-KJPa");
		frm.setVisible(true);
		frm.setSize(400,400);
		frm.pack();
	}
}
```

Ich bekomme die Fehlermeldung, dass die Tabelle p nicht existiert. Gehe ich in die Weboberfläche, dann sehe ich die Tabelle p. Ich vermute mal, ich habe da was falsch gemacht mit dem Starten des Servers. Ich kann nämlich nicht sehen, dass der Server gestartet ist. Wer kann mir helfen?


----------



## Alex_winf01 (11. Dez 2007)

Kann mir keiner helfen?


----------



## The_S (11. Dez 2007)

naja, wenn er sagt, dass er p nicht finden kann, dann sollte er schon mit der DB verbunden sein. Starte doch mal deinen Server manuel und schau, ob er die Tabelle dann findet.

btw: verwende mal ordentliche Namen. "p", "i" und "d" nennt man keine Tabellen.


----------



## Alex_winf01 (11. Dez 2007)

@ Hobbit_Im_Blutrausch

Danke schon mal für Deine Antwort. Natürlich heissen die Tabellen anders und nicht p, i. Das sind nur für das Forum Synonyme. 

Also, wenn ich die Web-Oberfläche starte erscheint rechts in der Menüleiste das Ich mache dabei folgendes:

1. Folgende Zeilen auskommentieren:


```
import org.h2.tools.Server;
```
 und 
	
	
	
	





```
Server server = Server.createTcpServer(args).start();
```

2. Start, Programme, H2 (Console). Die Weboerfläche von H2 startet
3. meine Applikation starten. Tabellen werden gefunden und ich kann DS einfügen, bearbeiten, löschen und mir anzeigen lassen.

Nur sobald ich die Zeilen unter Punkt 1 wieder reinnehme und die Weboberfläche nicht starte, kann er die Tabellen nicht finden. Daher vermute ich, dass entweder der Server nicht startet oder die Verbindung zur DB nicht stimmt.


----------



## The_S (11. Dez 2007)

Naja, die Verbindung zur DB muss stimmen, da du sonst auch bei manuellem Start des Servers keine Daten bekommen solltest.

Zeig uns doch mal die Server.createTcpServer(args).start() Klasse/Methoden.


----------



## Alex_winf01 (11. Dez 2007)

@ Hobbit_Im_Blutrausch

Die Zeile habe ich aus dem Handbuch. Dort steht nur, dass man den Server wie folgt starten kann:


```
Server server = Server.createTcpServer(args).start();
```

Die entsprechende Klasse liegt in der H2.jar (die muss ich über den JCreator eh einbinden wegen dem JDBC-Treiber). An den Code selber von createTCPServer(args) komm ich nicht ran. :roll:

EDIT:

Hier ist der Link dazu (Punkt Using the Server):

www.h2database.com/html/frame.html


----------



## The_S (11. Dez 2007)

Was übergibst du denn für "args"? Und sicher, dass du den Server aus deinem Programm raus starten willst? Normalerweiße läuft ein Server immer und die Anwendungen verbinden sich nur mit ihm.


----------



## Alex_winf01 (11. Dez 2007)

Ich bin mir nicht genau sicher, was ich da übergeben muss. Hab es einfach mal so ausprobiert. In der Api steht:



> static Server createTcpServer(String[] args) throws SQLException
> Create a new TCP server, but does not start it yet. Example:
> 
> Server server = Server.createTcpServer(new String[]{"-tcpAllowOthers", "true"}).start();
> ...


----------



## The_S (11. Dez 2007)

Und eine Exception wird nicht geworfen? Wird der richtige Port verwendet? Und nach wie vor, warum willst du einen Server von deinem Programm aus starten?


----------



## Alex_winf01 (11. Dez 2007)

Es wird die Exception geworfen, dass die Tabellen nicht gefunden werden. URL passt.

Da ich solche Probleme habe, den Server aus der Anwendung zu starten, werde ich den Server wohl einmalig starten lassen (über eine .bat oder so was) und greife dann mit meiner Anwendung nur noch drauf zu.


----------



## The_S (11. Dez 2007)

ja, das ist auch der übliche Weg  . Bzw. evtl. greift die Weboberfläche nicht auf die db "test" zu, sondern auf eine andere!? Versuch doch mal, ob du Tabellen aus Java heraus erstellen kannst.


----------



## Alex_winf01 (11. Dez 2007)

Ich kann aus meiner Anwendung heraus auch Tabellen anlegen, bearbeiten, löschen. Ich kann DS anlegen, bearbeiten, löschen, anzeigen lassen. Das funzt also.


----------



## The_S (11. Dez 2007)

OK, bist du dann sicher, dass du dich auf die richtige DB verbindest?


----------



## HoaX (11. Dez 2007)

wenn du h2 über start->programme startest ist wohl das arbeitsverzeichnis ein anderes -> du verwendest nicht die selbe datenbank


----------

