How do I connect JDBC with compiled application?
3 views (last 30 days)
Show older comments
Adrien Corbin
on 1 Apr 2019
Commented: Kojiro Saito
on 1 Feb 2022
Hi,
We are using Matlab to process some data and want to output the result in a database.
To do so, we tried with the Database Toolbox. After some troubleshooting with JDBC Driver path which didn't seem to work out of the box, we have been able to run the script in Matlab this way:
conn = database(databasename, username, password, 'Server', server, 'PortNumber', port, 'Vendor', 'Microsoft SQL Server', 'AuthType', authType);
We are using the Matlab Compiler to produce an exe, the Compiler state that it should support the toolbox here.
When we do so, we still have the following error, which tell us the function does not seem to exists, an error we do not have in Matlab.
What can we do to troubleshoot this issue?
Thanks
For reference here a sample of the full script.
- writetable were added only for debugging
- datainsert is deprecated, sqlwrite should be used, but I could would not let me insert data only and was always generating a create table.
function [] = tampon(server, port, databasename, authType, username, password)
writetable(cell2table({'2'}),'log.txt','WriteVariableNames',false)
conn = database(databasename, username, password, 'Server', server, 'PortNumber', port, 'Vendor', 'Microsoft SQL Server', 'AuthType', authType);
writetable(cell2table({'3'}),'log.txt','WriteVariableNames',false)
load('output.mat');
writetable(cell2table({'4'}),'log.txt','WriteVariableNames',false)
output = output(:,1:5);
writetable(cell2table({'5'}),'log.txt','WriteVariableNames',false)
datainsert(conn,'dbo.test', cellstr(output.Properties.VariableNames), output);
writetable(cell2table({'6'}),'log.txt','WriteVariableNames',false)
close(conn);
writetable(cell2table({'7'}),'log.txt','WriteVariableNames',false)
end
6 Comments
Kojiro Saito
on 3 Apr 2019
So, database command is pointing to the right m file.
How did you set up JDBC driver in MATLAB and how do you call compiled exe in Command Prompt?
Accepted Answer
Kojiro Saito
on 5 Apr 2019
Regarding your last comment, from Powershell and Command Prompt, number is passed to compiled MATLAB function as characters, so, converting to double (str2double) is necessary.
function [] = tampon(server, port, databasename, authType, idEnvironment)
which database
if ischar(port)
port = str2double(port);
end
conn = database(databasename, '', '', 'Server', server, 'PortNumber', port, 'Vendor', 'Microsoft SQL Server', 'AuthType', authType)
If you still gets an error, add disp(conn) and confirm JDBC is included properly to compiled exe.
If conn says "JDBC not found error", please try adding "mssql-jdbc-6.2.1.jre8.jar" and "sqljdbc_auth.dll" in "Files required for your application to run" in Application Compiler Window.
6 Comments
Michaela Konstantinou
on 1 Feb 2022
Edited: Michaela Konstantinou
on 1 Feb 2022
When I try to use a database command in web app (.ctf) I have compiled including .jar .dll files I get the following error
Error using database (line 59)
2022-02-01 02:16:22 JDBC data source does not contain driver location. Use databaseConnectionOptions to specify JDBC driver location.
Do I have to save the datasources again inside the web app using saveAsDataSource(opts)? If so, I have tried it but when I set the connection options I dont know what value I should map to
'JDBCDriverLocation'
parameter in defining opts as shown in the code below
vendor = 'Microsoft SQL Server';
opts = databaseConnectionOptions("jdbc", vendor);
opts = setoptions(opts, 'DataSourceName' , datasourceName , ...
'DatabaseName' , databaseName , ...
'Server' , 'PRDMTLDB.XXXXX.com', ...
'AuthType' , 'Windows');
If I use the opts withouth defining driverPath (as shown above) I get the below error
Error using database.options.jdbc.sqlserver.SQLConnectionOptions/checkTestIsValid (line 40)
2022-02-01 02:22:22 DataSourceName, JDBCDriverLocation, Server and PortNumber are required parameters.
2022-02-01 02:22:22 Error in database.options.jdbc.sqlserver.SQLConnectionOptions/testConnection (line 97)
I have also restarted the server after the apps deployment (i.e., copy to the web apps folder).
Can you please help me with establishing an SQL connection from a web app?
Kojiro Saito
on 1 Feb 2022
By adding SQL Server's JDBC driver (.jar file) to "Files installed for your end user" in Application Compiler, and "Files required for your app to run" in Web App Compiler, the JDBC driver will be included in the package.
Then, call dabase with database(databasename,username,password,Param1,ParamValue1,...,ParamN,ParamValueN) because it specifies JDBC connection.
conn = database(databaseName, userName, password, ...
'Vendor','Microsoft SQL Server','Server','PRDMTLDB.XXXXX.com', ...
'AuthType','Server','PortNumber', 1433);
Hope this helps.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!