我有一个似乎是错误的错误。我可以在数据库中添加一个在文本中带有单引号的条目。
但是,当我使用QueryBuilder搜索任何类似xyz的文本时,如果xyz中包含单引号,我会发现MySQL抱怨SQL格式错误。
除了自己解析所有字符串外,Ormlite中是否可以调用某些方法来“字符串化”我的字符串?
示例代码如下:
public boolean isDuplicate () {
QueryBuilder<Company, Long> qb = getDao().queryBuilder() ;
Where<Company, Long> where = qb.where() ;
try {
if (Strings.isValid(name))
where.like("name", name) ;
if (Strings.isValid(regNo)) {
if (Strings.isValid(name))
where.or() ;
where.eq("regNo", regNo) ;
List<Company> res = where.query() ;
if (res != null && res.size() > 0)
return true ;
else
return false ;
}
} catch (SQLException e) {
GlobalConfig.log(e, true);
}
return false ;
}
如果公司名称中包含单引号,则会创建一个SQL错误:
为“不要删除我”创建默认条目2 Please Pte Ltd. [12-07-2013 13:45:42]您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以在“ t Delete Me 2 Please Pte Ltd.”附近使用正确的语法。
regNo
第1行的OR ='delete')'
任何建议欢迎。
好的,我知道了这一点-我需要使用SelectArg方法来查询数据库。
所以现在看起来像这样:
...
if (Strings.isValid(name))
{
SelectArg arg = new SelectArg () ; // Added
arg.setValue (name) ; / Added
where.like("name", arg) ; // Changed
}
if (Strings.isValid(regNo))
{
if (Strings.isValid(name))
where.or() ;
SelectArg arg = new SelectArg () ; // Added
arg.setValue (regNo) ; // Added
where.eq("regNo", arg) ; // Changed
List<Company> res = where.query() ;
if (res != null && res.size() > 0)
return true ;
else
return false ;
...
我了解到的是:您必须使用一个SelectArg PER项目。
现在我对格雷的问题是,为什么不将其作为默认行为?当我插入或更新它时,它似乎会自动发生,为了解决我发现的问题,我必须添加更多行代码,这些行很容易成为内部查询处理的一部分。
我了解他在这篇文章中的担忧,但我同意戴尔的看法。也许是半途而废的是要有一个标志来说明Ormlite应该以哪种方式对待查询方法的参数。
我很欣赏Ormlite中“可编程” SQL的灵活性和简单性,并且几乎在每种情况下,与Ormlite相关的代码都简洁,易于理解且合乎逻辑。这是一种罕见的情况,我觉得它过于冗长,没有任何净收益。只是我的观点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句