与 Maven 的 Snowflake 连接,类路径上的 jar
Snowflake connection with Maven, jar on classpath
我目前正在尝试与我们的 Snowflake 数据库建立简单的连接。我遵循了他们网站上的文档: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 文件。这并没有解决问题。
此时我不知所措。我不知道自己做错了什么,也不知道如何解决。
我的连接class:
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());
}
}
}
错误 "java.sql.SQLException: No suitable driver found for java.sql.SQLException: No suitable driver found for jdbc:snowflake://.snowflakecommputing.com" 当您尝试使用 Java 程序连接 Snowflake 数据库但您没有 Snowflake JDBC 驱动程序 {ex . snowflake-jdbc-3.11.0.jar} 在调用 getConnection() 方法之前未在您的类路径或驱动程序中注册。
请确保您已将 Snowflake JDBC 驱动程序 "snowflake-jdbc-3.11.0.jar" 包含到您的构建库路径中。
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>
如果你得到了 jar,你能检查你的 ~/.m2 文件夹吗?
此错误是由于应用程序无法找到 Snowflake jdbc 驱动程序造成的。当 jar 文件具有必需的参数(即 config.yml)时,可能会发生这种情况。
因为 Snowflake JDBC 驱动程序没有这些必需的文件,我告诉主要 class 启动它们本身,以及 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
州
- 启动 java 应用程序
- 沿着 "my_main_jar.jar;"
的 class 路径
- 使用 /lib 目录中的所有文件启动
- 并指向主要 class(在我的例子中,org.bukkit.craftbukkit.Main)
这些命令行参数本质上是 "handed off" 应用程序。
据我了解,您没有在您的应用程序中部署所需的 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 打包到您的最终 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 中包含依赖项:
Including dependencies in a jar with Maven
我目前正在尝试与我们的 Snowflake 数据库建立简单的连接。我遵循了他们网站上的文档: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 文件。这并没有解决问题。
此时我不知所措。我不知道自己做错了什么,也不知道如何解决。
我的连接class:
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());
}
}
}
错误 "java.sql.SQLException: No suitable driver found for java.sql.SQLException: No suitable driver found for jdbc:snowflake://.snowflakecommputing.com" 当您尝试使用 Java 程序连接 Snowflake 数据库但您没有 Snowflake JDBC 驱动程序 {ex . snowflake-jdbc-3.11.0.jar} 在调用 getConnection() 方法之前未在您的类路径或驱动程序中注册。
请确保您已将 Snowflake JDBC 驱动程序 "snowflake-jdbc-3.11.0.jar" 包含到您的构建库路径中。
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>
如果你得到了 jar,你能检查你的 ~/.m2 文件夹吗?
此错误是由于应用程序无法找到 Snowflake jdbc 驱动程序造成的。当 jar 文件具有必需的参数(即 config.yml)时,可能会发生这种情况。
因为 Snowflake JDBC 驱动程序没有这些必需的文件,我告诉主要 class 启动它们本身,以及 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
州
- 启动 java 应用程序
- 沿着 "my_main_jar.jar;" 的 class 路径
- 使用 /lib 目录中的所有文件启动
- 并指向主要 class(在我的例子中,org.bukkit.craftbukkit.Main)
这些命令行参数本质上是 "handed off" 应用程序。
据我了解,您没有在您的应用程序中部署所需的 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 打包到您的最终 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 中包含依赖项: Including dependencies in a jar with Maven