byte[]
使用 Grails 2.2.3将 jpeg 文件(3 到 8 KB 之间)加载到定义为 的列中时,出现标题异常- 这是错误:
org.h2.jdbc.JdbcSQLException: Value too long for column "PHOTO BINARY(255) ... SQL statement: update profile set col1=?, ..., photo=?, ..., coln=? where id=?
这在 Grails 1.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)
}
如果我注释掉class 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 程序员来说非常混乱。