我是Hive和Hadoop的新手。在我的教程,我想创建表作为配置单元查询无法通过jdbc生成结果集
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveCreateDb {
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) {
// Register driver and create driver instance
try {
Class.forName(driverName);
// get connection
Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/mydb", "root", "");
Statement stmt = con.createStatement();
stmt.executeQuery("CREATE TABLE IF NOT EXISTS " + " employee (e_id int, name String, "
+ " salary String)" + " STORED AS TEXTFILE");
System.out.println("Operation done successfully.");
con.close();
} catch (ClassNotFoundException e) {
System.err.println("class not found!!!!");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("sql exception!!!");
e.printStackTrace();
}
}
}
当我运行代码,我得到这个错误
sql exception!!! java.sql.SQLException: The query did not generate a result set! at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:393)
at tr.com.vedat.hive.HiveCreateDb.main(HiveCreateDb.java:25)
所以,我无法找到解决办法。任何人都可以帮助我发现错误并引导我正确的方式吗?
我没有使用Java,Hive或Hadoop(因此我不能回答),但是从其他经验和Google搜索中,我会下注到需要使用stmt.execute对于使用新表而不是executeQuery的查询。 executeQuery可能用于选择查询(DML),而execute可能用于DDL。如果你想了解它们之间的差异,请看看这些。 –
@PaluMacil,executeQuery和execute可以主要使用创建表或模式操作。我之前使用executeQuery来创建RDBMS,并且它工作正常。对于Hive,我发现了几个教程,并且所有这些教程都使用executeQuery进行了创建。您的评论后,我尝试执行,它的工作原理。非常感谢。我一直是教程的受害者:) – trallallalloo
在这种情况下,我发布了一个答案并链接到有人说它发生变化的讨论。 –