我正在使用我的主类中的实体管理器调用命名查询,如下所示
$('.dateStart[value="0"]').addClass('selected');
$('.dateStart[val="0"]').addClass('selected');
$('.dateStart[attr-val="0"]').addClass('selected');
命名查询如下
public void openDialogInvite(Activity activity)
{
String appLinkUrl, previewImageUrl;
appLinkUrl = "url";
previewImageUrl = "img";
if (AppInviteDialog.canShow())
{
AppInviteContent content = new AppInviteContent.Builder()
.setApplinkUrl(appLinkUrl)
.setPreviewImageUrl(previewImageUrl)
.build();
CallbackManager sCallbackManager = CallbackManager.Factory.create();
AppInviteDialog appInviteDialog = new AppInviteDialog(activity);
appInviteDialog.registerCallback(sCallbackManager, new FacebookCallback<AppInviteDialog.Result>()
{
@Override
public void onSuccess(AppInviteDialog.Result result) {
Toast.makeText(getApplicationContext(),"Success",Toast.LENGTH_LONG).show();
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(),"Success",Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException error) {
Toast.makeText(getApplicationContext(),"Success",Toast.LENGTH_LONG).show();
}
});
appInviteDialog.show(content);
}
}
我传递包含字符串值的NAMES(&#39; A&#39;,&#39; B&#39;&#39; C&#39;)
现在我遇到的问题是表中的sc.name列包含单个值为&#34; A&#34;,&#34; B&#34;,&#34; C&# 34;但是我将查询中的列sc.name作为整数与NAMES变量进行比较。它返回了结果列表。
如何将单个子字符串与String匹配?
答案 0 :(得分:1)
JDBC对于SQL ARRAY有一个Array类,对于某些用法,例如createArrayOf。
Array array = connection.createArrayOf("VARCHAR", new Object[] {"A", "B", "C" });
preparedStatement.setArray("name", array);
答案 1 :(得分:1)
将List
(或任何Collection
)传递给setParameter方法。
query.setParameter("name",list)
hibernate专门做了一个检查集合的实例
public TypedQuery<X> setParameter(String name, Object value) {
try {
if(value instanceof Collection) {
this.query.setParameterList(name, (Collection)value);
} else {
this.query.setParameter(name, value);
}
this.registerParameterBinding(this.getParameter(name), value);
return this;
} catch (QueryParameterException var4) {
throw new IllegalArgumentException(var4);
} catch (HibernateException var5) {
throw this.getEntityManager().convert(var5);
}
}
其他JPA实现可能具有相同的行为
答案 2 :(得分:0)
如果你坚持NAMES是字符串类型&#34; A,B,C&#34;,我看到2个选项: 1)每次都建立sql,没有参数
query = "SELECT sc FROM sampleTable sc where sc.name IN (" + NAMES + ")"
如果NAMES来自用户输入,则受sql注入。
2)sql注入安全选项带参数但性能可能较慢,优化器不能使用索引query = "SELECT sc FROM sampleTable sc where ',' || :name || ',' like '%,' || sc.name || ',%'"