java - java中的动态雪花jdbc连接

标签 java snowflake-cloud-data-platform

我试图在 java 中创建动态 JDBC 连接来连接到雪花。

我陷入了困境,如何将参数从我的属性文件传递到雪花连接文件

请查看附件代码

package com.cisco.export.utils;


import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import com.cisco.config.Configuration;



public class SFDbConnection {

    public Connection getConnection(Configuration config) throws SQLException{
        Connection connection=null;
        try {
            System.out.println(config.getProp("sf.driverclass"));
            System.out.println(config.getProp("sf.url"));
            System.out.println(config.getProp("sf.account"));
            System.out.println(config.getProp("sf.username"));
            System.out.println(config.getProp("sf.password"));
            System.out.println(config.getProp("sf.warehouse"));
            System.out.println(config.getProp("sf.db"));
            System.out.println(config.getProp("sf.schema"));
            System.out.println(config.getProp("sf.role"));




            Class.forName(config.getProp("sf.driverclass"));
            String connectStr = "jdbc:snowflake://mysnowflakeaccount.us-east-1.snowflakecomputing.com";
                connection = DriverManager.getConnection()


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return connection;
    }

有人可以帮助我如何使 getConnection() 内的参数动态化吗?

感谢您的帮助。

谢谢, 尼基尔

最佳答案

Snowflake JDBC 驱动程序接受连接属性 via the connection-string或通过 java.util.Properties class object .

使用 connection string 中的属性:

String sfAccount = config.getProp("sf.account");
String sfUsername = config.getProp("sf.username");
String sfPassword = config.getProp("sf.password");
String sfWarehouse = config.getProp("sf.warehouse");
String sfDatabase = config.getProp("sf.db");
String sfSchema = config.getProp("sf.schema");
String sfRole = config.getProp("sf.role");

String connectionString =
  String.format("jdbc:snowflake://%s.snowflakecomputing.com/?role=%s&warehouse=%s&db=%s&schema=%s",
    sfAccount,
    sfRole,
    sfWarehouse,
    sfDatabase,
    sfSchema
  );

return DriverManager.getConnection(connectionString, sfUsername, sfPassword);

com.cisco.config.Configuration 类不是已知的公共(public) API 类型,但如果它可以转换为 java.util.Properties 对象,则您可以可以通过吗when building a connection 。这是直接转换:

java.util.Properties props = new java.util.Properties();

String connectionString =
  String.format(
    "jdbc:snowflake://%s.snowflakecomputing.com",
    config.getProp("sf.account")
  );

props.setProperty("user", config.getProp("sf.username"));
props.setProperty("password", config.getProp("sf.password"));
props.setProperty("role", config.getProp("sf.role"));
props.setProperty("warehouse", config.getProp("sf.warehouse"));
props.setProperty("db", config.getProp("sf.db"));
props.setProperty("schema", config.getProp("sf.schema"));

return DriverManager.getConnection(connectionString, props);

关于java - java中的动态雪花jdbc连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62389398/

相关文章:

snowflake-cloud-data-platform - 如何访问 Snowflake 数据库中 INFORMATION_SCHEMA 下的对象

java - 捕获异常后返回 null 错误的设计

java - 使用 javax.xml.transform.Transformer 缩进文本子节点

sql - 雪花中是否有融化命令?

sql - 如何处理 Snowflake 中列名称中的数字

snowflake-cloud-data-platform - 如何检查雪花表是否启用了 CHANGE_TRACKING?

java - String.equalsIgnoreCase - 大写与小写

java - Spring Initializr生成的项目中的Lombok(LombokProcessor无法初始化)

java - 为什么我的排序代码无法正常工作?

sql - 为什么 Trino 和 Snowflake 之间的 date_diff 不同?