gpt4 book ai didi

java - 在 Java 中尝试使用 JDBC 的资源语句

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:59 26 4
gpt4 key购买 nike

Hive JDBC 的有用代码:

       Connection con = null;
Statement stmt = null

try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
con = DriverManager.getConnection(connectionUri, userName, password);
stmt = con.createStatement();
stmt.executeUpdate(query);

} catch (ClassNotFoundException cex) {
cex.printStackTrace();

} catch (SQLException e) {
e.printStackTrace();

} finally {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

我想删除 finally block 中的 try - catch。

所以我尝试了The try-with-resources Statement .

        try (Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection con = DriverManager.getConnection(connectionUri, userName, password);
Statement stmt = con.createStatement();){

stmt.executeUpdate(query);

} catch (ClassNotFoundException cex) {
cex.printStackTrace();

} catch (SQLException e) {
e.printStackTrace();
}

我认为这不是正确的方法。

Class.forName("org.apache.hive.jdbc.HiveDriver") 不应在 try 中。我应该为此做一个单独的 try-catch 吗?

       try {
Class.forName("org.apache.hive.jdbc.HiveDriver");

} catch (ClassNotFoundException cex) {
cex.printStackTrace();
}
try (Connection con = DriverManager.getConnection(connectionUri, userName, password);
Statement stmt = con.createStatement();){

stmt.executeUpdate(query);

} catch (SQLException e) {
e.printStackTrace();
}

这是正确的方法还是我遗漏了什么?

最佳答案

try-with-ressource 背后的想法是关闭一个 AutoCloseable 类。因此,在使用后应关闭的类(Ressource)的每次使用都可以与 try-with-ressource 一起使用(例如 Connection)。您不必手动关闭它(例如在 finally block 中)。

所以是的,你的想法是对的:

  • try/catch for Class.forName("org.apache.hive.jdbc.HiveDriver"); - 因为这不是 AutoCloseable
  • try-with-ressource for Connection con = DriverManager.getConnection(connectionUri, userName, password);
    Statement stmt = con.createStatement();
    ——因为ConnectionStatement实现了AutoCloseable

引用: https://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html

关于java - 在 Java 中尝试使用 JDBC 的资源语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35130402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com