当前位置: 首页 > 知识库问答 >
问题:

为什么Grails使用H2而不是Oracle?

百里阳平
2023-03-14

我花了很多时间来解决这个问题。我是GRAILS和GROOVY中的begginer。我有一个名为“tms\u dev”的旧oracle数据库模式。此架构有一些表(例如checktypes表)。此外,我还有由GRAILS生成的域类Checktype和ChecktypesController类-controller。

此类具有列表方法:

def列表(最大整数){

params.max = Math.min(max ?: 10, 100)
[checktypesInstanceList: Checktypes.list(params), checktypesInstanceTotal: Checktypes.count()]

}

我还配置了Datasource。groovy文件与oracle一起使用这些内容

dataSource {
    pooled = true
    driverClassName = "oracle.jdbc.OracleDriver"
    dialect = "org.hibernate.dialect.Oracle10gDialect"
    username = "TMS_DEV"
    password = "password"
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
development {
        dataSource {
            dbCreate = "update" // one of 'create', 'create-drop','update'
            url = "jdbc:oracle:thin:@server_name:1522:sid_name"
        }
    }
production {
        dataSource {
            dbCreate = "update" // one of 'create', 'create-drop','update'
            url = "jdbc:oracle:thin:@server_name:1522:sid_name"
        }
    }

我运行我的应用程序。然后单击主页上的“tst7.ChecktypesController”参考。

因此,我有一个例外:

| Error 2012-08-27 14:41:03,469 [http-bio-8080-exec-9] ERROR util.JDBCExceptionReporter  - Table "CHECKTYPES" not found; SQL statement:
select * from ( select this_.CHECKTYPECODE as CHECKTYP1_21_0_, this_.active as active21_0_, this_.availabilitychecktype as availabi3_21_0_, this_.checktypecode as checktyp1_21_0_, this_.checktypedescr as checktyp4_21_0_, this_.TARGETTYPECODE as TARGETTY5_21_0_ from CHECKTYPES this_ ) where rownum <= ? [42102-164]
| Error 2012-08-27 14:41:03,547 [http-bio-8080-exec-9] ERROR errors.GrailsExceptionResolver  - JdbcSQLException occurred when processing request: [GET] /Tst7/checktypes/list
Table "CHECKTYPES" not found; SQL statement:
select * from ( select this_.CHECKTYPECODE as CHECKTYP1_21_0_, this_.active as active21_0_, this_.availabilitychecktype as availabi3_21_0_, this_.checktypecode as checktyp1_21_0_, this_.checktypedescr as checktyp4_21_0_, this_.TARGETTYPECODE as TARGETTY5_21_0_ from CHECKTYPES this_ ) where rownum <= ? [42102-164]. Stacktrace follows:
Message: Table "CHECKTYPES" not found; SQL statement:
select * from ( select this_.CHECKTYPECODE as CHECKTYP1_21_0_, this_.active as active21_0_, this_.availabilitychecktype as availabi3_21_0_, this_.checktypecode as checktyp1_21_0_, this_.checktypedescr as checktyp4_21_0_, this_.TARGETTYPECODE as TARGETTY5_21_0_ from CHECKTYPES this_ ) where rownum <= ? [42102-164]
    Line | Method
->>  329 | getJdbcSQLException       in org.h2.message.DbException
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|    169 | get                       in     ''
|    146 | get . . . . . . . . . . . in     ''
|   4753 | readTableOrView           in org.h2.command.Parser
|   1080 | readTableFilter . . . . . in     ''
|   1686 | parseSelectSimpleFromPart in     ''
|   1793 | parseSelectSimple . . . . in     ''
|   1680 | parseSelectSub            in     ''
|   1523 | parseSelectUnion . . . .  in     ''
|   1022 | readTableFilter           in     ''
|   1686 | parseSelectSimpleFromPart in     ''
|   1793 | parseSelectSimple         in     ''
|   1680 | parseSelectSub . . . . .  in     ''
|   1523 | parseSelectUnion          in     ''
|   1511 | parseSelect . . . . . . . in     ''
|    405 | parsePrepared             in     ''
|    279 | parse . . . . . . . . . . in     ''
|    251 | parse                     in     ''
|    217 | prepareCommand . . . . .  in     ''
|    415 | prepareLocal              in org.h2.engine.Session
|    364 | prepareCommand . . . . .  in     ''
|   1121 | prepareCommand            in org.h2.jdbc.JdbcConnection
|     71 | <init> . . . . . . . . .  in org.h2.jdbc.JdbcPreparedStatement
|    267 | prepareStatement          in org.h2.jdbc.JdbcConnection
|    281 | prepareStatement . . . .  in org.apache.commons.dbcp.DelegatingConnection
|    313 | prepareStatement          in org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
|     55 | <init> . . . . . . . . .  in grails.orm.PagedResultList
|     45 | list                      in tst7.ChecktypesController
|    195 | doFilter . . . . . . . .  in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter                  in grails.plugin.cache.web.filter.AbstractFilter
|   1110 | runWorker . . . . . . . . in java.util.concurrent.ThreadPoolExecutor
|    603 | run                       in java.util.concurrent.ThreadPoolExecutor$Worker
^    722 | run . . . . . . . . . . . in java.lang.Thread

然后我尝试在list方法中创建直接Oracle连接

def list(Integer max) {

        def sql = Sql.newInstance("jdbc:oracle:thin:@server_name:1522:instance_name", "TMS_DEV",
            "password", "oracle.jdbc.driver.OracleDriver")
        sql.eachRow("select * from Dbdrivers"){
            println it.dbdrivercode
        }
}

然后运行应用程序。结果打印出来。dbdrivercode-工作正常(连接正常!!!)。

这个问题中最奇怪的是,异常是由h2(内存数据库中的h2)类(org.h2.jdbc.JdbcConnection、org.h2.jdbc.JdbcConnection等)生成的。

共有2个答案

姜松
2023-03-14

听起来像是应用程序缓存问题。在运行应用程序之前,请尝试运行grails clean。

薛承志
2023-03-14

您默认使用H2驱动程序,因为在环境块之外时,您的生产和开发块将被忽略。

 类似资料:
  • 很多人问了此问题,说bzero已经被posix-2008废弃,为何还使用bzero。选择bzero而不是memset,有2个原因: bzero有2个参数,指针和长度,很明确就是将制定size的内存初始化为0。而memset有3个参数,需要记忆参数的位置,有不少人经常把长度和初始化值搞错。 bzero比memset的可读性要好。memset可以制定初始化的值,实际上绝大多数情况都是0。 一旦新版本g

  • 问题内容: 我不确定为什么列出项目时为什么需要使用ul-li而不是简单地使用div。我可以使两者看起来完全一样,因此与创建div相比,创建无序列表的功能优势在哪里? 问题答案: 为了语义正确。HTML具有表达事物列表的功能,它可以帮助Google机器人,屏幕阅读器以及所有不仅仅关心网站外观的用户更好地了解您的内容。

  • 问题内容: 的OpenJDK代码包括以下行: 为什么在这里使用,而不是?我很好奇。 问题答案: 要强调的是,数字是2的幂,而不是一个完全任意的选择。因此,它警告开发人员尝试不同的数字,他们应该在模式中使用其他数字(例如或,而不是),这样他们就不会破坏依赖于两个要求的幂的方法。有评论略高于: 任何一个的容量(表长度)始终是2的幂。之所以这样设计,是因为它允许使用快速的按位AND操作()将每个键的哈希

  • 问题内容: 我想知道为什么Arrays类的sort方法要求一个Object []类型的参数。为什么参数不是Comparable []类型。如果不传递Comparable [],它将生成ClassCastException。 为什么… public static void sort(Object [] a) 而不是 public static void sort(Comparable [] a) ?

  • 问题内容: 我已经在Android代码中使用FloatBuffers一段时间了(从一些opengles教程中复制了它),但是我无法确切地理解此构造是什么以及为什么需要它。 例如,我在许多人的代码和android教程中看到了以下代码(或类似代码): 就我所知,这似乎是冗长和混乱的,我只是说它们只是一个浮点数的包装而已。 问题: 与任何其他类型的float集合或简单数组相反,这种类型的类(ByteBu

  • 问题内容: 听说您应该在样式表中使用em而不是像素来定义尺寸和距离。所以问题是,为什么在CSS中定义样式时应该使用em而不是px?有一个很好的例子可以说明这一点吗? 问题答案: 我问这个问题的原因是,我忘记了如何使用em,因为我在CSS中愉快地编程时已经很久了。人们没有注意到我把这个问题笼罩了,因为我并不是在谈论字体本身的大小。我对如何在页面上的 任何给定块元素 上定义样式更感兴趣。 正如Henr