2013-12-08 2 views
0

Я новый пользователь для Hive и только что начал использовать его для проекта. У меня возникла проблема с подключением к базе данных с помощью java. Это объясняется следующим образом:Исключение, вызванное при запросе базы данных Hive Derby через JDBC

Я запустил базу данных Hive на своей машине, которая создала дерби metastore_db с использованием встроенного драйвера Derby. Теперь я хочу запросить этот metastore_db через отдельную программу Java для выдачи запросов.

Я следил за несколькими трюками, которые я мог найти в Интернете, но до сих пор не могу получить эту работу.

Снимок моего файла Java:

String url = "jdbc:derby:metastore_db;create=true"; 
String username = "APP"; 
String password = "mine"; 
String drivername = "org.apache.derby.jdbc.EmbeddedDriver"; 

Connection con = DriverManager.getConnection(url,username, password); 
Statement stmt = con.createStatement(); 
res = stmt.executeQuery("describe " + tableName); 

Запуск файла Java:

Я поместил его в той же папке, что и metastore_db, а затем запустить его с помощью следующей команды:

java -cp "derby-10.4.2.jar:." ConnectTesting 

Я получаю следующее исключение синтаксиса:

java.sql.SQLException: Syntax error: Encountered "describe" at line 1, column 1. 

Некоторые из вещей, которые я уже пробовали:

  1. url = "jdbc:derby:metastore_db;create=false";
  2. url = "jdbc:derby://localhost:10000/metastore_db";
  3. url = "jdbc:derby://localhost:1527/metastore_dbDB"; // By default port at which hive listens
    выше два дают ошибку, как:

    Нет подходящего драйвера найдено для JDBC: дерби: // localhost: 10000/metastore_db

  4. url = "jdbc:derby:<full_path_to_db>/metastore_db";

  5. Если у меня есть мой HIVE сервер уже запущен, а затем из другого терминала я выполнить файл Java, он говорит:
    «Другой пример Дерби, возможно, уже загрузили базу данных»

Может кто-то любезно указывает на то, что я делаю неправильно, и как я могу подключиться к уже существующей базе данных для выдачи запросов.

ответ

0

Это много разных вопросов. На какой именно вам действительно нужно ответить?

«описать» - это команда, реализуемая инструментом «ij»; это не оператор SQL. Чтобы запустить «описать», вам нужно запустить его с «ij» (или с помощью утилиты RunScript для запуска «ij» в вашем приложении, вы не можете запустить ее непосредственно из Statement.executeQuery().

Для того, чтобы для использования драйвера клиент-сервер с синтаксисом hostname: port вам необходимо (a) использовать derbyclient.jar, а не derby.jar в вашем пути к классам, и (b) запустить сетевой сервер.

И вы не можете одновременно открывать одну и ту же Derby (встроенную) базу данных в нескольких приложениях, поэтому пока приложение работает, вы не можете запустить второе приложение против той же (встроенной) базы данных. Если вам нужна эта функциональность, вам нужно переключить все ваши приложения для использования драйвера клиента и запуск сетевого сервера для предоставления доступа к нескольким приложениям s в вашу базу данных.

Вы уже запустили учебник Derby? Он охватывает большинство этих тем более подробно: http://db.apache.org/derby/docs/10.10/getstart/

Смежные вопросы