5

データベース関連のアプリを1つ作成します。

これでは、単純なデータベースを作成し、SQLクエリでinを使用てデータベースから値を取得します。

私の問題は、「2,6,8,9,10」のような文字列を取得したことです。まず、この文字列を分割して1つの配列リストに格納します。カンマなし。このarraylistの後で、2,6,8,9,10thisのようにコンマとマージします。

私はこれらすべてを非常にうまくやっています。この文字列をクエリで使用して、データベースから値を取得します。私の質問は

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 。上記のクエリでは、文字列からin(2,6,8,9,10')' `であるためs like a、正常に機能しますか? in second it look like a 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 

新しい文字列にマージした後

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);

次に、新しい文字列を取得して、以下のクエリを渡します。

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+"')";
4

3 に答える 3

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+")";
于 2012-11-29T12:32:50.887 に答える
0

これらのカンマを取り除くには、indexOf や replace 関数などの文字列操作を使用します。

于 2012-11-29T12:32:55.303 に答える
0

準備されたステートメントを使用していて、データベースを安全に保ちたいと仮定すると、最善の選択肢は、SQL文字列 '.... in (?,?,?,...)' でステートメントを準備することです。の '?' 配列にある実際の値の数と同じです。

欠点は、ステートメントを実行するたびにステートメントを準備する必要があるため、パフォーマンスが犠牲になることです。

于 2012-11-29T12:28:37.353 に答える