2017-05-08 15 views
0

jdbcを使ってハイブでデータを操作しようとしました。選択または作成操作を使用すると、すべて正常に機能しました。しかし、私は次のようにテーブルにいくつかの行を追加するために、インサートを使用しようとしたとき:jdbcを介してハイブテーブルにデータを挿入するにはどうすればよいですか?

String sql = "insert into agg_test_20170508 values (20170508, 100)"; 
Class.forName(JDBC_Driver); 
connection = DriverManager.getConnection(JDBC_String, ID, pwd); 
Statement stmt = connection.createStatement(); 
System.out.println(D_FORMAT.format(new Date()) + " Running:\r\n" + sql); 
ResultSet res = stmt.executeQuery(sql); 
System.out.println(D_FORMAT.format(new Date()) + " QUERY COMPELET."); 

しかし、長い時間の後、何も返されません。 jdbcを使用してハイブに接続する際に制限はありますか?

私の会社のhadoopバージョンは0.20.2です。

答えて

0

削除INSERT、UPDATEとexecuteUpdateを使用する必要があります。

int res = stmt.executeUpdate(sql); 

int型のexecuteUpdate(文字列のSQL):はINSERT、UPDATEまたはDELETE文を実行し、 行の数を示す更新アカウントを返します。影響を受けた行(例:1行挿入、2行更新、0行)。

ResultSet executeQuery(String sql):はSELECT文を実行し、 クエリによって返された結果を含むResultSetオブジェクトを返します。

+1

問題が解決しました。 thx〜 –

0

---これは、データベースの内容を読み取るために一般的に使用される)

+1

これはコメントのように見え、答えではありません。理由を説明してください。 – Blip

0

のexecuteQuery(代わりにexecuteQueryメソッドのexecuteUpdateメソッドを使用してください。出力はResultSetの形式になります。通常、SELECT文が使用されます。

executeUpdate()---これは、通常、データベースの変更に使用されます。一般的に、DROP TABLEまたはDATABASE、INSERT into TABLE、UPDATE TABLE、DELETE from TABLEステートメントがこれで使用されます。出力はint型になります。このint値は、クエリの影響を受ける行の数を示します。

execute()--- SQLステートメントの実行に使用するメソッドがわからない場合は、このメソッドを使用できます。これはブール値を返します。 TRUEは結果がResultSetであることを示し、FALSEはクエリによって影響を受ける行の数を示すint値を持つことを示します。

関連する問題