我是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
在這種情況下,我發佈了一個答案並鏈接到有人說它發生變化的討論。 –