Java 我收到一个错误,上面写着&x2018;找不到JDBC驱动程序;使用数据库工具箱3.9(R2015a)连接到SQL Server数据库时出错?

Java 我收到一个错误,上面写着&x2018;找不到JDBC驱动程序;使用数据库工具箱3.9(R2015a)连接到SQL Server数据库时出错?,java,sql-server,matlab,jdbc,Java,Sql Server,Matlab,Jdbc,我已在MS SQL Server Management Studio中创建了数据库连接。我正在尝试将MS SQL与MATLAB连接起来。下面给出了我试图连接它的代码。我收到一个错误,说找不到JDBC驱动程序 function [Out, Settings] = MSSQLconn(dbname, userpassmethod, varargin) % MSSQLCONN Establishes connection with MS SQL % % MSSQLCONN(DBN

我已在MS SQL Server Management Studio中创建了数据库连接。我正在尝试将MS SQL与MATLAB连接起来。下面给出了我试图连接它的代码。我收到一个错误,说找不到JDBC驱动程序

      function [Out, Settings] = MSSQLconn(dbname, userpassmethod, varargin)

% MSSQLCONN Establishes connection with MS SQL 
% 
%   MSSQLCONN(DBNAME) Every other input by default
%       - dbname: database name to which you want to connect (char format)
%       
%   MSSQLCONN(DBNAME, USERPASSMETHOD) Supply username and password, else by default
%       - userpassmethod --> {'username','password'}; 1st cell username,2nd cell password
%       - userpassmethod --> '-win'; use windows authentication (only for R2008b)
%       - userpassmethod --> '-manual'; supply credentials through inputdlg
%
%   MSSQLCONN(DBNAME,USERPASSMETHOD,OPTIONAL1...3) Supply variable number of optionals. 
%       - servername: string with the server where the database is hosted
%       - portnumber: integer of the port
%       - oldversion: if MS SQL is older than 2005 ed. supply '-old';
%
%   [OUT,SETTINGS] = ...
%       - Class 'database': connection to the server.
%       - Class 'structure' with the settings used to connect (except password).
%
%   DEFAULT SETTINGS:
%       - user = ''; 
%       - pass = '';
%       - server = 'localhost';
%       - port = 1433;
%       - driver = 'com.microsoft.sqlserver.jdbc.SQLServerDriver' (MS SQL 2005 and above);
%       - windows authentication: false;
%
% Examples:
%   - MSSQLconn('MyDB')                      % use the whole set of default settings
%   - MSSQLconn('MyDB',{'Oleg','****'})      % supply username and password 
%   - MSSQLconn('MyDB',{'Oleg',''})          % supply just the username, password by inputdlg 
%   - MSSQLconn('MyDB','-win')               % use windows authentication 
%   - MSSQLconn('MyDB','-manual')            % supply both username and password through inputdlg
%   - MSSQLconn(...,'myserver')              % supply servername with any combination of dbname and userpassmethod 
%   - MSSQLconn(...,1433, 'myserver','-old') % full set of optionals
%
% Additional features: 
% - <a href="matlab: web('http://msdn.microsoft.com/en-us/data/aa937724.aspx','-browser')">MS SQL server JDBC Driver Webpage</a>
% - <a href="matlab: web('http://www.mathworks.com/matlabcentral/fileexchange/25577-ms-sql-jdbc-connection','-browser')">FEX MSSQLconn page</a>
% - <a href="matlab: web('http://www.mathworks.com/support/solutions/en/data/1-9SHNAT/','-browser')">TMW Support Win Authentication</a>
% 
% See also DATABASE

% Author: Oleg Komarov (oleg.komarov@hotmail.it)
% Date: 13 oct 2009 - created
%       14 oct 2009 - added links to MS JDBC drivers and to FEX submission page
%       28 oct 2009 - reorganized input checks and added single input syntax
%       11 nov 2009 - changed input syntax; added win authentication, TMW support link and settings output


%-------------------------------------------------------------------------------------
% CHECK part 
%-------------------------------------------------------------------------------------

% 1. # of inputs
error(nargchk(1,5,nargin))

% 2. dbname
if ~ischar(dbname);  error('MSSQLconn:strFmt', 'dbname must be char'); end

% 3. userpassmethod
if nargin == 1 || isempty(userpassmethod); 
    method = '-default';
elseif iscell(userpassmethod)
    method = '-cell';
else method = userpassmethod;
end
winAuth = 'false'; user = ''; pass = '';                                      % Default values
switch method
    case '-default'                                                           % Use default values
    case '-cell'
        if numel(userpassmethod) == 2                                         % [1] IF 2 cells
        user = userpassmethod{1}; pass = userpassmethod{2};
            if ~isempty(user) && ischar(user) && isempty(pass)                % [2] IF pass empty
            while isempty(pass) 
                pass = inputdlg('Supply password: ', 'Empty not admitted',1); 
                pass = pass{:};
            end
            elseif ~isempty(pass) && ischar(pass) && isempty(user)            % [2] IF user empty
            while isempty(user) 
                user = inputdlg('Supply username: ', 'Empty not admitted',1); 
                user = user{:};
            end
            end
        else error('MSSQLconn:upmFmt', 'userpassmethod wrong format');               
        end
    case '-win'
        if any(str2double(struct2cell(ver('database'))) < 3.5) ;
           error('MSSQLconn:wauMth', 'Feature unavailable for Database Toolbox release older than 3.5 (R2008b)')
        else winAuth = 'true';
        end
    case '-manual'
         while isempty(user) || isempty(pass)
            userpass = inputdlg({'Supply username: '; 'Supply password: '}, 'ENTER BOTH',1,{'',''},'on');
            user = userpass{1}; pass = userpass{2};
        end
end

% 4. Oldver
IDXo = strcmp('-old',varargin);
if any(IDXo)
    drv = 'com.microsoft.jdbc.sqlserver.SQLServerDriver'; 
else
    drv = 'com.microsoft.sqlserver.jdbc.SQLServerDriver'; 
end

% 5. Port
IDXn = cellfun(@isnumeric,varargin);
if nnz(IDXn) == 1 && mod(varargin{IDXn},1) == 0
    port = num2str(varargin{IDXn});
elseif nnz(IDXn) > 1 
    error('MSSQLconn:prtFmt', 'Only one numeric integer port is accepted')
else port = '1433';
end

% 6. Server
IDXs = cellfun(@ischar, varargin) & ~IDXo;
if any(IDXs); server = varargin{IDXs}; else server = 'localhost'; end

%-------------------------------------------------------------------------------------
% ENGINE part
%-------------------------------------------------------------------------------------

% Url concatenation
URL = ['jdbc:sqlserver://' server ':' port ';database=' dbname ';integratedSecurity=' winAuth ';']; 

% Set connection timeout (s)
logintimeout(drv, 10);

% Connect
Out = database('', user, pass, drv, URL);

% Settings 
if nargout == 2 
    Settings = cell2struct({dbname; user; drv; server; port; ~strcmp(winAuth,';');Out.Message},...
    {'login'; 'thusha-PC\thusha'; 'com.microsoft.sqlserver.jdbc.SQLServerDriver'; 'localhost'; '53811'; 'windowsAuthentication'; 'errorMsg'});
end

% [1] IF connected
if isconnection(Out)
    % Initialize Status
    Status = '.';
    % [2] IF readonly
    if isreadonly(Out); Status = ' in "READONLY" mode.'; end % [2]
    % Display connection status
    sprintf('Connected%s', Status)
else % [1] IF not connected
    % Display error
    error('MSSQLconn:conInv',Out.Message)
end % [1]

end
function[Out,Settings]=MSSQLconn(dbname,userpassmethod,varargin)
%MSSQLSCONN与MS SQL建立连接
% 
%默认情况下,MSSQLSCONN(DBNAME)每隔一次输入
%-dbname:要连接的数据库名称(字符格式)
%       
%MSSQLCONN(DBNAME,USERPASSMETHOD)提供用户名和密码,默认情况下为else
%-userpassmethod-->{'username','password};第一个单元格用户名,第二个单元格密码
%-userpassmethod-->'-win';使用windows身份验证(仅适用于R2008b)
%-userpassmethod-->'-manual';通过inputdlg提供凭据
%
%MSSQLSCONN(DBNAME、USERPASSMETHOD、OPTIONAL1…3)提供可变数量的选项。
%-servername:数据库所在服务器的字符串
%-portnumber:端口的整数
%-旧版本:如果MS SQL早于2005版,请提供“-old”;
%
%[输出,设置]=。。。
%-类“数据库”:与服务器的连接。
%-使用用于连接的设置(密码除外)初始化“结构”。
%
%默认设置:
%-用户=“”;
%-通过=“”;
%-server='localhost';
%-端口=1433;
%-driver='com.microsoft.sqlserver.jdbc.SQLServerDriver'(MS SQL 2005及以上版本);
%-windows身份验证:false;
%
%示例:
%-MSSQLconn('MyDB')%使用整套默认设置
%-MSSQLconn('MyDB',{'Oleg','***'})%提供用户名和密码
%-MSSQLconn('MyDB',{'Oleg',''})%inputdlg只提供用户名和密码
%-MSSQLconn('MyDB','-win')%使用windows身份验证
%-MSSQLconn('MyDB','-manual')%通过inputdlg提供用户名和密码
%-MSSQLconn(…,'myserver')%为servername提供dbname和userpassmethod的任意组合
%-MSSQLconn(…,1433,'myserver','-old')%全套选项
%
%其他功能:
% - 
% - 
% - 
% 
%另见数据库
%作者:Oleg Komarov(Oleg。komarov@hotmail.it)
%日期:2009年10月13日-已创建
%2009年10月14日-添加了MS JDBC驱动程序和FEX提交页面的链接
%2009年10月28日-重新组织输入检查并添加单输入语法
%2009年11月11日-更改输入语法;增加了win认证、TMW支持链接和设置输出
%-------------------------------------------------------------------------------------
%检查部件
%-------------------------------------------------------------------------------------
% 1. # 输入的数量
错误(nargchk(1,5,nargin))
% 2. 库名
if~ischar(dbname);错误('MSSQLconn:strFmt','dbname必须是char');结束
% 3. userpassmethod
如果nargin==1 | |为空(userpassmethod);
方法='-default';
elseif iscell(userpassmethod)
方法='-cell';
else方法=userpassmethod;
结束
winAuth='false';用户=“”;通过=“”;%默认值
切换方法
大小写“-default%”使用默认值
案例'-cell'
if numel(userpassmethod)==2%[1]if 2个单元格
user=userpassmethod{1};pass=userpassmethod{2};
if~isempty(用户)&&ischar(用户)&&isempty(通过)%[2]如果通过为空
当我空的时候(通过)
pass=inputdlg('Supply password:','Empty not accepted',1);
通过=通过{:};
结束
如果用户为空,则elseif~isempty(pass)&&ischar(pass)&&isempty(user)%[2]
而我是空的(用户)
user=inputdlg('Supply username:','Empty not accepted',1);
user=用户{:};
结束
结束
else错误('MSSQLconn:upmFmt','userpassmethod格式错误');
结束
案例'-win'
如果有(str2double(struct2cell(ver('database')))<3.5);
错误('MSSQLSCONN:wauMth','3.5(R2008b)以前版本的数据库工具箱不提供功能'
else-winAuth='true';
结束
案例-手册
当isempty(用户)| | isempty(通过)
userpass=inputdlg({'Supply username:';'Supply password:'},'输入两个',1,{'','},'on');
user=userpass{1};pass=userpass{2};
结束
结束
% 4. 老者
IDXo=strcmp('-old',varargin);
如有(IDXo)
drv='com.microsoft.jdbc.sqlserver.SQLServerDriver';
其他的
drv='com.microsoft.sqlserver.jdbc.SQLServerDriver';
结束
% 5. 港口
IDXn=cellfun(@isnumeric,varargin);
如果nnz(IDXn)==1&&mod(varargin{IDXn},1)==0
port=num2str(varargin{IDXn});
elseif nnz(IDXn)>1
错误('MSSQLSCONN:prtFmt','只接受一个数字整数端口')
else端口='1433';
结束
% 6. 服务器
IDXs=cellfun(@ischar,varargin)和~IDXo;
如有(IDXs);服务器=varargin{IDXs};else服务器='localhost';结束
%-------------------------------------------------------------------------------------
%发动机部件
%-------------------------------------------------------------------------------------
%Url连接
URL=['jdbc:sqlserver://'server':'port';数据库='dbname';集成安全性='winAuth';'];
%设置连接超时
登录超时(drv,10);
%连接
Out=数据库(“”、用户、通行证、drv、URL);
%背景
如果nargout==2
Settings=cell2struct({dbname;user;drv;server;port;~strcmp(winAuth,“;”);Out.Message},。。。
{'login';'thusha PC\thusha';'com.microsoft.sqlserver.jdbc.SQLServerDriver';'localhost';'53811';'windowsAuthentication';'errorMsg'});
结束
%[1]如果已连接
如果断开连接(输出)
%伊尼