[英]How do I change sql 'like' operator dynamically?
在下面的代码中,我想动态地检索数据库内容。 但是问题是最终条件。 我应该如何改变?
string qry= "SELECT Data_Sentences FROM table1 Where";
For(i=0;i<arraylenth;i++)
{
qry+= " Data_sentences like '%" + array[i].tostring() + "%' OR";
}qry += " 1=1";
在此代码中,最终条件1 = 1出错。 所有句子检索。 我应该如何更改以仅获得预期的句子?
您发布的代码存在一些问题。
String
连接非常糟糕 。 使用StringBuilder
(或StringBuffer
,如果需要线程安全)做它来代替。 OR 1 = 1
始终为true,因此每一行都将符合条件并返回。 有几个选项供您选择,其中一些是:
StringBuilder qry = new StringBuilder(
"SELECT Data_Sentences FROM table1 WHERE 1 = 1");
for (int i = 0; i < array.length; i++) {
if (i == 0) {
qry.append(" AND (Data_sentences LIKE '%" + array[i].toString() + "%'");
} else {
qry.append(" OR Data_sentences LIKE '%" + array[i].toString() + "%'");
}
if (i == array.length - 1) {
qry.append(")");
}
}
这个将1 = 1
条件移动到基本字符串中,因为无论如何总是将其附加。 它还会更改您的OR
条件的形式,产生一个查询,例如(为便于阅读而格式化):
SELECT Data_Sentences
FROM table1
WHERE 1 = 1
AND (Data_Sentences LIKE '%some value%'
OR Data_Sentences LIKE '%some other value%')
显然,此查询的格式与原始查询的格式不同,但应以相同的方式起作用。 或者,您可以这样做:
StringBuilder qry = new StringBuilder(
"SELECT Data_Sentences FROM table1 WHERE");
for (int i = 0; i < array.length; i++) {
qry.append(" Data_sentences LIKE '%" + array[i].toString() + "%' OR");
}
qry.append(" 1 = 0");
它将产生与您当前查询非常相似的内容(再次格式化以便于阅读):
SELECT Data_Sentences
FROM table1
WHERE Data_Sentences LIKE '%some value%'
OR Data_Sentences LIKE '%some other value%'
OR 1 = 0
我没有执行任何测试来查看哪个查询会更有效,但是如果我不得不猜测,我会说其中OR
较少的查询将是两者中比较快的一个,但是区别(如果有的话) )可以忽略不计。
第三种选择是首先检查array
的长度,如果大小为0
则完全跳过WHERE
子句。
只需将其更改为1=0
:
string qry= "SELECT Data_Sentences FROM table1 Where";
For(i=0;i<arraylenth;i++)
{
qry+= " Data_sentences like '%" + array[i].tostring() + "%' OR";
}qry += " 1=0";
连接器为AND
时使用1=1
。
如果没有这个有趣的1 = 1或1 = 0虚拟条件会更有意义。
string qry= "SELECT Data_Sentences FROM table1 Where";
For(i=0;i<arraylenth;i++)
{
qry+= " Data_sentences like '%" + array[i].tostring() + "%'";
if (i < arraylenth-1)
qry+= " OR";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.