jdbc problem

BMo

Mitglied
Hallo,
ich möchte kontakt mit einer MySQl datenbank aufnehmen:
Jedoch bekomme ich immer den Connection Timeout fehler.
Kann ich mir aber nicht erklären:

Code:
import java.sql.*;

public class MySqlConnection {
        
public static void main(String[] tanga) {
Connection connection = null;
    try {
        // Load the JDBC driver 
        String driverName = "com.mysql.jdbc.Driver";
        Class.forName(driverName);
        // Create a connection to the database
        String serverName = "phpmyadmin.gastrob.de";
        String mydatabase = "gastrob_de";
        String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
        String username = "******";
        String password = "******";
        connection = DriverManager.getConnection(url, username, password);
        } 
    catch (ClassNotFoundException e) {
        System.out.println("Could not find the database driver.");
        }
    catch (SQLException e) {
        System.out.println("Could not connect to the database. "+e);
                }
        }
}

Fehler:

Code:
Could not connect to the database. com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException
MESSAGE: Connection timed out: connect

STACKTRACE:

java.net.ConnectException: Connection timed out: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:173)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:267)
	at com.mysql.jdbc.Connection.createNewIO(Connection.java:2739)
	at com.mysql.jdbc.Connection.<init>(Connection.java:1553)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at MySqlConnection.main(MySqlConnection.java:17)


** END NESTED EXCEPTION **



Last packet sent to the server was 47 ms ago.
 
Hi

bei dir: Class.forName(driverName);
bei mir: Class.forName("com.mysql.jdbc.Driver").newInstance();

Ahja und ich verwende immer IPs und nicht URLs


Gruss
 
nee, läuft eben nämlich nicht lokal.

Class.forName("com.mysql.jdbc.Driver").newInstance();
macht leider aber auch keinen Unterscheid.Gleicher Error, wie zuvor.

Ist es entscheident ob ich ne IP nehme?
 
com.mysql.jdbc.Driver ist ein jar archiv
siehe:
http://dev.mysql.com/downloads/connector/j/5.0.html

in eclipse (3.2 java 1.6) kannst du das archiv dann einbinden

mit der klasse kannst du das archiv dann benutzen

die funktion transformResult(ResultSet rs) liefert ein TableModel
die funktion getResultFor(String sql) liefert das resultset

Code:
/**
 * 
 */
package mh_class_mysql;

//mysql-connector-java-5.0.5 IMPORTIEREN
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
/**
 * @author  michi
 */
public class MH_Class_MySql{
	
	/**
	 * MYSQL Class loader
	 */
	static {
		try {
			Thread.currentThread().getContextClassLoader().loadClass(
					"com.mysql.jdbc.Driver").newInstance();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(
					"Fehler beim laden des Datenbank Treibers!\n Liegt der Treiber im Classpath?");
		}
	}

	/**
	 * VARIABLE 
	 */
	private Connection con;
	private MysqlDataSource dataSource = new MysqlDataSource();
	private String userName;
	private String passWord;
	private String hostName;
	private String dbName;
	private int port;
	private Object[] columnNames;
	
	/**
	 * Construktor MH_Class_MySql
	 * @param p_hostName
	 * @param p_dbName
	 * @param p_port
	 * @param p_userName
	 * @param p_passWord
	 */
	public MH_Class_MySql(String p_hostName, String p_dbName, int p_port, String p_userName, String p_passWord) {
		
		this.hostName = p_hostName;
		this.dbName = p_dbName;
		this.port = p_port;
		this.userName = p_userName;
		this.passWord = p_passWord;

		dataSource.setServerName(this.hostName);
		dataSource.setDatabaseName(this.dbName);
		dataSource.setPort(this.port);
		dataSource.setUser(this.userName);
		dataSource.setPassword(this.passWord);
	}

	/**
	 * INIT MH_Class_MySql
	 *
	 */
	public void init() {
		connect();
	}

	/**
	 * MySql Connection
	 *
	 */
	public void connect() {
		if (con == null)
			try {
				con = dataSource.getConnection();
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}

	/**
	 * Clear MySql Connection object
	 *
	 */
	public void disconnect() {
		if (con != null)
			try {
				if (!con.isClosed()) {
					con.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				con = null;
			}
	}

	/**
	 * Provide Resulset
	 * @param sql
	 * @return
	 */
	public ResultSet getResultFor(String sql) {
		if (con == null)
			return null;
		try {
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(sql);

			return rs;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * Fill Swing JTable model
	 * @param rs
	 * @return
	 */
	public Object[][] transformResult(ResultSet rs) {

		if (rs == null) {
			return new Object[0][0];
		}
		try {
			ResultSetMetaData rsmd = rs.getMetaData();
			int clmCnt = rsmd.getColumnCount();

			columnNames = new Object[clmCnt];

			for (int i = 0; i < columnNames.length; i++) {
				columnNames[i] = rsmd.getColumnName(i + 1);
			}

			List list = new ArrayList();

			while (rs.next()) {
				Object[] rowData = new Object[clmCnt];
				for (int i = 1; i <= clmCnt; i++) {
					rowData[i - 1] = rs.getString(i);
				}
				list.add(rowData);
			}
			rs.close();

			Object[][] data = new Object[list.size()][clmCnt];
			for (int i = 0; i < data.length; i++) {
				data[i] = (Object[]) list.get(i);
			}
			return data;
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * Return Object[] columnNames
	 * @return
	 * @uml.property  name="columnNames"
	 */
	public Object[] getColumnNames() {
		return columnNames;
	}

}
 
Zuletzt bearbeitet:
Hallo,

ich bin mir nicht ganz sicher, aber ich würde mal behaupten der findet die Datenbank nicht, also erreicht sie nicht.

MFG

zEriX
 
Ich weiß ja nicht wie er alles eingerichtet hat und welche Entwicklungsumgebung er hat.
Wenn er den Treiber nicht finden würde, käme eine ClassNotFoundException und kein Connection-Timeout. Dieser Fehler sagt ja aus, dass er versucht sich zu verbinden aber sich nicht verbinden kann aus irgendwelchen Gründen und dann irgendwann abbricht. Grund könnte sein, dass die Datenbank nicht online ist oder eine Firewall den Zugang blockt. Das sind aber alles nur Vermutungen.
 
Zurück