【问题标题】:Java - Writing a query to a databaseJava - 将查询写入数据库
【发布时间】:2013-12-03 07:09:33
【问题描述】:

我正在尝试编写代码来访问我服务器上的已知数据库以从某个表中收集数据,但我不断收到异常。

到目前为止,这是我的 Java 代码;

public static void main (String [] args) throws FileNotFoundException
{ 
    String url = "jdbc:hsqldb:C:/workspace/database/eemdb";
    String dbName = "eem_db";
    String driver = "org.hsqldb.jdbcDriver";
    String username = "sa";
    String password = "";
    try
    {
        Class.forName(driver).newInstance();
        Connection con = DriverManager.getConnection(url+dbName, username, password);
        Statement st = con.createStatement();
        ResultSet res = st.executeQuery("SELECT * FROM DEVICE");

        con.close();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

这是异常报告;

java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: DEVICE
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
    at com.davranetworks.seleniumtests.Example.main(Example.java:32)
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: DEVICE
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.SchemaManager.getTable(Unknown Source)
    at org.hsqldb.ParserDQL.readTableName(Unknown Source)
    at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source)
    at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source)
    at org.hsqldb.ParserDQL.XreadFromClause(Unknown Source)
    at org.hsqldb.ParserDQL.XreadTableExpression(Unknown Source)
    at org.hsqldb.ParserDQL.XreadQuerySpecification(Unknown Source)
    at org.hsqldb.ParserDQL.XreadSimpleTable(Unknown Source)

目前我想做的只是连接到数据库并调用一个查询,但这对我来说并没有发生。有任何信息可以帮助我吗?

【问题讨论】:

  • 您的数据库中似乎不存在表DEVICE,或者您无权访问它。
  • 不存在,我可以手动输入,我可以访问它
  • url+dbName 中可能缺少 /
  • 你的数据库名称是什么?
  • 如果您直接运行该精确查询是否有效?我的第一个想法是您需要在查询中完全限定 DEVICE。

标签: java sql hsqldb


【解决方案1】:

我认为错误消息可能具有误导性。尝试更新版本的 hsqldb(或切换到 the H2 database 以查看错误消息应该是什么样的)。

在您的情况下,我的猜测是表 DEVICE 不存在。您是否在此数据库中创建了任何表?

另请注意,如果您在 URL 中输入错误,hsqldb 将创建一个空数据库。

因为sa 是数据库管理员,所以“用户缺乏权限”的可能性很小。

检查哪些表存在:How to see all the tables in an HSQLDB database?

【讨论】:

  • H2 推荐 +1。它是 HSQLDB 的直接替代品,但要好得多。
  • 这是我同事使用的公司数据库,因此我无法对其进行任何更改。表Device 确实存在,我已经尝试了其他表的代码,但结果相同。我个人没有创建表格
  • 运行 SELECT * FROM INFORMATION_SCHEMA.TABLES 以查看数据库中有哪些表。我的猜测是你打错了,hsqldb 创建了一个新的空数据库。
【解决方案2】:

在执行代码之前,您是否在 DB 中创建了任何表?如果您是设备,则有可能缺少 / 试试这样

 String url = "jdbc:hsqldb:C://workspace/database/eemdb";

【讨论】:

  • 试过了,没区别
猜你喜欢
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
相关资源
最近更新 更多