How To Do Neo4j Desktop ETL Tool JDBC Connection for MSSQL?

Greetings,

If this information is available elsewhere please point me in that direction. I have come here because I have not been able to find explicit answers for my particular scenario.

None of these resources seem to have the info I'm looking for:
neo4j dot com/developer/neo4j-etl/?_ga=2.243951365.1669141879.1676573412-452651945.1676573412

neo4j dot com/docs/getting-started/current/data-import/relational-to-graph-import/#relational-etl-tool

Using
Neo4j Desktop 1.5.7
Microsoft SQL Server 2019
Neo4j 4.4.0 enterprise
Neo4j ETL Tool 1.6.0

What I'm Trying
I've tried this with a neo4j database both stopped and running, neither will work.

  • Open Neo4j Desktop
  • Open Graph Apps > Neo4j ETL Tool
  • Select project and my Neo4j instance
  • Select ADD CONNECTION
  • In the JDBC Connection form, I've filled in this information:
    ** Connection Name: abc123
    ** Host: datawarehouse.s.abc.uni
    ** Port: 1433
    ** Type: mssql
    ** Database: def456
    ** Schema: I don't know what goes here, so have been leaving blank
    ** JDBC driver path: Here is likely the issue. I have gone here: GitHub - neo4j-contrib/neo4j-etl: Data import from relational databases to Neo4j. to be lead to the MS SQLServer driver here: https://www.microsoft.com/en-us/download/details.aspx?id=11774
    I have taken the driver titled sqljdbc42.jar and have put it 2 different directories: C:\Users\user.Neo4jDesktop\projects\project-1234-5678-91011-1213-1415abc AND C:\Users\user.Neo4jDesktop\relate-data\dbmss\dbms-f63db4c6-0d64-4a37\plugins
    Then I selected Choose Files and pointed to that path identified above.
    ** Username: un
    ** Password: pw
  • Select TEST AND SAVE CONNECTION, which results with the following errors:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4098)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3160)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:43)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3123)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7505)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2445)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1981)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
at org.neo4j.etl.rdbms.Support.testConnection(Support.java:32)
at org.neo4j.etl.rdbms.Support.main(Support.java:74)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 15 more

What do I need to do to make this connection work?

Many thanks for any help.

k

I haven't used either tool, but maybe this will be easier:

Thanks for the suggestion @glilienfield , but I really must use Neo4j Desktop, and I'm going to hold out hope that someone can fill in my gaps.
The link you provided only seems helpful for those who are using MySQL Server, but I need clear documentation on how to make this work with Neo4j Desktop and MS SQL Server.

I got this to work using Neo4j Desktop with a local MySql database.

I don't have MS SQL Server to test, but I was able to install the driver and load the driver, so I am assuming you will be able to connect and interact with your MS SQL Server.

Use to load the driver:
CALL apoc.load.driver("com.microsoft.sqlserver.jdbc.SQLServerDriver");

Thanks @glilienfield, which driver are you using with Neo4j Desktop, mssql-jdbc-12.2.0.jre8.jar or mssql-jdbc-12.2.0.jre11.jar and in which Neo4j Desktop directory did you put your driver?

As shared above, I put the driver sqljdbc42.jar (I see this will be a different driver) in the directories shared above. I think it's supposed to go in the \plugins directory.

Here's where I'm at, I would still prefer to be using the Neo4j ETL Tool.

Non ETL Tool Route

  • with both mssql-jdbc-12.2.0.jre8.jar and mssql-jdbc-12.2.0.jre11.jar in the \plugins dir shared above (and I'm under the impression that Neo4j Desktop comes with its own Java? Is this the Zulu Platform x64 Architecture? so I don't know which to use)
  • I have started my Neo4j database in Neo4j Desktop
  • I have opened Neo4j Browser and ran the query

Call apoc.load.driver("com.microsoft.sqlserver.jdbc.SQLServerDriver")

with a result of...

(no changes, no records)

which I think is a good sign

  • Then I ran this query

Call apoc.load.jdbc("jdbc:sqlserver://datawarehouse.s.abc.uni;integratedSecurity=true;databaseName=def456;","Select [columnName] FROM [def456].[sec].[tableName]")
Yield row
Return row

But this does not work and returns an error of...

Failed to invoke procedure 'apoc.load.jdbc': Caused by: java.lang.UnsatisfiedLinkError: Unable to load authentication DLL mssql-jdbc_auth-12.2.0.x64

Again, I would like to be able to use the Neo4j ETL Tool to work with our MS SQLServer, since this is what it's designed for, but in lieu of that, what do I need to do to make this Non ETL Tool Route work with our MS SQLServer?

Thanks @glilienfield, which driver are you using with Neo4j Desktop, mssql-jdbc-12.2.0.jre8.jar or mssql-jdbc-12.2.0.jre11.jar and in which Neo4j Desktop directory did you put your driver?

As shared above, I put the driver sqljdbc42.jar (I see this will be a different driver) in the directories shared above. I think it's supposed to go in the \plugins directory.

Here's where I'm at, I would still prefer to be using the Neo4j ETL Tool.

Non ETL Tool Route

  • with both mssql-jdbc-12.2.0.jre8.jar and mssql-jdbc-12.2.0.jre11.jar in the \plugins dir shared above (and I'm under the impression that Neo4j Desktop comes with its own Java? Is this the Zulu Platform x64 Architecture? so I don't know which to use)
  • I have started my Neo4j database in Neo4j Desktop
  • I have opened Neo4j Browser and ran the query

Call apoc.load.driver("com.microsoft.sqlserver.jdbc.SQLServerDriver")

with a result of...

(no changes, no records)

which I think is a good sign

  • Then I ran this query

Call apoc.load.jdbc("jdbc:sqlserver://datawarehouse.s.abc.uni;integratedSecurity=true;databaseName=def456;","Select [columnName] FROM [def456].[sec].[tableName]")
Yield row
Return row

But this does not work and returns an error of...

Failed to invoke procedure apoc.load.jdbc: Caused by: java.lang.UnsatisfiedLinkError: Unable to load authentication DLL mssql-jdbc_auth-12.2.0.x64

Again, I would like to be able to use the Neo4j ETL Tool to work with our MS SQLServer, since this is what it's designed for, but in lieu of that, what do I need to do to make this Non ETL Tool Route work with our MS SQLServer?

What version of the driver seems to depend on which java version you are using;

Maybe try without authentication to see if you can get it working by setting:

integratedSecurity=false

Thanks @glilienfield , I was under the impression that Neo4j Desktop comes with its own Java drivers, things titled Zulu?
The issue seems to have been needing to change my Java Environmental Variable back from
Java\jdk11.0.2
to
Java\jdk1.8.0_121