雪花与Maven的连接,类路径上的罐子



我目前正在尝试与我们的雪花数据库建立简单的连接。我关注了他们网站上的文档:https://docs.snowflake.net/manuals/user-guide/jdbc-configure.html 并验证连接字符串是否正确。

但是,每次启动该程序时,我都会收到一个SQLException,指出它找不到jar,或者找不到驱动程序:

[19:28:54] [Server thread/WARN]: driver not found
[19:28:54] [Server thread/WARN]: java.sql.SQLException: No suitable driver found for jdbc:snowflake://d9022.east-us-2.azure.snowflakecomputing.com/
[19:28:54] [Server thread/WARN]:        at java.sql.DriverManager.getConnection(Unknown Source)
[19:28:54] [Server thread/WARN]:        at java.sql.DriverManager.getConnection(Unknown Source)
[19:28:54] [Server thread/WARN]:        at com.mcnations.nationsatwar.jdbc.DatabaseManager.getConnection(DatabaseManager.java:44)
[19:28:54] [Server thread/WARN]:        at com.mcnations.nationsatwar.jdbc.DatabaseManager.init(DatabaseManager.java:50)
[19:28:54] [Server thread/WARN]:        at com.mcnations.nationsatwar.jdbc.DatabaseManager.<init>(DatabaseManager.java:19)
[19:28:54] [Server thread/WARN]:        at net.mcnations.nationsatwar.Player.NationPlayer.<init>(NationPlayer.java:54)
[19:28:54] [Server thread/WARN]:        at net.mcnations.nationsatwar.NationsInitializer.playerLogin(NationsInitializer.java:78)

我将Maven用于我的依赖项。在我的POM中,我只有:

<!-- https://mvnrepository.com/artifact/net.snowflake/snowflake-jdbc -->
<dependency>
<groupId>net.snowflake</groupId>
<artifactId>snowflake-jdbc</artifactId>
<version>3.9.2</version>
</dependency>

即使声明了Maven依赖项(根据Snowflake的文档(,我仍然得到了无驱动程序异常。然后,我将 jar 添加到我的构建路径中,并希望(也许(您的构建路径上既需要一个 maven 依赖项,也需要一个实际的 .jar 文件。这并没有解决问题。

在这一点上,我不知所措。我不知道我做错了什么,也不知道如何解决它。

我的连接类:

package com.mcnations.nationsatwar.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import net.mcnations.nationsatwar.Player.NationPlayer;
public class DatabaseManager {
private NationPlayer player;
public DatabaseManager(NationPlayer player) throws SQLException{
this.player = player;
init();
}
private static Connection getConnection() throws SQLException{

try {
Class.forName("net.snowflake.client.jdbc.SnowflakeDriver");
}catch(ClassNotFoundException ex) {
System.err.println("driver not found");
}
Properties properties = new Properties();
properties.put("user", "NationsUser");
properties.put("password", "//myPassword");
properties.put("db", "//myDB");
properties.put("role", "SYSADMIN");
String connectStr = "jdbc:snowflake://9022.east-us-2.azure.snowflakecomputing.com/";
return DriverManager.getConnection(connectStr, properties);
}
private static void init() throws SQLException{
Connection connObject = getConnection();
Statement statement = connObject.createStatement();
ResultSet rSet = statement.executeQuery("SELECT * FROM PlayerData");
if(rSet == null) {
System.out.println("rSet is null");
}
else {
System.out.println(rSet.next());
}
}
}

据我了解,您没有在您的应用程序中部署所需的 JAR(snowflake-jdbc-3.9.2.jar(,因此它无法在类路径中找到驱动程序。当我尝试在没有正确的类路径的情况下运行我的应用程序时,下面是类似的输出:

java -cp snowflaketest01-1.0-SNAPSHOT.jar com.gokhanatil.snowflaketest01.Main
driver not found
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:snowflake://xxxxxxxxxx.snowflakecomputing.com/
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:189)
at com.gokhanatil.snowflaketest01.Main.getConnection(Main.java:28)
at com.gokhanatil.snowflaketest01.Main.main(Main.java:36)

您可以自己包含 JAR,也可以让 Maven 将所需的 JAR 打包到您的最终罐子中。您可以在 pom 文件中包含以下内容:

...
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
...

所以它生成一个大的JAR文件,其中包括所有必需的JAR(雪花驱动程序等(:

java -cp snowflaketest01-1.0-SNAPSHOT-jar-with-dependencies.jar com.gokhanatil.snowflaketest01.Main

请检查 java 类路径:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html

并将依赖项包含在带有 Maven 的 JAR 中: 使用 Maven 在 jar 中包含依赖项

> 错误"java.sql.SQLException:找不到适合java.sql.SQLException的驱动程序:找不到适合jdbc:snowflake://.snowflakecommputing.com"的驱动程序,当您尝试使用Java程序连接Snowflake数据库,但要么您没有Snowflake JDBC驱动程序{ex. 在调用 getConnection(( 方法之前,未在类路径或驱动程序中注册 snowflake-jdbc-3.11.0.jar}

。您能否确保已将雪花JDBC驱动程序"snowflake-jdbc-3.11.0.jar"包含在构建库路径中。

此错误是由应用程序无法找到 Snowflake jdbc 驱动程序引起的。当 jar 文件具有必需的参数(即 config.yml(时,可能会发生这种情况。

因为 Snowflake JDBC驱动程序没有这些必需的文件,所以我告诉主类同时启动它自己,以及 Snowflake JDBC jar 文件

,如下所示:
@echo off
title Server Console
java -classpath "spigot-1.15.1.jar;lib/*" org.bukkit.craftbukkit.Main
PAUSE

线路java -classpath "spigot-1.15.1.jar;lib/*" org.bukkit.craftbukkit.Main的位置 国家

  1. 启动 Java 应用程序
  2. 沿着"my_main_jar.jar;"的类路径
  3. 使用/lib 目录中的所有文件启动
  4. 并指向主类(在我的例子中,org.bukkit.craftbukkit.Main(

这些是命令行参数,实质上是"移交"给应用程序的。

I am using Eclipse and i never faced any such issue .
Create a Maven Project , put dependencies and you are good .
File->New->Project->Maven Project .Give a name to the project ->Finish .
Now add the below dependency.
<dependency>
<groupId>net.snowflake</groupId>
<artifactId>snowflake-jdbc</artifactId>
<version>3.9.0</version>
</dependency>

你能签入你的~/.m2文件夹,如果你得到罐子吗?

最新更新