我使用的是雪花-JDBC13.3.8.jar。在执行下面具有展开调用的代码时,我得到了异常。请指点我漏掉了什么?
CallableStatement st = connection.prepareCall("CALL TEST_SP(?)");
st.setString(1, "Value1");
ResultSet resultSet = st.executeQuery();
String queryId = resultSet.unwrap(SnowflakeResultSet.class).getQueryId();
Net.snowflake.client.jdbc.SnowflakeCallableStatementV1 not unwrappable from net.snowflake.client.jdbc.SnowflakeStatement发布于 2022-01-04 10:34:21
您正在调用getQueryId()而不是getQueryID(),请注意ID在大写中。解包装工作,下面是一个示例。
首先,我创建一个简单的存储过程:
CREATE or replace PROCEDURE TEST_SP(v varchar)
RETURNS VARCHAR
LANGUAGE javascript
AS
$$
return 'Done.';
$$;我测试它,看看它是否有效:
CALL TEST_SP('Value1');它只会返回给我的字符串“完成”。
然后创建一个简单的Java类:
import java.io.PrintWriter;
import java.io.StringWriter;
import java.sql.*;
import net.snowflake.client.jdbc.*;
public class SampleUnwrap {
public static void main(String[] args) {
String user = "<user>";
String password = "<pass>";
String account = "<account>";
String JDBC_DRIVER = "net.snowflake.client.jdbc.SnowflakeDriver";
String warehouse = "<wh>";
String role = "<role>";
String db = "<db>";
String schema = "PUBLIC";
String queryString = "SSL=on&tracing=ALL&database=" + db + "&role=" + role + "&warehouse=" + warehouse;
String connectionURL = "jdbc:snowflake" + "://" + account + ".snowflakecomputing.com" + "/?" + queryString;
Connection conn1;
try {
conn1 = DriverManager.getConnection(connectionURL, user, password);
CallableStatement stmt = conn1.prepareCall("CALL TEST_SP(?)");
stmt.setString(1, "Value1");
ResultSet resultSet = stmt.executeQuery();
String queryId = resultSet.unwrap(SnowflakeResultSet.class).getQueryID();
System.out.println(queryId);
resultSet.close();
conn1.close();
} catch (Exception e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw, true));
System.out.println(sw);
}
}
}当我运行它时,我会得到queryID:
java -cp .:snowflake-jdbc-3.13.8.jar SampleUnwrap.java
01a166f7-0403-5054-0000-16490d51d2c2如果环境仍然不适合你,就发布完整的类和详细信息。
https://stackoverflow.com/questions/70569662
复制相似问题