url en classpath voor jdbc connectie

Status
Niet open voor verdere reacties.

Clemens Schalkw

Gebruiker
Lid geworden
5 dec 2007
Berichten
166
Ik krijg het maar niet voor elkaar om een connectie te krijgen met de database.
Wellicht kan iemand mij helpen.

Ik heb de volgende gegevens ingevuld:

Code:
	protected static final String JDBC_URL                   = "jdbc:mysql://217.67.229.77/"; // ip-adres van server
	protected static final String JDBC_USER                  = "database_user";
	protected static final String JDBC_PASS                  = "password_database";
	protected static final String JDBC_DRIVER                = "src.com.mysql.jdbc.Driver";


	  protected void jdbcConnect()
	  {
	    try
	    {
	      Class.forName(JDBC_DRIVER).newInstance();
	      connection = (Connection) DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
	    }
	    catch (ClassNotFoundException e)
	    {
	      error("Can't find " + JDBC_DRIVER + "! (" + e + ")", e);
	    }
	    catch (InstantiationException e)
	    {
	      error("Can't instantiate " + JDBC_DRIVER + "! (" + e + ")", e);
	    }
	    catch (IllegalAccessException e)
	    {
	      error("Can't access " + JDBC_DRIVER + "! (" + e + ")", e);
	    }
	    catch (SQLException e)
	    {
	      error("Can't connect to the database! (" + e + ")", e);
	    }
	  }

Ik heb hetvolgende op de server kunnen vinden (Linux server) :

/mysql-connector-java-5.1.6/src/com/mysql/jdbc

In deze directory zit onderandere Driver.java , maar het is me nog niet gelukt om een connectie te krijgen. Heb ik de verkeerde te pakken ?

[EDIT]
Hieronder de stacktrace die ik krijg:

Can't find src.com.mysql.jdbc.Driver! (java.lang.ClassNotFoundException: src.com.mysql.jdbc.Driver)
java.lang.ClassNotFoundException: src.com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at Connection.jdbcConnect(Connection.java:34)
at Connection.main(Connection.java:27)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

[/EDIT]
 
Laatst bewerkt:
De driver moet op de client staan en ergens in je classpath.

De driver is meestal een .jar file, deze moet je toevoegen aan je project.

Eclipse: Project properties -> java build path -> libraries -> add jar file.
Netbeans: Project properties -> library -> add jar / folder
 
maar ik wil wegschrijven op een server waar ik MySQL op draai.

Maar de driver is alleen nodig voor client.
De communicatie met de server verloopt op een lager niveau, Deze communicatie wordt verzorgt door de driver. De server heeft standaard een software waarmee deze met de buitenwereld communiceert.

gr.
Patrick
 
Oh ok. Bedankt.
Kun je me dan vertellen hoe ik dat moet doen verder ?
Hoef ik dan in mijn applicatie geen connectie te maken ? Of als dat wel zo is hoe doe ik dat dan in mijn geval?
Als ik bepaalde data wil wegschrijven na het klikken op (bijvoorbeeld) de "Save"-button hoe verwerk ik dan mijn query ?
Erg bedankt voor je informatie en hulp.

[EDIT]
Ik gebruik overigens netbeans en ik zie net dat de JAR-file nog niet in mijn project staat. Waar haal ik die vandaan?
[/EDIT]
 
Laatst bewerkt:
Je moet ergens een JDBC / mySQL driver zoeken.. Je kan op www.mysql.com zoeken, maar zal ook wel meegeleverd zijn met je server. Deze .jar/zip/directory moet je kopieren naar je client computer.

Toevoegen aan je project. (project, rechter muisklik, > properties > library -> add library.)

Met de code uit je eerste mail maak je dus een connectie met de de database. Je connection object heeft een methode createStatement(). Dit geeft een statement object terug.
dus in het kort:

Code:
Class.forName(src.com.mysql.jdbc.Driver).newInstance(); //afhankelijk van je driver!
Connection connection = DriverManager.getConnection("jdbc:mysql://217.67.229.77","username","password");
Statement statement = connection.createStatement()
ResultSet result = statement.executeQuery("SELECT * FROM tabel");
result bevat nu alle records uit de database.

voor update/insert/delete gebruik je statement.executeUpdate("INSERT ... ");
 
Ik heb dit op mijn server staan :

/root/mysql-connector-java-5.1.6/mysql-connector-java-5.1.6-bin.jar

Moet ik dan die op (bijvoorbeeld) mijn laptop zetten en dan vervolgens toevoegen aan mijn project properties (alleen de jar of de hele directory ?) ?

Hoe weet ik dan welk class-path ik moet hebben >

[EDIT]
Even ter verduidelijking;
Ik heb een Linux Server en een Windows Vista Laptop
[/EDIT]
 
Laatst bewerkt:
Ok. Ik ben er nu bijna.
Ik krijg nu een SQLException :

Can't connect to the database! (java.sql.SQLException: null, message from server: "Host 'ipd50a0940.speed.planet.nl' is not allowed to connect to this MySQL server")
java.sql.SQLException: null, message from server: "Host 'ipd50a0940.speed.planet.nl' is not allowed to connect to this MySQL server"


Mijn code ziet er nu zo uit:

Code:
public class Connection {

	protected static final String JDBC_URL                   = "jdbc:mysql://217.67.229.77/mysql/";
	protected static final String JDBC_USER                  = "***************"; // database username
	protected static final String JDBC_PASS                  = "******"; // database password
	protected static final String JDBC_DRIVER                = "com.mysql.jdbc.Driver";

	  protected  Connection            connection;

      public Connection() {
      }

      public static void main(String[] args) {
          Connection con = new Connection();
          con.jdbcConnect();
      }

	  protected void jdbcConnect()
	  {
	    try
	    {
	      Class.forName(JDBC_DRIVER).newInstance();
	      connection = (Connection) DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
	    }
	    catch (ClassNotFoundException e)
	    {
	      error("Can't find " + JDBC_DRIVER + "! (" + e + ")", e);
	    }
	    catch (InstantiationException e)
	    {
	      error("Can't instantiate " + JDBC_DRIVER + "! (" + e + ")", e);
	    }
	    catch (IllegalAccessException e)
	    {
	      error("Can't access " + JDBC_DRIVER + "! (" + e + ")", e);
	    }
	    catch (SQLException e)
	    {
	      error("Can't connect to the database! (" + e + ")", e);
	    }
	  }

//	  protected static void jdbcClose()
//	  {
//	    try
//	    {
//	      connection.close();
//	    }
//	    catch (SQLException e)
//	    {
//	      error("Can't close database connection! (" + e + ")", e);
//	    }
//	  }

	  protected static void error(String s, Exception e)
	  {
	    System.err.println(s);
	    e.printStackTrace(System.err);
	    System.exit(1);

       }
}
 
Goed. Volgens mij mag ik dus niet remote connecten met mijn server. Ik zal dat eens navragen bij het datacenter.
Ik heb het met localhost geprobeerd en heb de connectie getest met

Code:
if (connection.isValid(1000)) {
// do something
}

Dit geeft dus true terug.
Als ik dan een query wil uitvoeren (zoals bovenstaand genoemd) krijg ik

Can't connect to the database! (java.sql.SQLException: No database selected)
java.sql.SQLException: No database selected
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2536)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1383)
at Database.jdbcConnect(Database.java:38)
at Database.main(Database.java:28)
 
Je moet op de remote server je toegang verlenen. Dit kan je met GRANT doen, maar hier heb je dba rechten voor nodig. De exacte syntax moet je maar even google (ik ken alleen oracle SQL variant)

Netbeans heeft ook een database navigator, ik zal eerst proberen met deze toegang tot je (locale) database te krijgen. Als dit lukt kan je de de db URL en schema namen achterhalen en in je java programma gebruiken...
 
Bedankt voor je hulp.
Ik heb het nog niet gedaan. Ik heb wel gelezen hoe en wat ik moet doen, maar ik denk dat ik het nog een keer goed moet lezen voordat ik teveel of te weinig gebruikers rechten geef :p.
Ik heb connectie gemaakt met mySQL op een Wamp server lokaal en dat werkt.
Uiteraard loop ik nu tegen andere "probleempjes" aan, maar daar open ik een nieuw topic voor.
Nogmaals heel erg bedankt en ik zet dit topic op "opgelost".
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan