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 块中的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-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();
}
这是正确的方式还是我错过了什么?
答案 0 :(得分:4)
try-with-ressource背后的想法是关闭AutoCloseable
类。
因此,在使用它之后应该关闭的类的每个用法(Ressource)都可以与try-with-ressource一起使用(例如Connection)。您不必手动关闭它(例如在finally块中)。
是的,你的想法是正确的:
Class.forName("org.apache.hive.jdbc.HiveDriver");
- 因为这不是AutoCloseable Connection con = DriverManager.getConnection(connectionUri, userName, password);
Statement stmt = con.createStatement();
的try-with-ressource - 因为Connection
和Statement
实现了AutoCloseable 参考: https://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html
答案 1 :(得分:2)
当您使用Java 6或更高版本且Apache Hive JDBC驱动程序符合JDBC 4或更好*时,您根本不需要Class.forName("org.apache.hive.jdbc.HiveDriver")
内容。
因此,您可以从第二个解决方案中删除整个try / catch块,并且只需使用它就可以了:
try (Connection con = DriverManager.getConnection(connectionUri, userName, password);
Statement stmt = con.createStatement()) {
stmt.executeUpdate(query);
} catch (SQLException e) {
e.printStackTrace();
}
*版本1.2.0或更新的Hive JDBC驱动程序
的情况如此