LinuxQuestions.org
Welcome to the most active Linux Forum on the web.
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices


Reply
  Search this Thread
Old 06-12-2011, 07:41 PM   #1
jordanwb
Member
 
Registered: Dec 2008
Posts: 34

Rep: Reputation: 0
java cannot find mysql connector


I'm trying to use MySQL's JDBC connector for java but even though I set the CLASSPATH variable, java cannot find the com.mysql.jdbc.Driver class.

Code:
[jordan@Jordan-Laptop java-stuff]$ ls /usr/share/java
cal10n                           geronimo-jta.jar            java_cup-runtime.jar  js-1.7.jar        mysql-connector-java-5.1.15.jar  rhino-examples.jar
gcj-endorsed                     java_cup-0.11a.jar          jaxp_parser_impl.jar  js.jar            mysql-connector-java.jar         rhino.jar
geronimo-jta-1.1.1.jar           java_cup.jar                jline-0.9.94.jar      jta.jar           rhino-1.7.jar                    sinjdoc.jar
geronimo-jta_1.1_spec-1.1.1.jar  java_cup-runtime-0.11a.jar  jline.jar             libgcj-4.5.1.jar  rhino-examples-1.7.jar           slf4j
[jordan@Jordan-Laptop java-stuff]$ echo $CLASSPATH
/usr/share/java
[jordan@Jordan-Laptop java-stuff]$ java  -jar my-jar.jar 
Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:186)
	at Server.loadMysqlDriver(Server.java:29)
	at Server.<init>(Server.java:23)
	at Server.main(Server.java:42)
I installed the jre and the mysql connector package via Fedora's package manager
 
Old 06-12-2011, 08:09 PM   #2
dwhitney67
Senior Member
 
Registered: Jun 2006
Location: Maryland
Distribution: Kubuntu, Fedora, RHEL
Posts: 1,541

Rep: Reputation: 335Reputation: 335Reputation: 335Reputation: 335
EDIT (sorry)... I did not see where you echo-ed the CLASSPATH. It should be set to (something like):
Code:
CLASSPATH=./:/usr/share/java/mysql-connector-java.jar
It also would be helpful to know whether the mysqld service is running on your system. Lastly, it wouldn't hurt to post the relevant Java source code of your application.

Last edited by dwhitney67; 06-12-2011 at 08:12 PM.
 
Old 06-12-2011, 08:27 PM   #3
jordanwb
Member
 
Registered: Dec 2008
Posts: 34

Original Poster
Rep: Reputation: 0
Quote:
Originally Posted by dwhitney67 View Post
It also would be helpful to know whether the mysqld service is running on your system.
I'm running MySQL on another machine.

Quote:
Originally Posted by dwhitney67 View Post
Lastly, it wouldn't hurt to post the relevant Java source code of your application.
Code:
import java.sql.*;
import java.util.Properties;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
/**
 * Write a description of class Server here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Server
{
    private Connection db;
    private Properties settings;
    
    public Server() throws Exception
    {
        this.settings = new Properties();
        this.settings.load (new FileInputStream ("settings.conf"));
        
        try
        {
            this.loadMysqlDriver();
        }
        catch (ClassNotFoundException cnfe)
        {
            System.out.println ("The MySQL driver could not be found. Are you sure its installed?");
            return;
        }
        
        try
        {
            this.connectToMysqlServer();
        }
        catch (SQLException sqle)
        {
            System.out.println ("A connection could not be made with the MySQL server.");
            return;
        }
    }
    
    private void loadMysqlDriver () throws ClassNotFoundException, InstantiationException, IllegalAccessException, ClassNotFoundException
    {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
    }
    
    private void connectToMysqlServer () throws SQLException
    {
        String url = "jdbc:mysql://" + this.settings.getProperty ("mysql-location") + ":" + this.settings.getProperty ("mysql-port") + "/" + this.settings.getProperty ("mysql-database");
            
        this.db = DriverManager.getConnection (url, this.settings.getProperty ("mysql-username"), this.settings.getProperty ("mysql-password"));
    }
    
    public static void main(String args[]) throws Exception
    {
        new Server();
    }
}
I tried

Code:
CLASSPATH=./:/usr/share/java/mysql-connector-java.jar
but the same thing happened.

Thanks

Last edited by jordanwb; 06-12-2011 at 08:31 PM.
 
Old 06-12-2011, 09:43 PM   #4
dwhitney67
Senior Member
 
Registered: Jun 2006
Location: Maryland
Distribution: Kubuntu, Fedora, RHEL
Posts: 1,541

Rep: Reputation: 335Reputation: 335Reputation: 335Reputation: 335
Quote:
Originally Posted by jordanwb View Post
... but the same thing happened.
I presume you mean the "class not found" exception. Please verify that you have setup the CLASSPATH correctly, perhaps even making sure that it is exported.

I just installed the relevant MySql packages on my other machine, setup the class-path, and then executed a program similar to yours. The application ran successfully.
 
Old 06-12-2011, 10:19 PM   #5
oposit
LQ Newbie
 
Registered: Feb 2007
Posts: 14

Rep: Reputation: 1
Maybe you need MySQL connector for Java

Take a look at http://www.mysql.com/downloads/connector/j/
 
Old 06-13-2011, 08:48 AM   #6
jordanwb
Member
 
Registered: Dec 2008
Posts: 34

Original Poster
Rep: Reputation: 0
Quote:
Originally Posted by dwhitney67 View Post
I presume you mean the "class not found" exception. Please verify that you have setup the CLASSPATH correctly, perhaps even making sure that it is exported.

I just installed the relevant MySql packages on my other machine, setup the class-path, and then executed a program similar to yours. The application ran successfully.
Yes I got a Class Not Found Exception. This is what I've done:

Code:
[jordan@Jordan-Laptop java-stuff]$ export CLASSPATH=./:/usr/share/java/mysql-connector-java.jar
[jordan@Jordan-Laptop java-stuff]$ echo $CLASSPATH
./:/usr/share/java/mysql-connector-java.jar
[jordan@Jordan-Laptop java-stuff]$ java -jar ./my-jar.jar 
Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:186)
	at Server.loadMysqlDriver(Server.java:29)
	at Server.<init>(Server.java:23)
	at Server.main(Server.java:42)
Quote:
Originally Posted by oposit View Post
Fedora's repos have the mysql connector. Thanks though.
 
Old 06-13-2011, 09:11 AM   #7
dwhitney67
Senior Member
 
Registered: Jun 2006
Location: Maryland
Distribution: Kubuntu, Fedora, RHEL
Posts: 1,541

Rep: Reputation: 335Reputation: 335Reputation: 335Reputation: 335
The only other thing I can think of is that there is a firewall blocking the port on at least one of your machines.

Can you get the application to connect to MySQL if you run it on the localhost where mysqld is running?
 
Old 06-13-2011, 10:40 AM   #8
jordanwb
Member
 
Registered: Dec 2008
Posts: 34

Original Poster
Rep: Reputation: 0
Quote:
Originally Posted by dwhitney67 View Post
The only other thing I can think of is that there is a firewall blocking the port on at least one of your machines.
Why would that prevent java from finding the MySQL driver? That's the problem I'm having.

Quote:
Originally Posted by dwhitney67 View Post
Can you get the application to connect to MySQL if you run it on the localhost where mysqld is running?
No because on that machine java can't find the MySQL driver either.
 
Old 06-13-2011, 11:21 AM   #9
dwhitney67
Senior Member
 
Registered: Jun 2006
Location: Maryland
Distribution: Kubuntu, Fedora, RHEL
Posts: 1,541

Rep: Reputation: 335Reputation: 335Reputation: 335Reputation: 335
Quote:
Originally Posted by jordanwb View Post
Why would that prevent java from finding the MySQL driver? That's the problem I'm having.
You're right; it shouldn't make a difference.


Quote:
Originally Posted by jordanwb View Post
No because on that machine java can't find the MySQL driver either.
I do not know what else to suggest. What version of Java do you have installed? On my system I have:
Code:
java -version
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (6b20-1.9.7-0ubuntu1~10.04.1)
OpenJDK Client VM (build 19.0-b09, mixed mode, sharing)
 
Old 06-13-2011, 11:26 AM   #10
jordanwb
Member
 
Registered: Dec 2008
Posts: 34

Original Poster
Rep: Reputation: 0
Code:
$java -version
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTear6 1.9.8) (fedora-53.1.9.8.fc14-x86_64)
OpenJDK 64-bit Server VM (build 19.0-b09, mixed mode)
 
Old 06-13-2011, 11:41 AM   #11
dwhitney67
Senior Member
 
Registered: Jun 2006
Location: Maryland
Distribution: Kubuntu, Fedora, RHEL
Posts: 1,541

Rep: Reputation: 335Reputation: 335Reputation: 335Reputation: 335
As I stated earlier, I used a similar app to yours to test. I got it working on both under Ubuntu systems (10.04 and 10.11). Here's the code:
Code:
import java.sql.*;
import java.util.Properties;
import java.io.FileInputStream;

public class DB
{
   private Connection dbConn;

   public DB()
   {
      try {
         Properties settings = new Properties();
         settings.load(new FileInputStream("db_credentials.conf"));

         Class.forName("com.mysql.jdbc.Driver").newInstance();

         String url = "jdbc:mysql://" + settings.getProperty("mysql-location") +
                      ":" + settings.getProperty("mysql-port") +
                      "/" + settings.getProperty("mysql-database");

         dbConn = DriverManager.getConnection(url,
                                              settings.getProperty("mysql-user"),
                                              settings.getProperty("mysql-password"));

         if (dbConn != null)
         {
            System.out.println("Success!");
            dbConn.close();
         }
      }
      catch (SQLException e) {
         System.err.println("SQLException: " + e.getMessage());
         System.err.println("SQLState    : " + e.getSQLState());
         System.err.println("Vendor Error: " + e.getErrorCode());
      }
      catch (Exception e) {
         System.err.println("unable to load jdbc driver.");
      }
   }

   public static void main(String[] args)
   {
      DB db = new DB();
   }
}

P.S. Check the file permissions for /usr/share/java/mysql-connector-java.jar to ensure that you can read it.

Last edited by dwhitney67; 06-13-2011 at 11:45 AM.
 
Old 06-13-2011, 11:59 AM   #12
jordanwb
Member
 
Registered: Dec 2008
Posts: 34

Original Poster
Rep: Reputation: 0
Code:
[jordan@Jordan-Laptop java-stuff]$ ls -FGg /usr/share/java/mysql-connector-java.jar 
lrwxrwxrwx. 1 31 Jun 12 18:29 /usr/share/java/mysql-connector-java.jar -> mysql-connector-java-5.1.15.jar*
[jordan@Jordan-Laptop java-stuff]$ ls -FGg /usr/share/java/mysql-connector-java-5.1.15.jar 
-rwxr-xr-x. 1 817285 Feb 10 02:12 /usr/share/java/mysql-connector-java-5.1.15.jar*
[jordan@Jordan-Laptop java-stuff]$ export CLASSPATH=./:/usr/share/java/mysql-connector-java.jar
[jordan@Jordan-Laptop java-stuff]$ java -jar ./my-jar.jar 
Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:186)
	at Server.loadMysqlDriver(Server.java:29)
	at Server.<init>(Server.java:23)
	at Server.main(Server.java:42)
Huh.
 
Old 06-13-2011, 04:33 PM   #13
paulsm4
LQ Guru
 
Registered: Mar 2004
Distribution: SusE 8.2
Posts: 5,863
Blog Entries: 1

Rep: Reputation: Disabled
Jordanwb - Please execute and cut/paste the exact output of these three commands:
Code:
export CLASSPATH=./:/usr/share/java/mysql-connector-java.jar; echo $CLASSPATH

ls -l /usr/share/java/mysql-connector-java.jar

java -cp $CLASSPATH -jar ./my-jar.jar
 
Old 06-13-2011, 09:38 PM   #14
jordanwb
Member
 
Registered: Dec 2008
Posts: 34

Original Poster
Rep: Reputation: 0
Sure:

Code:
[jordan@Jordan-Laptop ~]$ cd ~/Desktop/java-stuff/
[jordan@Jordan-Laptop java-stuff]$ export CLASSPATH=./:/usr/share/java/mysql-connector-java.jar; echo $CLASSPATH
./:/usr/share/java/mysql-connector-java.jar
[jordan@Jordan-Laptop java-stuff]$ 
[jordan@Jordan-Laptop java-stuff]$ ls -l /usr/share/java/mysql-connector-java.jar
lrwxrwxrwx. 1 root root 31 Jun 12 18:29 /usr/share/java/mysql-connector-java.jar -> mysql-connector-java-5.1.15.jar
[jordan@Jordan-Laptop java-stuff]$ 
[jordan@Jordan-Laptop java-stuff]$ java -cp $CLASSPATH -jar ./my-jar.jar
Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:186)
	at Server.loadMysqlDriver(Server.java:29)
	at Server.<init>(Server.java:23)
	at Server.main(Server.java:42)
[jordan@Jordan-Laptop java-stuff]$
 
Old 06-13-2011, 10:54 PM   #15
paulsm4
LQ Guru
 
Registered: Mar 2004
Distribution: SusE 8.2
Posts: 5,863
Blog Entries: 1

Rep: Reputation: Disabled
Cool - thanx.

Code:
ls -l /usr/share/java/mysql-connector-java.jar
lrwxrwxrwx. 1 root root 31 Jun 12 18:29 /usr/share/java/mysql-connector-java.jar -> mysql-connector-java-5.1.15.jar
Soooooo -

"mysql-connector-java.jar" is a symbolic link (NOT the .jar file itself).

Q: Do you know if the file it's pointing to, "mysql-connector-java-5.1.15.jar" exists?

Please run these commands (cut/paste both the command and the output, as you did before):
Code:
ls -l /usr/share/java/mysql-connector-java.jar

ls -lL /usr/share/java/mysql-connector-java.jar

ls -l /usr/share/java/mysql-connector-java-5.1.15.jar
My guess is that maybe the whole problem has been a bad symbolic link

PS:
There's no reason you couldn't just (re) download the MySql JDBC connector, and put it wherever you want. Just make sure your $CLASSPATH variable (or, better, "-cp" command-line option) points to it.

Last edited by paulsm4; 06-13-2011 at 10:57 PM.
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
install mysql-connector-java redhat sssl Linux - Newbie 1 05-01-2009 08:38 PM
mysql java connector cuk Slackware 4 06-01-2008 10:48 AM
Mysql and mysql java connector, connection refused arubin Slackware 3 03-29-2008 01:41 AM
JDBC connection, mysql-connector-java fhleung Programming 4 08-16-2007 12:49 AM
Where to put mysql-connector-java folder dukehazord Linux - General 1 09-10-2004 11:30 AM

LinuxQuestions.org > Forums > Non-*NIX Forums > Programming

All times are GMT -5. The time now is 03:16 AM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration