SQL Developer - Third Party JDBC Driver Silent Configuration - java

I am in the process of getting a third-party JDBC driver (Snowflake) configured in SQL Dev, but running into issues. I am unsure how to get paths set in Preferences > Database > Third Party JDBC Drivers. I noticed on a few posts that this is related to the CLASSPATH env variable, but this didn't seem to work (the field was blank in the related window, attempting to load from the Connections tab gave the error: Could not initialize class com.mysql.jdbc.Driver).
I created the new connection by modifying the connections.json script in %USERPROFILE%\AppData\Romaing\SQL Developer\systemversion\o.jdeveloper.db.connection directory. This works, as it to populates in the connections tab after completion. Currently this script is in PowerShell, apologies I do not know Oracle applications well:
$TestPath = [Environment]::GetEnvironmentVariable('CLASSPATH', 'Machine')
If ($TestPath.Contains('C:\Oracle\sqldeveloper\jdbc\jdbc-proxy.jar'))
{
Echo "Path Environment Variable already set. Skipping creation."
}
else
{
$path = [Environment]::GetEnvironmentVariable('CLASSPATH', 'Machine')
$newpath = $path + ';C:\Oracle\sqldeveloper\jdbc\jdbc-proxy.jar'
[Environment]::SetEnvironmentVariable("CLASSPATH", $newpath, 'Machine')
}
If ($TestPath.Contains('C:\Oracle\sqldeveloper\jdbc\snowflake-jdbc.jar'))
{
Echo "Path Environment Variable already set. Skipping creation."
}
else
{
$path2 = [Environment]::GetEnvironmentVariable('CLASSPATH', 'Machine')
$newpath2 = $path2 + ';C:\Oracle\sqldeveloper\jdbc\snowflake-jdbc.jar'
[Environment]::SetEnvironmentVariable("CLASSPATH", $newpath2, 'Machine')
}
Here is a link to the process I am attempting to accomplish (different driver): https://www.geeksforgeeks.org/how-to-install-a-jdbc-driver-in-oracle-sql-developer/

You're not going to succeed here. SQL Developer only allows specific 3rd party JDBC drivers, and Snowflake isn't one of them.
Sybase ASE, SQL Server, Teradata, DB2 LUW, AWS Redshift, and MySQL are all allowed. We're working on PostgreSQL for formal migration support, the driver/connections should work already.

Related

How to enable the MySQL connection string "ENABLE_LOCAL_INFILE" when using Flyway in a gradle project?

There are several .txt files in my Java gradle project, which I use to populate a database using the MySQL statement LOAD DATA LOCAL INFILE in sql scripts.
There is a MySQL server running on my PC, whose hostname is 127.0.0.1, port is 3306 and DB name is test, so in the gradle project's build.gradle file I configure flyway in the following way:
flyway {
url = 'jdbc:mysql://127.0.0.1:3306/test'
user = 'root'
password = '111111'
}
An example .sql file is
LOAD DATA LOCAL INFILE 'data/categories.txt' INTO TABLE category
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n';
but when running migration using gradle flywayMigrate -i, I got the following error:
Loading local data is disabled; this must be enabled on both the client and server sides
I think I have enabled it in the server side as shown below, which is a MySQL Command Line Client screenshot.
Hope I did it correctly.
After this step, the error still show up, so I think I also need to enable it in the client side, which is in the Java gradle project, is that correct?
Based on https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html, I should set ENABLE_LOCAL_INFILE = 1.
But how to do that? In where should I add this ENABLE_LOCAL_INFILE = 1 connection string?
Hope someone can help me.
Thanks in advance!
Use the JDBC connection string property allowLoadLocalInfile=true
See https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-connp-props-security.html#cj-conn-prop_allowLoadLocalInfile

H2 DB driver not in classpath

I'm trying to connect to my embedded H2 database via Java. I found various threads and tutorials on this and now have this code:
Connection con = null;
Properties connectionProps = new Properties();
connectionProps.put("user", "username");
connectionProps.put("password", "password");
try {
Class.forName("org.h2.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
con = DriverManager.getConnection("jdbc:h2:~/test", connectionProps);
I got the "no suitable driver found for jdbc:h2:~/test" error message. I found the Class.forName(...) in some threads as a solution to this, but it doesn't seem to be working (ClassNotFoundException).
I read that the driver is probably not in my classpath, but don't really know what I need to do with that information. In the database view of IntelliJ the driver seems to work just fine (I can click reload drivers and it confirms the h2 driver). What am I doing wrong?
There are a couple ways to add to the classpath. I recommend trying to understand this page https://howtodoinjava.com/java/basics/java-classpath/ for more information on different strategies that have similar, but different results.
Probably the simplest way for just this project, would be to edit the "run configuration" that you are using, and add a new VM option:
–classpath /path/to/local/h2/driver.jar
Use an absolute path to the jar, and this will allow it to be present in the classpath when running it this way. In the link I shared, this is the same as adding the command line argument to the java or javac command, so this argument will work outside of intellij on the command line as well.
Edit:
Based on the comments, it seems like you might be using the %PROGRAMFILES% environment variable, with a fully qualified path.
Try this instead:
-classpath %PROGRAMFILES%\H2\bin\h2-1.4.200.jar
If you were to run the following command in your command prompt
echo %PROGRAMFILES%
I suspect you'd get the response:
C:\Program Files
Which is not the x86 version. So. Either use the environment variable and omit the part of the path it's value represents (eliminating the C:\ part)
or, if that's not the correct Program Files folder at all, then avoid it and try (note the quotes which are required because a folder has spaces in it's name):
--classpath "C:\Program Files (x86)\H2\bin\h2-1.4.200.jar"

Python 3.7 connecting to HSQLDB on MAC

Trying to connect to a HSQLDB Java database using python 3.7, jaydebeapi, and jpype. I tried the following
import jaydebeapi
UserName = "SA"
Password = ""
Java_Class = "org.hsqldb.jdbcDriver"
HSQL_Driver_Path = "/Hsqldb/driver/hsqldb.jar"
Database = "jdbc:hsqldb:/Hsqldb/database/OneDatabase"
jaydebeapi.connect(Java_Class,Database,[UserName,Password],jars=HSQL_Driver_Path)
and it resulted in the following error
java.lang.RuntimeExceptionPyRaisable: java.lang.RuntimeException: Class org.hsqldb.jdbcDriver not found
google states that this is a classpath error and I need to add a class path to fix.
edit: Details of setup: Mac, anaconda, python 3.7
I tried something similar in R using the RJDBC library and was able to connect just fine.
PathDriver = "/Hsqldb/driver/hsqldb.jar"
JDBCDriver = "org.hsqldb.jdbcDriver"
drv <- JDBC(JDBCDriver,PathDriver)
# Connect to Database
DatabaseP <- "jdbc:hsqldb:file:////Hsqldb/database/OneDatabase"
Con <- dbConnect(drv,DatabaseP,"SA","")
edit: Details of setup: Mac, R, Rstudio
I separated R from Anaconda as Anaconda was blocking many of the libraries I wanted to use.
This is probably apples to oranges, but why does python need a classpath set when R performs the function just fine? and how does one set a class path for HSQLDB for python?
When starting JPype it either takes the classpath from the environment variable CLASS_PATH or from a manually specified classpath defined using the jpype.startJVM(classpath="...") command. This command is likely part of the jaydebeapi api if you don't have to call it directly from JPype.
I assume that R defines its own classpath internally so there may just be differences in the what is being seen from the JVM. This could include a different JVM is being selected, the classpath including different locations, or in some cases if the driver has a native portion such as MS SQLServer the library path may also not be correct. In order for the JDBC driver to load all piece need to be found including the jar, support jars and native shared libraries. If all else fails manually try to load the java class using Class.forname. It may provide you with further diagnostics as to which piece is missing.

Derby db connectivity problems

I receive the following error msg when attempting to connect to a derby network server:
java.sql.SQLException: No suitable driver found for jdbc:derby://localhost/studentdb;create=true
Derby is properly installed and all environment variables set. I am able to start the derby NetworkServerControl from a Windows command prompt with the following command:
java org.apache.derby.drda.NetworkServerControl start -h localhost
,and I can do this from any location within my system's directory tree.
I can start the derby ij client from within a Windows command prompt with the command:
java org.apache.derby.tools.ij
,again, from any location within my system's directory tree.
But the code snippet below is unable to make this connection:
public static void main(String[] args) {
Connection conn = null;
String url = "jdbc:derby://localhost/studentdb;create=true";
//the error happens here, the program executes no further
conn = DriverManager.getConnection(url,null);
Statement stmt = conn.createStatement();
}
Placing the port value in the url string makes no difference.
Any suggestions would be much appreciated.
You must add the derby jdbc driver to your classpath (from derbyclient.jar, since this is the ClientDriver), then use this instruction to load the driver :
Class.forName("org.apache.derby.jdbc.ClientDriver");
So I encountered this error and it was quite an irritating and hectic task to resolve this. But in the end, I managed to find a perfect video that made me install derby from the start and guided me perfectly on how to install it. However, there is one more step after the video.
Watch this video if you have set up JavaFX packages and are able to run the program normally, but facing
"java.sql.SQLException: No suitable driver found for jdbc:derby://localhost:1527/DBNAME;create=true" issue when trying to run with the database.
Link to the tutorial -> https://www.youtube.com/watch?v=OKiBsWbgrMw
Now after this is set up you will now be able to start/stop the database (via the services tab) and will be able to connect with the DB. But the issue will still persist in trying to edit the DB.
To rectify this, follow the steps ->
Right click on project ---> Properties ---> Libraries ---> Click on '+' in Classpath ---> Add jar/folder ---> Go to the lib folder inside the derby and select derbyclient.jar
VERSIONS
JAVA - 17.0.1, Netbeans - 12.6

No suitable driver when trying to create SQL database [duplicate]

This question already has answers here:
SQLException: No suitable driver found for jdbc:derby://localhost:1527
(19 answers)
Closed 7 years ago.
I am trying to create a new SQL database with this Java program
import java.sql.*; //Needed for JDBC classes
public class BuildPhonebookDB {
public static void main(String[] args) throws Exception{
//Create a named constant for the URL
final String DB_URL = "jdbc:derby:Phonebook;create=true";
try {
//Create a connection to the database.
Connection conn = DriverManager.getConnection(DB_URL);
//Create a Statement object.
Statement stmt = conn.createStatement();
//Create the Entries table
stmt.execute("CREATE TABLE Entries (" +
"Name CHAR(20)"+
"Number INTEGER)"
);
System.out.println("Database Connected");
//Close the connection
conn.close();
}
catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
}
When I try to run the program I get an error that:
No suitable driver found for jdbc:derby:Phonebook;create=true
I have looked at various other similar posts on Stack Overflow, such as this one, but none help. I have seen things about a driver jar, but I don't know what this is, if I need to edit this, could someone help me through it?
Thanks for any help
Did you see this guide and have you complited all step of this guide?
Apache Derby
Download Derby Download the binary Apache Derby distribution from the
Derby web site at http://db.apache.org/derby/derby_downloads.html.
These tutorial instructions use version 10.12.1.1 and assume you
downloaded one of the binary distribution files listed in the table
below:
Operating System Download File Windows db-derby-10.12.1.1-bin.zip
UNIX, Linux, and Mac db-derby-10.12.1.1-bin.tar.gz If a more recent
release is available, download that, then substitute that version
number for 10.12.1.1 in the following instructions.
Install Derby Choose the directory into which you want to install the
Derby software. You must have write permissions to this directory. The
sample instructions below use C:\Apache for Windows and /opt/Apache
for UNIX; be sure to use your actual location. Copy the software
distribution to the location you choose, then extract it as shown
below.
Windows (use your extraction tool e.g. WinZip -- these instructions
use mks unzip):
mkdir C:\Apache copy db-derby-10.12.1.1-bin.zip
> C:\Apache cd C:\Apache unzip db-derby-10.12.1.1-bin.zip
UNIX:
mkdir /opt/Apache cp db-derby-10.12.1.1-bin.tar.gz /opt/Apache
> cd /opt/Apache tar xzvf db-derby-10.12.1.1-bin.tar.gz
In both cases, the software will now be extracted into a subdirectory
named db-derby-10.12.1.1-bin.
Set DERBY_INSTALL Set the DERBY_INSTALL variable to the location where
you installed Derby. Examples are shown below, but be sure to use the
actual location on your system:
Windows: C:\> set DERBY_INSTALL=C:\Apache\db-derby-10.12.1.1-bin
UNIX Korn Shell:
$ export
> DERBY_INSTALL=/opt/Apache/db-derby-10.12.1.1-bin
Configure Embedded Derby To use Derby in its embedded mode set your
CLASSPATH to include the jar files listed below:
derby.jar: contains the Derby engine and the Derby Embedded JDBC
driver derbytools.jar: optional, provides the ij tool that is used by
a couple of sections in this tutorial You can set your CLASSPATH
explicitly with the command shown below:
Windows:
C:\> set
> CLASSPATH=%DERBY_INSTALL%\lib\derby.jar;%DERBY_INSTALL%\lib\derbytools.jar
;.
UNIX:
$ export
> CLASSPATH=$DERBY_INSTALL/lib/derby.jar:$DERBY_INSTALL/lib/derbytools.jar:.
...
Step 3: Embedded Derby
When an application accesses a Derby database using the Embedded Derby
JDBC driver, the Derby engine does not run in a separate process, and
there are no separate database processes to start up and shut down.
Instead, the Derby database engine runs inside the same Java Virtual
Machine (JVM) as the application. So, Derby becomes part of the
application just like any other jar file that the application uses.
Figure 1 depicts this embedded architecture.
Set the environment
To set up the environment, follow the "Configure Embedded Derby"
instructions.
Use this before you get the connection from the driver:
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();

Categories

Resources