我创建了一个与数据库相关的应用程序。
在此我创建简单数据库并使用sql查询中的 从数据库中获取值。
我的问题是在那里我得到了像“2,6,8,9,10”这样的字符串。 首先我将这个字符串拆分并存储在一个arraylist中。用逗号。 在这个arraylist后我与逗号合并,如2,6,8,9,10这个。
我做的很好。 我在查询中使用此字符串来从数据库中获取值。 我的问题是
SELECT tm.icon,tm.topic_no,td.topic_id,td.name FROM topicmaster tm ,topicmaster_description td WHERE td.topic_id =tm.topic_id AND td.langid='3' AND tm.oraganisationid ='1' AND td.topic_id in(2,6,8,9,10);
此。
但是当我传递合并字符串时,它看起来像是
SELECT tm.icon,tm.topic_no,td.topic_id,td.name FROM topicmaster tm ,topicmaster_description td WHERE td.topic_id =tm.topic_id AND td.langid='3' AND tm.oraganisationid ='1' AND td.topic_id in('2,6,8,9,10');
所以我无法运行查询,因为 in
中的传递值不同会导致。
在上面的查询工作正常,因为它在{2,6,8,9,10)s like a
中的
in second it look like a
('{2,6,8,9,10')
so what to do.
how to remove this
'来自字符串?
首先我拆分字符串
//getTopicFile ArrayList with
public ArrayList<String> getAssignTopicArrayList(String passString)
{
ArrayList<String> rtnArrayList=new ArrayList<String>();
try
{
StringTokenizer strTokens = new StringTokenizer(passString,",");
while (strTokens.hasMoreElements())
{
rtnArrayList.add(String.valueOf(strTokens.nextToken()));
}
} catch (Exception ex)
{
ex.printStackTrace();
System.err.println("Error in Fetch ArrayList-->"+ex.toString());
}
return rtnArrayList;
}
//getTopicFile ArrayList with
我在New String中合并后
genHelper.showErrorLog("Assign Topic-->"+chapterAssignTopicName);
ArrayList<String> getTopicList=genHelper.getAssignTopicArrayList(chapterAssignTopicName);
String passConcat = "";
for (int i = 0; i < getTopicList.size(); i++)
{
System.out.println("Topic List--->"+getTopicList.get(i));
if(getTopicList.size()==1)
{
passConcat=passConcat.concat(String.valueOf(getTopicList.get(i)));
}
else
{
if(getTopicList.size()-1 == i)
{
System.err.println("value if --> " + i);
passConcat=passConcat.concat(String.valueOf(getTopicList.get(i)));
}else {
System.err.println("value else--> " + i);
passConcat=passConcat.concat(String.valueOf(getTopicList.get(i)).concat(","));
}
}
}
genHelper.showErrorLog("PassConcat String-->"+passConcat);
然后我得到New String并在下面传递查询
String topicQuery="SELECT tm.icon,tm.topic_no,td.topic_id,td.name FROM topicmaster tm ,topicmaster_description td WHERE td.topic_id =tm.topic_id AND td.langid='"+LanguageActivity.languageId+"' AND tm.oraganisationid ='"+genHelper.loadPreferences(String.valueOf(R.string.sharePrefin_Login_organizationid))+"' AND td.topic_id in('"+passConcat+"')";
答案 0 :(得分:2)
不应该
String topicQuery="SELECT tm.icon,tm.topic_no,td.topic_id,td.name FROM topicmaster tm ,topicmaster_description td WHERE td.topic_id =tm.topic_id AND td.langid='"+LanguageActivity.languageId+"' AND tm.oraganisationid ='"+genHelper.loadPreferences(String.valueOf(R.string.sharePrefin_Login_organizationid))+"' AND td.topic_id in('"+passConcat+"')";
是
String topicQuery="SELECT tm.icon,tm.topic_no,td.topic_id,td.name FROM topicmaster tm ,topicmaster_description td WHERE td.topic_id =tm.topic_id AND td.langid='"+LanguageActivity.languageId+"' AND tm.oraganisationid ='"+genHelper.loadPreferences(String.valueOf(R.string.sharePrefin_Login_organizationid))+"' AND td.topic_id in("+passConcat+")";
答案 1 :(得分:0)
您最好的选择,假设您正在使用预准备语句,并且您希望保持数据库的安全,那就是使用sql字符串'.... in(?,?,?,...)'来准备语句 那里的数量'?'等于数组中实际值的数量。
缺点是你牺牲了性能,因为每次你想要执行它时都需要准备语句。
答案 2 :(得分:0)
使用一些sting操作,如indexOf和替换函数来删除这些逗号。