有可能的字符串[]; 此数组在运行时动态存储数据库表的列名。并且程序了解运行时可能的大小。 现在把它放在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语法
答案 0 :(得分: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());
}
答案 1 :(得分:0)
\
是保留字符。如果要在字符串中输出引号,请使用\"
。
所以,这段代码:
temp1="\"+likely["+k+"]+\"='Likely' AND ";
将返回此字符串:
"+likely
的 1 强> ]+"='Likely' AND
您的sql似乎正在将"
转换为[
或]
答案 2 :(得分:0)
符号\
用于转义。在执行此操作时,您将转义所有前面的字符。
每当您要求数组中的某个项目时,您都可以使用likely[k]
访问它,而不需要likey["k"]
这是你应该怎么做的。
temp1="\\"+likely[k]+"\\='Likely' AND ";
答案 3 :(得分:0)
只需更改此行:
temp1="\"+likely["+k+"]+\"='Likely' AND ";
对此:
temp1="\"" + likely[k] + "\"='Likely' AND ";