title: Connect from Java to Hive using JDBC
body: <p>I'm trying to connect from Java to Hive server 1.
  I found a question time ago in this forum but it doesn't work for me.
  I'm using this code:</p>
  
  <pre><code>import java.sql.SQLException;
  import java.sql.Connection;
  import java.sql.ResultSet;
  import java.sql.Statement;
  import java.sql.DriverManager;
  
  public class HiveJdbcClient {
    private static String driverName = "org.apache.hive.jdbc.HiveDriver";
  
    /**
     * @param args
     * @throws SQLException
     */
    public static void main(String[] args) throws SQLException {
        try {
        Class.forName(driverName);
      } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.exit(1);
      }
      //replace "hive" here with the name of the user the queries should run as
      Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive", "");
      Statement stmt = con.createStatement();
      String tableName = "testHiveDriverTable";
      stmt.execute("drop table if exists " + tableName);
      stmt.execute("create table " + tableName + " (key int, value string)");
      // show tables
      String sql = "show tables '" + tableName + "'";
      System.out.println("Running: " + sql);
      ResultSet res = stmt.executeQuery(sql);
      if (res.next()) {
        System.out.println(res.getString(1));
      }
         // describe table
      sql = "describe " + tableName;
      System.out.println("Running: " + sql);
      res = stmt.executeQuery(sql);
      while (res.next()) {
        System.out.println(res.getString(1) + "\t" + res.getString(2));
      }
  
  
  // load data into table
  // NOTE: filepath has to be local to the hive server
  // NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line
  String filepath = "/tmp/a.txt";
  sql = "load data local inpath '" + filepath + "' into table " + tableName;
  System.out.println("Running: " + sql);
  stmt.execute(sql);
  
  // select * query
  sql = "select * from " + tableName;
  System.out.println("Running: " + sql);
  res = stmt.executeQuery(sql);
  while (res.next()) {
    System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2));
  }
  
  // regular hive query
  sql = "select count(1) from " + tableName;
  System.out.println("Running: " + sql);
  res = stmt.executeQuery(sql);
  while (res.next()) {
    System.out.println(res.getString(1));
  }
  </code></pre>
  
  <p>That's the code shown in the guide. I've copied hive-metastore, service, jdbc, exec, core and more .jar in the same path of the .java. 
  When I compile it, I get this msg:</p>
  
  <pre><code>java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver
      at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
      at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
      at java.lang.Class.forName0(Native Method)
      at java.lang.Class.forName(Class.java:190)
      at HiveJdbcClient.main(HiveJdbcClient.java:14)
  </code></pre>
  
  <p>Does anybody know what's happening here?</p>