簡體   English   中英

重寫SQLite語句SELECT WHERE-Android Eclipse

[英]Rewrite SQLite statement SELECT WHERE - Android Eclipse

我編寫了一種方法,可以搜索數據庫以根據模塊查找匹配的講師。 但是,當我運行此命令時,它將為所有三個保存相同的名稱!

方法如下:

public List<tableModules> getStudentsLecturers(String mod1, String mod2, String mod3) {
        List<tableModules> studentModuleLecturer = new ArrayList<tableModules>();       
        // Select All Query to find lecturers depending on modules      
        Log.d("Lecturers", mod1);
        Log.d("Lecturers", mod2);
        Log.d("Lecturers", mod3);
        String selectQuery = "SELECT DISTINCT " + Module_Lecturer + " FROM " + Table2 + " WHERE " + Module_Name + " = \'" + mod1 + "\' OR \'" + mod2 + "\' OR \'" + mod3 + "\'";
        Log.d("1", "1");
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {               
                tableModules  moduleLecturers = new tableModules();             
                moduleLecturers.modulelecturer = cursor.getString(0);          
                studentModuleLecturer.add(moduleLecturers);         
            } while (cursor.moveToNext());
        }
        // return lecture list
        return studentModuleLecturer;       
    }

然后在MainActivity.java中在此處調用

List<tableModules> lecturers = db.getStudentsLecturers(mod1, mod2, mod3);
                if (!lecturers.isEmpty())
                {           
                for (tableModules session: lecturers)
                {
                    Editor editor = preferences.edit();
                    //Save lecturers to list
                    for (int i=0; i < lecturers.size(); i++) {
                        if (counter == 0)
                        {                    
                        lecturer1 = session.modulelecturer.toString();
                        editor.putString("lec1", lecturer1);
                        Log.d("Lecs", "1"); 
                        editor.commit();
                        counter++;
                        }
                        if (counter == 1)
                        {                   
                        lecturer2 = session.modulelecturer.toString();
                        editor.putString("lec2", lecturer2);
                        Log.d("Lecs", "2"); 
                        editor.commit();
                        counter++;
                        }
                        if (counter == 2)
                        {   
                        lecturer3 = session.modulelecturer.toString();
                        editor.putString("lec3", lecturer3);
                        Log.d("Lecs", "3"); 
                        editor.commit();
                        counter++;
                        }
                        else
                        {                               
                            Log.d("Lecs", "ERROR"); 
                        }
                     }  

我知道我要保存相同的“ session.modulelecturer.toString();” 每個,但我不知道如何更改SQL方法以為所有三個單獨的模塊選擇所有三個講師。

嘗試更換

" WHERE " + Module_Name + " = \'" + mod1 + "\' OR \'" + mod2 + "\' OR \'" + mod3 + "\'";

" WHERE " + Module_Name + " = '" + mod1 + "' OR " + Module_Name + " = '" + mod2 + "' OR " + Module_Name + " = '" + mod3 + "'";

在實踐中,你不能說

WHERE ModuleName = 'This' OR 'That'

但是你可以說

WHERE ModuleName = 'This' OR ModuleName = 'That'

我知道這是為每個可能的值重寫列名的一種麻煩,但這就是它在SQL中的工作方式。


另外,您可以編寫一個更緊湊的表格:

WHERE ModuleName IN ('This', 'That', '...')

這樣您的查詢可以變成:

" WHERE " + Module_Name + " IN ('" + mod1 + "', '" + mod2 + "', '" + mod3 + "')";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM