通过JDBC查询Hive Derby数据库时导致异常

时间:2013-12-08 09:56:16

标签: jdbc hive derby

我是Hive的新用户,刚刚开始将其用于项目。我在使用java连接数据库时遇到问题。它解释如下:

我在我的机器上运行了Hive数据库,该数据库使用Embedded Derby Driver创建了一个derby metastore_db。现在,我希望通过单独的Java程序查询此metastore_db以发出查询。

我遵循了我可以在网上找到的多种技巧,但仍然无法实现这一点。

我的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的驱动程序:derby:// localhost:10000 / metastore_db

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

  5. 如果我的HIVE服务器已经运行,然后从另一个终端执行java文件,它会说:
    “另一个Derby实例可能已经启动了数据库”
  6. 任何人都可以指出我做错了什么以及如何连接到现有数据库来发出查询。

1 个答案:

答案 0 :(得分:0)

这是很多不同的问题。你真的需要回答哪一个?

“describe”是由“ij”工具实现的命令;它不是SQL语句。因此,要运行“describe”,您必须从“ij”运行它(或者使用RunScript实用程序在您的应用程序中运行“ij”;您无法直接从Statement.executeQuery()运行它。

为了使用客户端 - 服务器驱动程序,使用hostname:port语法,您必须(a)在类路径中使用derbyclient.jar而不是derby.jar,并且(b)运行Network Server

并且,您不能同时在多个应用程序中打开相同的Derby(嵌入式)数据库,因此在您的应用程序运行时,您无法针对同一(嵌入式)数据库运行第二个应用程序。如果需要此功能,则需要将所有应用程序切换为使用客户端驱动程序,并运行网络服务器以提供对数据库的多应用程序访问。

你有没有运行Derby教程?它更详细地介绍了大多数这些主题:http://db.apache.org/derby/docs/10.10/getstart/