user3221699
user3221699

Reputation: 71

Connecting MATLAB and MySQL with the JDBC Driver

I bought the book Undocumented MATLAB by Yair Altmam; in chapter 2.2 of the book he discusses database connectivity and using the JDBC to connect to databases. I followed the steps and text of the book. I downloaded the mysql-connector-java-5.1.30-bin.jar(from http://dev.mysql.com/downloads/connector/j/) and typed up the following code as detailed in the book:

clear all 
%%Initializing JDBC driver
try
import java.sql.DriverManager;

javaclasspath('mysql-connector-java-5.1.30-bin.jar')
driverClassName = 'com.mysql.jdbc.Driver';
try
    %This works when the class/JAR is on the static Java classpath
    %Note: driver automatically registers with DriverManager
    java.lang.Class.forName(driverClassName);
catch
    try
        %Try loading from the dynamic Java path
        classLoader = com.mathworks.jmi.ClassLoaderManager.getClassLoaderManager;
        driverClass = classLoader.loadClass(driverClassName);
    catch %#ok<*CTCH>
        try
            %One more attempt, using the system class-loader
           classLoader = java.lang.ClassLoader.getSystemClassLoader;
           %An alternative, using the MATLAB Main Thread's context
           %classLoader =
           %java.lang.Thread.currentThread.getContextClassLoader;
           driverClass = classLoader.loadClass(driverClassName);
           catch
           %One final attempt-load directly, like this:
           driverClass = eval(driverClassName); %#ok<*NASGU>
           %Or like this (if the driver name is known in advance):
           driverClass = com.mysql.jdbc.Driver;
        end
    end
    %Now manually register the driver with the DriverManager
    %Note: silently fails if driver is not in the static classpath
   DriverManager.registerDriver(driverClass.newInstance);
end
%continue with database processing
catch
error(['JDBC driver ' driverClassName ' not found!']);
%do some failover activity
end

%% Connecting to a database

import java.sql.*;
connStr = 'jdbc:mysql://localhost:3306/test';
con  = DriverManager.getConnection(connStr,'root','1234');

Every attempt to run the code I get the following error message:

??? Java exception occurred:
java.sql.SQLException: No suitable driver found for
jdbc:mysql://localhost:3306/test

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)


Error in ==> undocumentedMATLAB at 45
con  = DriverManager.getConnection(connStr,'root','1234');

Has anyone experienced this problem or have any suggestion that could help me resolve it.

Thanks in advance.

Upvotes: 1

Views: 4413

Answers (1)

Pursuit
Pursuit

Reputation: 12345

My first suspicion is your java class path. Instead of:

javaclasspath('mysql-connector-java-5.1.30-bin.jar')

Use

javaaddpath('C:\full\path\to\mysql-connector-java-5.1.30-bin.jar')

If that is not the problem, lets skip the DriverManager (doesn't really help much) and see if the code below works, (or where it fails).

d = com.mysql.jdbc.Driver;
urlValid = d.acceptsURL('jdbc:mysql://localhost:3306/test');  %Should return true
props = java.util.Properties;
props.put('user','root'); props.put('password','1234');
con = d.connect('jdbc:mysql://localhost:3306/test',props)

The DriverManager construct doesn't really help much. It seems to be designed to allow a developer to load up a bunch of drivers, and then connect to any supported database without knowing or caring what the DB implementation was (e.g. Mysql, Postgresql, Oracle etc.) I have never seen this as a useful feature. I think (hope?) that this is being used less in favor of a DataSource construct.

Regardless, if this is your first time connecting Mysql to Matlab, you probably are best just directing using the provided Driver class.

Upvotes: 2

Related Questions