使用JDBC的雪花临时表连接

使用JDBC的雪花临时表连接,jdbc,snowflake-cloud-data-platform,mybatis,websphere-liberty,snowflake-schema,Jdbc,Snowflake Cloud Data Platform,Mybatis,Websphere Liberty,Snowflake Schema,我正在尝试使用Mybatis将临时值放入snowflake临时表中。在WebSphere Application server的server.xml文件中配置的连接详细信息 理想情况下,值应该保留在服务器请求级别 但只要应用程序运行,临时表及其数据就仍然可用。对于每个请求,我都能看到以前的插入数据。 对于Oracle全局临时表,同样的代码也可以正常工作 public class TempDao{ @Inject SqlSession sqlSession; public int saveVa

我正在尝试使用Mybatis将临时值放入snowflake临时表中。在WebSphere Application server的server.xml文件中配置的连接详细信息

理想情况下,值应该保留在服务器请求级别

但只要应用程序运行,临时表及其数据就仍然可用。对于每个请求,我都能看到以前的插入数据。

对于Oracle全局临时表,同样的代码也可以正常工作

public class TempDao{

@Inject
SqlSession sqlSession;

public int saveValues(List<TemporaryValue> values) {
        logger.debug("Saving items on temporary table");
        try {
            final Map<String, Object> parameters = new HashMap<>();
            parameters.put("jobList", values);
            return sqlSession.insert("com.some.sql.insertJobs", parameters);
        } catch (Exception e) {
            ExceptionUtils.propagate(e);
        }
        return 0;
    }


}
公共类TempDao{
@注入
SqlSession-SqlSession;
公共整数保存值(列表值){
调试(“在临时表上保存项目”);
试一试{
最终映射参数=new HashMap();
参数put(“作业列表”,值);
返回sqlSession.insert(“com.some.sql.insertJobs”,参数);
}捕获(例外e){
例外情况。传播(e);
}
返回0;
}
}
JNDI连接:

<dataSource id="SnowflakeDataSource" jndiName="jdbc/BM_SF" maxPoolSize="100" queryTimeout="300s" statementCacheSize="1000" type="javax.sql.DataSource">
        <properties URL="jdbc:snowflake://adpdc_cdl.us-east-1.privatelink.snowflakecomputing.com" databaseName="***" password="****" schema="**" user="**" warehouse="****strong text**" />
        <jdbcDriver javax.sql.DataSource="net.snowflake.client.jdbc.SnowflakeBasicDataSource" libraryRef="SharedLib"/>
    </dataSource>

如果Liberty中的连接池干扰了Snowflake中会话的结束,则可以关闭连接池。查看我插入到配置代码段中的agedTimeout为0(立即超时)的connectionManager元素

    <dataSource id="SnowflakeDataSource" jndiName="jdbc/BM_SF" maxPoolSize="100" queryTimeout="300s" statementCacheSize="1000" type="javax.sql.DataSource">
        <connectionManager agedTimeout="0"/>
        <properties URL="jdbc:snowflake://adpdc_cdl.us-east-1.privatelink.snowflakecomputing.com" databaseName="***" password="****" schema="**" user="**" warehouse="****strong text**" />
        <jdbcDriver javax.sql.DataSource="net.snowflake.client.jdbc.SnowflakeBasicDataSource" libraryRef="SharedLib"/>
    </dataSource>


到底是什么问题?雪花临时表在创建它们的会话期间可用。会话终止时,它们会被销毁。是的,你的问题是什么?你如何关闭JDBC连接,你能提供一个例子吗?听起来你的代码中有连接池,所以会话被重用(以节省连接设置时间)因此,临时表的使用时间比预期的长。是的,连接池中的所有连接的DB会话ID都是相同的。snowflake JDBC驱动程序似乎有问题。谢谢@njr。现在它正在工作。但在生产中,关闭连接池绝对不是一个好的选择