【JDBC-Hive】使用JDBC操作Hive数据库

Myth丶恋晨 2023-10-08 20:35 186阅读 0赞

【JDBC-Hive】使用JDBC操作Hive数据库

  • 1)导入依赖
  • 2)使用JDBC进行Hive数据库操作
    • 2.1.写入
    • 2.2.删除
    • 2.3.修改
    • 2.4.查询
  • 3)注意

1)导入依赖

  1. <dependency>
  2. <groupId>org.apache.hive</groupId>
  3. <artifactId>hive-jdbc</artifactId>
  4. <version>2.1.1</version>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>jdk.tools</groupId>
  8. <artifactId>jdk.tools</artifactId>
  9. </exclusion>
  10. <exclusion>
  11. <groupId>org.slf4j</groupId>
  12. <artifactId>slf4j-api</artifactId>
  13. </exclusion>
  14. <exclusion>
  15. <groupId>org.slf4j</groupId>
  16. <artifactId>slf4j-log4j12</artifactId>
  17. </exclusion>
  18. <exclusion>
  19. <groupId>org.apache.logging.log4j</groupId>
  20. <artifactId>log4j-slf4j-impl</artifactId>
  21. </exclusion>
  22. </exclusions>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.apache.hadoop</groupId>
  26. <artifactId>hadoop-client</artifactId>
  27. <version>2.7.2</version>
  28. <exclusions>
  29. <exclusion>
  30. <groupId>org.slf4j</groupId>
  31. <artifactId>slf4j-api</artifactId>
  32. </exclusion>
  33. <exclusion>
  34. <groupId>org.slf4j</groupId>
  35. <artifactId>slf4j-log4j12</artifactId>
  36. </exclusion>
  37. </exclusions>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.apache.hadoop</groupId>
  41. <artifactId>hadoop-common</artifactId>
  42. <version>2.7.2</version>
  43. </dependency>

2)使用JDBC进行Hive数据库操作

2.1.写入

  1. import java.io.IOException;
  2. import java.sql.*;
  3. public class Test{
  4. //Hive连接信息
  5. private static String JDBC_DRIVER = "org.apache.hive.jdbc.HiveDriver";
  6. private static String HIVE_URL = "jdbc:hive2://192.168.1.1:25005/test";
  7. private static String HIVE_USERNAME = "root";
  8. private static String HIVE_PASSWORD = "123456";
  9. //Hive源
  10. private static String SOURCE = "`ods_x8v`.`ods_tsp_tab_tbox_change`";
  11. private static String TARGET = "`dw_x8v`.`dwd_tsp_tab_tbox_change`";
  12. private static Connection conn = null;
  13. private static ResultSet rs = null;
  14. private static PreparedStatement ps = null;
  15. public static void main(String[] args) {
  16. //HiveJDBC驱动
  17. try {
  18. Class.forName(JDBC_DRIVER);
  19. } catch (ClassNotFoundException e) {
  20. e.printStackTrace();
  21. }
  22. //连接Hive
  23. try {
  24. conn = DriverManager.getConnection(HIVE_URL, HIVE_USERNAME, HIVE_PASSWORD);
  25. } catch (SQLException e) {
  26. e.printStackTrace();
  27. }
  28. try {
  29. ps = conn.prepareStatement("insert into " + SOURCE + " values(?, ?)");
  30. //写入数据id为1234,name为张三
  31. ps.setInt(1,1234);
  32. ps.setString(2, "张三");
  33. rs = ps.executeUpdate();
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. }

2.2.删除

  1. import java.io.IOException;
  2. import java.sql.*;
  3. public class Test{
  4. //Hive连接信息
  5. private static String JDBC_DRIVER = "org.apache.hive.jdbc.HiveDriver";
  6. private static String HIVE_URL = "jdbc:hive2://192.168.1.1:25005/test";
  7. private static String HIVE_USERNAME = "root";
  8. private static String HIVE_PASSWORD = "123456";
  9. //Hive源
  10. private static String SOURCE = "`ods_x8v`.`ods_tsp_tab_tbox_change`";
  11. private static String TARGET = "`dw_x8v`.`dwd_tsp_tab_tbox_change`";
  12. private static Connection conn = null;
  13. private static ResultSet rs = null;
  14. private static PreparedStatement ps = null;
  15. public static void main(String[] args) {
  16. //HiveJDBC驱动
  17. try {
  18. Class.forName(JDBC_DRIVER);
  19. } catch (ClassNotFoundException e) {
  20. e.printStackTrace();
  21. }
  22. //连接Hive
  23. try {
  24. conn = DriverManager.getConnection(HIVE_URL, HIVE_USERNAME, HIVE_PASSWORD);
  25. } catch (SQLException e) {
  26. e.printStackTrace();
  27. }
  28. try {
  29. ps = conn.prepareStatement("delete from " + SOURCE + " where id = ?");
  30. //删除id为1234的数据
  31. ps.setInt(1,1234);
  32. //执行数据更新操作
  33. rs = ps.executeUpdate();
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. }

2.3.修改

  1. import java.io.IOException;
  2. import java.sql.*;
  3. public class Test{
  4. //Hive连接信息
  5. private static String JDBC_DRIVER = "org.apache.hive.jdbc.HiveDriver";
  6. private static String HIVE_URL = "jdbc:hive2://192.168.1.1:25005/test";
  7. private static String HIVE_USERNAME = "root";
  8. private static String HIVE_PASSWORD = "123456";
  9. //Hive源
  10. private static String SOURCE = "`ods_x8v`.`ods_tsp_tab_tbox_change`";
  11. private static String TARGET = "`dw_x8v`.`dwd_tsp_tab_tbox_change`";
  12. private static Connection conn = null;
  13. private static ResultSet rs = null;
  14. private static PreparedStatement ps = null;
  15. public static void main(String[] args) {
  16. //HiveJDBC驱动
  17. try {
  18. Class.forName(JDBC_DRIVER);
  19. } catch (ClassNotFoundException e) {
  20. e.printStackTrace();
  21. }
  22. //连接Hive
  23. try {
  24. conn = DriverManager.getConnection(HIVE_URL, HIVE_USERNAME, HIVE_PASSWORD);
  25. } catch (SQLException e) {
  26. e.printStackTrace();
  27. }
  28. try {
  29. ps = conn.prepareStatement("update " + SOURCE + " set name = ? where id = ?");
  30. //修改id为1234的数据name字段为张三
  31. ps.setString(1, "张三");
  32. ps.setInt(2,1234);
  33. //执行数据更新操作
  34. rs = ps.executeUpdate();
  35. } catch (Exception e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. }

2.4.查询

  1. import java.io.IOException;
  2. import java.sql.*;
  3. public class Test{
  4. //Hive连接信息
  5. private static String JDBC_DRIVER = "org.apache.hive.jdbc.HiveDriver";
  6. private static String HIVE_URL = "jdbc:hive2://192.168.1.1:25005/test";
  7. private static String HIVE_USERNAME = "root";
  8. private static String HIVE_PASSWORD = "123456";
  9. //Hive源
  10. private static String SOURCE = "`ods_x8v`.`ods_tsp_tab_tbox_change`";
  11. private static String TARGET = "`dw_x8v`.`dwd_tsp_tab_tbox_change`";
  12. private static Connection conn = null;
  13. private static ResultSet rs = null;
  14. private static PreparedStatement ps = null;
  15. public static void main(String[] args) {
  16. //HiveJDBC驱动
  17. try {
  18. Class.forName(JDBC_DRIVER);
  19. } catch (ClassNotFoundException e) {
  20. e.printStackTrace();
  21. }
  22. //连接Hive
  23. try {
  24. conn = DriverManager.getConnection(HIVE_URL, HIVE_USERNAME, HIVE_PASSWORD);
  25. } catch (SQLException e) {
  26. e.printStackTrace();
  27. }
  28. try {
  29. //查询表中id,name字段数据
  30. ps = conn.prepareStatement("select id, name from " + SOURCE);
  31. //将查询结果返回结果集
  32. rs = ps.executeQuery();
  33. //遍历结果集
  34. while (rs.next()) {
  35. int id = rs.getInt(1);
  36. String name = rs.getString(2);
  37. }
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. }

3)注意

(1)ps.setString():空指针异常

在用JDBC操作Hive数据库执行写入操作时,由于要使用 ps.setString(字段名, 字段值) 的方式进行数据值的设置,所以无可避免的会出现 ps.setString(字段名, null) 这种 null 值的写入。这时就会出现空指针异常。

解决方式:

使用ps.setObject(字段名, 字段值)

发表评论

表情:
评论列表 (有 0 条评论,186人围观)

还没有评论,来说两句吧...

相关阅读

    相关 使用原生JDBC操作数据库

    > 现在都是使用mybatis来操作数据库,至于如何使用JDBC来操作数据库,基本上忘记的差不多了,特此记录一下 > 感情深不深 ,都在代码里,废话不多说,直接上代码