0

可能有一个字符串[];该数组在运行时动态存储数据库表列的名称。程序在运行时了解可能的大小。现在把它放在sql查询中。我使用for循环来连接字符串

for(int k=0;k<likely.length;k++)
    {
        temp1="\"+likely["+k+"]+\"='Likely' AND ";
        temp=temp.concat(temp1);                
    }

如果大小为 3,则最终温度将如下所示

temp = " "+likely[0]+"='Likely' AND "+
    likely[1]+"='Likely' AND "+
    likely[2]+"='Likely' AND "

现在我将sql查询制定为

sql ="SELECT * FROM PUNE WHERE"+temp+"Arts_And_Museum='Yes'";

但期间

ps = con.prepareStatement(sql);

该语句的编译方式如下

SELECT * FROM PUNE 
WHERE [+likely[0]+]='Likely' 
AND [+likely[1]+]='Likely' 
AND [+likely[2]+]='Likely' AND Arts_And_Museum='Yes'

经过深入调查,我得出结论,它将“”解释为[或]交替..

结果我得到一个错误我应该如何解决这个问题?

我运行一个 for 循环并准备一个字符串我正在尝试编写一个 sql 语法

4

4 回答 4

1

这就是在处理 SQL 查询时应该使用参数化输入的原因。

// conn refers to your database connection
PreparedStatement stmnt = null;
ResultSet rs = null;
try {
    stmnt = conn.prepareStatement("SELECT * FROM tbl WHERE col > '?'");
    stmnt.setInt(1, 300); //set first parameter to 300
    rs = stmnt.executeQuery();
} catch(Exception ex) {
    System.err.println("Database exception: " + ex.getMessage());
}
于 2012-04-14T23:55:37.383 回答
0

\是保留字符。如果要在字符串中输出引号,请使用\".

所以,这段代码:

temp1="\"+likely["+k+"]+\"='Likely' AND ";

将返回此字符串:

"+likely1]+"='Likely' AND

看来您的 sql 正在转换"[or]

于 2012-04-14T23:36:53.737 回答
0

该符号\用于转义。这样做时,您正在转义所有前面的字符。

每当您要求数组中的项目时,您都可以使用likely[k]无需likey["k"]

这是你应该如何做的。

temp1="\\"+likely[k]+"\\='Likely' AND ";
于 2012-04-14T23:47:48.863 回答
0

只需更改此行:

temp1="\"+likely["+k+"]+\"='Likely' AND ";

对此:

temp1="\"" + likely[k] + "\"='Likely' AND ";
于 2012-04-14T23:56:16.313 回答