Grails运行时异常-值对于列“太长”;照片二进制(255)
当使用Grails 2.2.3将jpeg文件(3到8 KB)加载到定义为Grails运行时异常-值对于列“太长”;照片二进制(255),grails,Grails,当使用Grails 2.2.3将jpeg文件(3到8 KB)加载到定义为字节[]的列中时,我遇到了标题异常-错误如下: org.h2.jdbc.JdbcSQLException:PHOTO BINARY(255)列的值太长。SQL语句:更新配置文件集col1=?,…,PHOTO=?,…,coln=?其中id=? 这在Grails1.3.7中运行,使用org.hsqldb.jdbcDriver,但现在总是失败。我应该以不同的方式定义变量吗?如果是,那么是什么 我尝试将所有的byte[]photo代
字节[]
的列中时,我遇到了标题异常-错误如下:
org.h2.jdbc.JdbcSQLException:PHOTO BINARY(255)列的值太长。SQL语句:更新配置文件集col1=?,…,PHOTO=?,…,coln=?其中id=?
这在Grails1.3.7中运行,使用org.hsqldb.jdbcDriver,但现在总是失败。我应该以不同的方式定义变量吗?如果是,那么是什么
我尝试将所有的byte[]photo
代码更改为byte[]photo=new byte[10000]
,但没有任何帮助
为了回答我得到的答案,我在原来的问题上添加了一些内容。首先,谢谢大家。这是DataSource.groovy中的相关代码:
environment {
developement {
dataSource {
dbCreate = "update"
url = "jdbc:h2:file:devDb:MVCC=TRUE;LOCK_TIMEOUT=10000
}
}
}
以下文件和代码是我认为从-ImageController.groovy加载映像的地方:
class PhotoUploadCommand {
byte[] photo
//def photo // tried, makes no diff here
String userId
static constraints = { photo(maxSize: 1024 * 1024) } // added as per suggestions
}
class ImageController {
def imageService
def upload = { PhotoUploadCommand puc ->
def user = User.findByUserId(puc.userId)
user.profile.photo = puc.photo
//user.profile.photo = request.getFile('photo') // also tried - N/G
redirect(controller: 'user', action: 'profile', id: puc.userId)
}
如果我注释掉所有以类ImageController{
开头并以关闭结尾的代码
这没有区别-因此,我一定是错了,这不是加载图像的地方。但是,在整个应用程序中,我找不到与加载照片直接相关的其他代码。因此,它必须是从Profile.groovy类中提取的:
class Profile {
byte[] photo
//def photo // tried, but then the element is removed from the template
String fullName
String bio
String homepage
String email
String timezone
String country
String jabberAddress
String skin
static mapping = {
photo column: 'photo', sqlType: 'VARBINARY(10000)', nullable: 'true'
//photo(type: 'image') // also tried
}
static constraints = {
fullName(nullable: true)
// ...
//photo(nullable: true, maxSize: 1024 * 1024) // also tried
photo(nullable: true)
// ...
}
还有一个UserContoller.class,它包含所有这些相同的列,另外还有:
String userId
String password
String passwordRepeat
…并且将
byte[]photo
更改为def photo
没有任何作用-添加映射也没有任何作用。对于Java程序员来说非常混乱。使用约束设置字段大小
class MyDomain {
.....
byte[] photo
static constraints = {
photo(maxSize: 1024 * 1024)
}
}
使用约束设置字段大小
class MyDomain {
.....
byte[] photo
static constraints = {
photo(maxSize: 1024 * 1024)
}
}
您可以使用
约束
或映射
闭包来影响hibernate列类型:
使用约束
Grails将检查maxSize
或size
约束,以通知所需列的大小
static constraints = {
photo maxSize: 10000
}
使用列定义
Grails允许您在映射闭包中指定sql数据类型。这些数据类型可能特定于您的DB供应商,但涵盖约束提示不够灵活,无法匹配您的DB架构的情况。例如,使用postgres bytea列
static mapping = {
photo column: 'photo', sqlType: 'VARBINARY(10000)'
}
您可以使用
约束
或映射
闭包来影响hibernate列类型:
使用约束
Grails将检查maxSize
或size
约束,以通知所需列的大小
static constraints = {
photo maxSize: 10000
}
使用列定义
Grails允许您在映射闭包中指定sql数据类型。这些数据类型可能特定于您的DB供应商,但涵盖约束提示不够灵活,无法匹配您的DB架构的情况。例如,使用postgres bytea列
static mapping = {
photo column: 'photo', sqlType: 'VARBINARY(10000)'
}
您还可以使用以下定义:
static mapping = {
photo(type:'image')
}
它将自动映射到正确的数据库类型
确保数据库架构设置/升级正确。您也可以使用以下定义:
static mapping = {
photo(type:'image')
}
它将自动映射到正确的数据库类型
确保数据库模式设置/升级正确。我也遇到了这个问题。我尝试了十几条来自web的建议,但都没有奏效
直到我在DataSource.groovy中为我的开发环境更改了
dbCreate
。我将其设置为“update”,因为我想保留我的数据。然后我猜除非重新创建数据库,否则无法调整数据库列的大小。因此我将其更改为“create,运行grails run应用程序,将其关闭,然后将其切换回“更新”。我不得不重新输入我的所有数据,但从那时起图像上传就起作用了。我也遇到了这个问题。我尝试了十几条来自网络的建议,但没有一条有效
直到我在DataSource.groovy中为我的开发环境更改了我的
dbCreate
。我把它设置为“更新”,因为我想保留我的数据。然后我猜测,除非重新创建数据库,否则无法调整数据库列的大小。所以我把它改为“创建”,运行grails run应用程序,关闭它,然后切换回“更新”。我不得不重新输入我的所有数据,但从那时起图像上传工作正常。谢谢你,emilan,但它没有改变-仍然是相同的错误。它对我有效。好的。检查DataSource.groovyNo中的dbCreate='create'是否设置为update。这是因为我想保留从一个会话到下一个会话的数据。你能检查一下DB中照片的类型吗,它应该是VARBINARY。另外,您可以通过dbconsole执行select*from information_schema.columns执行该操作;再次感谢你,埃米利安。我在原来的问题中添加了很多代码(我无法在注释中添加格式良好的代码)。我将尝试检查数据库类型。谢谢emilan,但它没有改变-仍然是相同的错误。它对我有效。检查DataSource.groovyNo中的dbCreate='create'是否设置为update。这是因为我想保留从一个会话到下一个会话的数据。你能检查一下DB中照片的类型吗,它应该是VARBINARY。另外,您可以通过dbconsole执行select*from information_schema.columns执行该操作;再次感谢你,埃米利安。我在原来的问题中添加了很多代码(我无法在注释中添加格式良好的代码)。我将尝试检查数据库类型。谢谢你,科德拉克。顺便说一句,我也试着用这个网站上显示的方式来做:<代码>def照片;user.profile.photo=request.getFile('photo'),但这也不起作用。我会尝试你的建议,但是你会知道org.h2.Driver的语法是否相似吗?codelark,映射和约束是互斥的吗。。。贝考