繁体   English   中英

如何动态更改sql“赞”运算符?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM