Vertx:java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:ACHAT

Posted

技术标签:

【中文标题】Vertx:java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:ACHAT【英文标题】:Vertx : java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: ACHAT 【发布时间】:2016-04-12 09:37:50 【问题描述】:

早上好, 我想使用 odbc 将我的 vertx 应用程序与 Sql 数据库连接,但是当我运行我的代码时出现一个奇怪的错误:java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:ACHAT

我试图删除 ?shutdown 但它仍然是同样的错误

这是我的代码:

 public void start(Future<Void> startFuture)
    String file="/Test1";
    Router router = Router.router(vertx);
       router.route(file).handler(routingContext -> 
        HttpServerResponse response = routingContext.response();
        response.setChunked(true);            
        JsonObject config = new JsonObject()
                  .put("url", "jdbc:hsqldb:mem:odbcName?shutdown=true")   
                  .put("user", "sa")
                  .put("password", "****")
                  .put("driver_class", "org.hsqldb.jdbcDriver")
                  .put("max_pool_size", 30);
        JDBCClient client = JDBCClient.createShared(vertx, config);

        client.getConnection(res -> 
                  if (res.succeeded()) 
                    SQLConnection connection = res.result();
                    connection.query("select id from dbo.achat", res2 -> 
                      if (res2.succeeded()) 
                          System.out.println("oki");
                      
                      else  System.out.println(res2.cause().toString()); 
                    );
                   else 
                    System.out.println("Cnx failed !!");
                  
                );
        routingContext.vertx().setTimer(8000, tid ->  routingContext.response().end());
    );

对于我的服务器:

     vertx.createHttpServer()
            .requestHandler(router::accept)
            .listen(8085, "localhost", res ->                     
                if (res.succeeded())
                    startFuture.complete();    
                
                else
                    startFuture.fail(res.cause());
            );

【问题讨论】:

【参考方案1】:

从 Java 应用程序到 HSQLDB 的连接是通过 JDBC,而不是 ODBC。您的连接设置使用 JDBC。

下面的行创建了一个到内存数据库的连接,当你开始时它是空的:

 put("url", "jdbc:hsqldb:mem:odbcName?shutdown=true")   

必须先创建架构DBO 和表ACHAT,然后才能访问它。

【讨论】:

感谢 fred 的回复,但还是有点不清楚,仅使用我的数据库名称不应该解决我的问题。对于我的 Achat 表,我想 Vertx 可以从连接中读取它。 (我已经在我的 sql 数据库中创建了它)。问候。 找出真正的数据库名称和连接类型,并使用此信息获取连接。 当我将配置更改为时出现错误: .put("url", "jdbc:hsqldb:url://localhost;onp;user=sa;password=sa;") 2016- 04-12T13:14:22.391+0100 SEVERE 无法重新打开数据库 org.hsqldb.HsqlException: 数据库锁获取失败: lockFile: org.hsqldb.persist.LockFile@91823327[file =null, exists=false, locked=false, valid =false, ] 方法:setPath 原因:java.io.IOException: La syntaxe du nom de fichier, de répertoire ou de volume est wronge

以上是关于Vertx:java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:ACHAT的主要内容,如果未能解决你的问题,请参考以下文章

我应该为 Vertx 应用程序中的对象创建静态 Vertx 实例吗?

Vertx 路由初体验

Vertx 路由初体验

Vert.x - SpringBoot 整合 vertx

vertx核心类之VertxImpl

vertx处理程序如何工作?