# SQL Exception



## Milkaselnuss (6. Jan 2013)

Ich arbeite grade an nem kleinen Projekt und will dabei eine mysql tabelle auslesen.

Dazu hab ich folgenden Code:

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;

public class MySQLConnection {

	private static Connection con = null;
	
	//Hostname
	private static String dbHost = "db4.cwsurf.de";
	
	//Port -- Standard: 3306
	private static String dbPort = "3306";
	
	//Datenbankname
	private static String database = "X";
	
	//Datenbankuser
	private static String dbUser = "X";
	
	//Datenbankpasswort
	private static String dbPassword = "X";
	
	private MySQLConnection() {
		try{
		
			// Datenbanktreiber für ODBC Schnittstellen laden.
			// Für verschiedene ODBC Datenbanken muss dieser Treiber
			// nur einmal geladen werden.
			Class.forName("com.mysql.jdbc.Driver");
			
			//Verbindung zur ODBC-Datebank herstellen
			// Es wird die JDBC-ODBC-Brücke verwendet.
			con = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":"
					+ dbPort + "/" + database + "?" + "user=" + dbUser + "&"
					+ "password=" + dbPassword);
		} catch (ClassNotFoundException e){
			JOptionPane.showConfirmDialog(null, "Fehler: Treiber nicht gefunden!", "Fehler", JOptionPane.OK_CANCEL_OPTION, JOptionPane.ERROR_MESSAGE);
		} catch (SQLException e){
			JOptionPane.showConfirmDialog(null, "Fehler: Connection nicht möglich!", "Fehler", JOptionPane.OK_CANCEL_OPTION, JOptionPane.ERROR_MESSAGE);
		}
	}
	
	private static Connection getInstance() {
		
		if (con == null)
			new MySQLConnection();
		return con;
	}
	public static void printScoreList() {
		
		con = getInstance();
		
		if (con != null){
			
			//Anfrage-Statement erzeugen.
			Statement query;
			try {
				query = con.createStatement();
				
				//Ergebnistabelle erzeugen und abholen.
				String sql = "SELECT dbPlayerName, dbScore, dbScore2, dbRank, dbDate " + "FROM actor " + "ORDER BY dbPlayerName";
				
				ResultSet result = query.executeQuery(sql);
				
				//Ergebnissätze durchfahren
				while (result.next()){
					String playerName = result.getString("dbPlayerName");
					int score = result.getInt("dbScore");
					String score2 = result.getString("dbScore2");
					String rank = result.getString("dbRank");
					String date = result.getString("dbDate");
					String output = playerName + " : " + score + " " + score2 + " Rank: " + rank + " (" + date + ")";
					System.out.println(output);
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	//Fügt einen neuen Datensatz hinzu
	public static void insertScore(String playerName, int score, String score2, String rank, String date) {
		
		con = getInstance();
		
		if (con != null){
			
			//Anfrage-Statement erzeugen.
			Statement query;
			try {
				query = con.createStatement();
				
				//Ergebnistabelle erzeugen und abholen.
				String sql = "INSERT INTO actor(dbPlayerName, dbScore, dbScore2, dbRank, dbDate) VALUES('" + playerName + "', '" + score +"', '" + score2 +"', '" + rank +"', '" + date +"')";
				query.executeUpdate(sql);
				
				//Es wird der letzte Datensatz abgefragt
				ResultSet result = query.executeQuery("SELECT actor id, dbPlayerName, dbScore, dbScore2, dbRank, dbDate FROM actor ORDER BY actor_id desc LIMIT 1");
				
				//Wenn ein Datensatz gefunden wurde, wird auf diesen Zugegriffen
				if (result.next()){
					System.out.println("(" + result.getInt(1) + ")" + result.getString(2) + " " + result.getString(3) + " "  + result.getString(4) + " "  + result.getString(5) + " "  + result.getString(6));
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		}
	}
	//Aktualisiert den Datensatz mit der übergebenen actorID
	public static void updateScore(String playerName, int score, String score2, String rank, String date, int actorId){
		
		con = getInstance();
		
		if (con != null){
			//Anfrage-Statement erzeugen
			Statement query;
			try {
				query = con.createStatement();
				
				String querySql = "SELECT actor_id, dbPlayerName, dbScore, dbScore2, dbRank, dbDate FROM actor WHERE actor_id = " + actorId;
				ResultSet result = query.executeQuery(querySql);
				
				if(result.next()){
					//Vorher
					System.out.println("Vorher: (" + result.getInt(1) + ")" + result.getString(2) + " " + result.getString(3) + " "  + result.getString(4) + " "  + result.getString(5) + " "  + result.getString(6));
				}
				
				//Ergebnistabelle erzeugen und abholen.
				String updateSql = "UPDATE actor SET dbPlayerName = '" + playerName + "', dbScore = '" + score + "', dbScore2 = '" + score2 + "', dbRank = '" + rank + "', dbDate = '" + date + "' WHERE actor_id = " + actorId;
				query.executeUpdate(updateSql);
				
				//es wird der letzte Datensatz abgefragt
				result = query.executeQuery(querySql);
				
				if (result.next()){
					System.out.println("NACHHER: (" + result.getInt(1) + ")" + result.getString(2) + " " + result.getString(3) + " "  + result.getString(4) + " "  + result.getString(5) + " "  + result.getString(6));
				}
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}
```

Leider bekomme ich aber immer eine SQLException.
Fällt jemandem, was auf oder weiß jmd, wie ich weiterarbeiten kann?
Ich weiß ehrlich gesagt nicht weiter

MG, Milkaselnuss


----------



## Timothy Truckle (6. Jan 2013)

Milkaselnuss hat gesagt.:


> Leider bekomme ich aber immer eine SQLException.
> Fällt jemandem, was auf oder weiß jmd, wie ich weiterarbeiten kann?


Nur, wenn Du uns verrätst, wass in der SQLException drin steht.

bye
TT


----------



## Milkaselnuss (6. Jan 2013)

Es gibt mir inder Console nur das aus:


```
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
```


----------



## Timothy Truckle (6. Jan 2013)

Die Suchfunktion des Forums hätte geholfen:
http://www.java-forum.org/datenbankprogrammierung/82203-mysql-sqlexception-communications-link-failure.html

bye
TT


----------



## Final_Striker (6. Jan 2013)

Milkaselnuss hat gesagt.:


> Fällt jemandem, was auf oder weiß jmd, wie ich weiterarbeiten kann?
> Ich weiß ehrlich gesagt nicht weiter



In der Regel kann man Datenbanken von solchen kostenlosen Webspace-Anbietern nicht von außer erreichen.


----------



## Milkaselnuss (6. Jan 2013)

Kennst du da zufällig auch ne Ausnahme?


----------



## TKausL (6. Jan 2013)

Es gibt auch Datenbank-Anbieter welche dir NUR eine MySQL-Datenbank (kostenlos) zur Verfügung stellen, welche du dann natürlich auch von außen erreichen kannst.

Ansonsten musst du dir selbst eine Schnittstelle in PHP Schreiben.


----------

