Извлечение данных из базы данных Android для меня невозможно

#android

#Android

Вопрос:

Проблема с курсором Android SQLite при cur3 = db3.rawQuery ниже приведены мои ошибки logcat и весь код класса. Я сталкиваюсь с проблемой восстановления данных на основе сравнения двух таблиц и первичного ключа (pretest_id) первой таблицы предварительной проверки. Я не понимаю, что не так в моем SQL-запросе.

Ошибки Logcat:

 10-20 21:55:28.203: ERROR/AndroidRuntime(2192): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.a1technology.remoteid/com.a1technology.remoteid.Screening}: android.database.sqlite.SQLiteException: near "WHERE": syntax error: , while compiling: SELECT tbl_pre_test.ID AS _id, tbl_pre_test.ddlTestingSession, tbl_pre_test.txtReason, tbl_pre_test.txthowmany, tbl_pre_test.txtques1, tbl_pre_test.rblques2a, tbl_pre_test.rblques2b, tbl_pre_test.rblques3, tbl_pre_test.txtques4, tbl_pre_test.rblques5, tbl_pre_test.rblques6, tbl_pre_test.rblques7, tbl_pre_test.rblques8, tbl_pre_test.rblques9, tbl_pre_test.ddlsick, tbl_pre_test.txtques11, tbl_pre_test.rblques12, tbl_pre_test.txtques13, tbl_pre_test.txtques14, tbl_pre_test.rblques15, tbl_pre_test.rblques16, tbl_pre_test.rblques17, tbl_pre_test.txtques18, tbl_pre_test.txtVCT, WHERE tbl_pre_test.ID =tbl_finger.template AND tbl_pre_test.pretest_id=?
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.os.Looper.loop(Looper.java:123)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.app.ActivityThread.main(ActivityThread.java:3647)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at java.lang.reflect.Method.invokeNative(Native Method)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at java.lang.reflect.Method.invoke(Method.java:507)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at dalvik.system.NativeStart.main(Native Method)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192): Caused by: android.database.sqlite.SQLiteException: near "WHERE": syntax error: , while compiling: SELECT tbl_pre_test.ID AS _id, tbl_pre_test.ddlTestingSession, tbl_pre_test.txtReason, tbl_pre_test.txthowmany, tbl_pre_test.txtques1, tbl_pre_test.rblques2a, tbl_pre_test.rblques2b, tbl_pre_test.rblques3, tbl_pre_test.txtques4, tbl_pre_test.rblques5, tbl_pre_test.rblques6, tbl_pre_test.rblques7, tbl_pre_test.rblques8, tbl_pre_test.rblques9, tbl_pre_test.ddlsick, tbl_pre_test.txtques11, tbl_pre_test.rblques12, tbl_pre_test.txtques13, tbl_pre_test.txtques14, tbl_pre_test.rblques15, tbl_pre_test.rblques16, tbl_pre_test.rblques17, tbl_pre_test.txtques18, tbl_pre_test.txtVCT, WHERE tbl_pre_test.ID =tbl_finger.template AND tbl_pre_test.pretest_id=?
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1324)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at com.a1technology.remoteid.Screening.onCreate(Screening.java:320)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
10-20 21:55:28.203: ERROR/AndroidRuntime(2192):     ... 11 more
  

Код класса:

     static final String pretestTable="tbl_pre_test";
        public static final String columnID="ID";
        public static final String DDL_Testing_Session="ddlTestingSession";
        public static final String Text_Reason="txtReason";
        public static final String Text_Howmany="txthowmany";
        public static final String Text_Ques1="txtques1";
        public static final String RBL_Ques2a="rblques2a";
        public static final String RBL_Ques2b="rblques2b";
        public static final String RBL_Ques3="rblques3";
        public static final String TXT_Ques4="txtques4";
        public static final String RBL_Ques5="rblques5";
        public static final String RBL_Ques6="rblques6";
        public static final String RBL_Ques7="rblques7";
        public static final String RBL_Ques8="rblques8";
        public static final String RBL_Ques9="rblques9";    
        public static final String DDL_Sick="ddlsick";
        public static final String TXT_Ques11="txtques11";
        public static final String RBL_Ques12="rblques12";
        public static final String TXT_Ques13="txtques13";
        public static final String TXT_Ques14="txtques14";
        public static final String RBL_Ques15="rblques15";
        public static final String RBL_Ques16="rblques16";
        public static final String RBL_Ques17="rblques17";
        public static final String TXT_Ques18="txtques18";
        public static final String pretest_id="PretestID";
        public static final String TXT_Vct="txtVCT";


        static final String fingerTable="tbl_finger";
        public static final String fingerTableColumnID="ID";
        public static final String Template="template";


    static boolean addrow=false;
    static int buttonCounter;
    int requestCode;
    private SQLiteDatabase db,db1,db2,db3;
    private DopenHelper helper;
    String TableName = "tbl_pre_test";
    String TableName1 = "tbl_screening";
    String TableName2 = "tbl_postscreen";
    String TableName3 = "tbl_finger";
    String gotDataScreening1,gotDataScreening2;
    private String valuOfDate,textType,valueOfID,valueOfDDLTS,valueOfReason,valueOfHowmany,valueOftxtques1,valueOfrblques2a 
    ,valueOfrblques2b,valueOfrblques3,valueOftxtques4,valueOfrblques5,valueOfrblques6,valueOfrblques7,valueOfrblques8 
    ,valueOfrblques9,valueOfddlsick,valueOftxtques11,valueOfrblques12,valueOftxtques13,valueOftxtques14,valueOfrblques15 
    ,valueOfrblques16,valueOfrblques17,valueOftxtques18;

    //  
    //  private int mYear;   
    //  private int mMonth;
    //  private int mDay;
    TextView PreTestView,ScreeningTextView,PostScreenTV;
    private simpleefficientadapter arrayadapter11,arrayadapter22,arrayadapter33;
    ListView mylist1;
    ListView mylist2;
    ListView mylist3;
    ArrayList<String> prtestData;
    ArrayList<String> screeningData;
    ArrayList<String> postData;
    TextView preTextView,screeTextView,postScreenTextView;
    String Date111,Date222,Date333;
    //Bundle bundle;

    String s1;
    String s2;
    String s3;


    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        db.close();
        db1.close();
        db2.close();
        db3.close();
        helper.close();
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        //openAndQueryDatabase();
        //displayResultList();
        setContentView(R.layout.screening);


        helper=new DopenHelper(Screening.this);
        db=helper.getWritableDatabase();
        db1=helper.getWritableDatabase();
        db2=helper.getWritableDatabase();
        db3=helper.getWritableDatabase();

        s1="Pree-Test";
        s2="Screening";
        s3="Post Screen";


        //new_screening=(Button)findViewById(R.id.new_screening);
        main_return=(Button)findViewById(R.id.main_return);

        mylist1=(ListView)findViewById(R.id.prescreenlist);
        mylist2=(ListView)findViewById(R.id.screeninglist);
        mylist3=(ListView)findViewById(R.id.postscreenlist);
        prtestData=new ArrayList<String>();
        screeningData=new ArrayList<String>();
        postData=new ArrayList<String>();

        final Bundle bundle = this.getIntent().getExtras();
        gotDataScreening1 = getIntent().getStringExtra("TransferedMenuData000");
        gotDataScreening2 = getIntent().getStringExtra("TransferedMenuData111");

        main_return.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent main_return=new Intent(Screening.this,Menu.class);
                startActivity(main_return);
            }
        });


        preTextView = (TextView)findViewById(R.id.birth_text11);
        screeTextView = (TextView)findViewById(R.id.birth_text12);
        postScreenTextView =(TextView)findViewById(R.id.birth_text13);

        preTextView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub          
                Intent newIntent = new Intent(Screening.this, NewScreening.class);
                 bundle.putString("FinalDataScreen1", gotDataScreening1);
                 bundle.putString("FinalDataScreen2", gotDataScreening2);
                 newIntent.putExtras(bundle);
                 startActivityForResult(newIntent, requestCode);

            }
        });

        screeTextView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent simpleIntent=new Intent(Screening.this,SimpleScreening.class);
                 bundle.putString("FinalDataScreen1", gotDataScreening1);
                 bundle.putString("FinalDataScreen2", gotDataScreening2);
                 simpleIntent.putExtras(bundle);
                 startActivityForResult(simpleIntent, requestCode);

            }
        }); 

        postScreenTextView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent postIntent=new Intent(Screening.this,PostScreening.class);
                bundle.putString("FinalDataScreen1", gotDataScreening1);
                bundle.putString("FinalDataScreen2", gotDataScreening2);
                postIntent.putExtras(bundle);
                startActivityForResult(postIntent, 1);

            }
        });
        //                      To Know the SQLite DataBase Version Added By Murali                               

        /*Cursor cursor = SQLiteDatabase.openOrCreateDatabase(":memory:", null).rawQuery("select sqlite_version() AS sqlite_version", null);
        {
        String sqliteVersion = "";
        while(cursor.moveToNext()){
           sqliteVersion  = cursor.getString(0);
           Log.v("SQL Version", cursor.getString(0));
            }   

        }cursor.close();*/
        //                  Code Ends Above Code for To Know SQLite Version                                    

        //                      Below COde For Retriving Data From DataBase                           


        Cursor cur = db.rawQuery("SELECT  PretestID,Date,txtVCT FROM "   TableName,  null);


        try {

            db = this.openOrCreateDatabase("remoteid.db", MODE_PRIVATE, null);

            if(cur != null )
            {
                if(cur.moveToFirst())
                {
                    do {
                        String valuOfDate = cur.getString(cur.getColumnIndex("Date"));
                        String textType = cur.getString(cur.getColumnIndex("txtVCT"));
                        String valueOfID =  cur.getString(cur.getColumnIndex("PretestID"));
                        //Toast.makeText(getApplicationContext(), valueOfID, Toast.LENGTH_SHORT).show();

                        prtestData.add(valuOfDate);        


                    }while (cur.moveToNext());
                }
            }

        }

        catch(Exception e) {
            Log.e("Error", "Error", e);

        } finally {
            if (db != null)
                db.close();

        }

        cur.close();


        Cursor cur1 = db1.rawQuery("SELECT  Date FROM "   TableName1,  null);


        try {

            db1  = this.openOrCreateDatabase("remoteid.db", MODE_PRIVATE, null);

            if(cur1 != null )
            {
                if(cur1.moveToFirst())
                {
                    do {
                        String valuOfDate1 = cur1.getString(cur1.getColumnIndex("Date"));

                        //Toast.makeText(getApplicationContext(), valueOfID, Toast.LENGTH_SHORT).show();

                        screeningData.add(valuOfDate1);                           

                    }while (cur1.moveToNext());
                }
            }

        }

        catch(Exception e) {
            Log.e("Error", "Error", e);

        } finally {
            if (db1 != null)
                db1.close();

        }

        cur1.close();


        Cursor cur2 = db2.rawQuery("SELECT  Date FROM "   TableName2,  null);


        try {

            db2  = this.openOrCreateDatabase("remoteid.db", MODE_PRIVATE, null);

            if(cur2 != null )
            {
                if(cur2.moveToFirst())
                {
                    do {
                        String valuOfDate2 = cur2.getString(cur2.getColumnIndex("Date"));
                        //Toast.makeText(getApplicationContext(), valuOfDate2, Toast.LENGTH_SHORT).show();

                        postData.add(valuOfDate2);  


                    }while (cur2.moveToNext());
                }
            }

        }

        catch(Exception e) {
            Log.e("Error", "Error", e);

        } finally {
            if (db2 != null)
                db2.close();

        }

        cur2.close();


        Cursor cur3 = db3.rawQuery("SELECT " pretestTable "." columnID " AS _id," 
                " " pretestTable "." DDL_Testing_Session "," 
                " " pretestTable "." Text_Reason "," 
                " " pretestTable "." Text_Howmany "," 
                " " pretestTable "." Text_Ques1 "," 
                " " pretestTable "." RBL_Ques2a "," 
                " " pretestTable "." RBL_Ques2b "," 
                " " pretestTable "." RBL_Ques3 "," 
                " " pretestTable "." TXT_Ques4 "," 
                " " pretestTable "." RBL_Ques5 "," 
                " " pretestTable "." RBL_Ques6 "," 
                " " pretestTable "." RBL_Ques7 "," 
                " " pretestTable "." RBL_Ques8 "," 
                " " pretestTable "." RBL_Ques9 "," 
                " " pretestTable "." DDL_Sick "," 
                " " pretestTable "." TXT_Ques11 "," 
                " " pretestTable "." RBL_Ques12 "," 
                " " pretestTable "." TXT_Ques13 "," 
                " " pretestTable "." TXT_Ques14 "," 
                " " pretestTable "." RBL_Ques15 "," 
                " " pretestTable "." RBL_Ques16 "," 
                " " pretestTable "." RBL_Ques17 "," 
                " " pretestTable "." TXT_Ques18 "," 
                " " pretestTable "." TXT_Vct "," " WHERE "   pretestTable "." columnID " =" fingerTable "." Template " AND " pretestTable "." "pretest_id=?" ,  null);

                //" " pretestTable "." TXT_Vct "," " WHERE"   pretestTable "." columnID " =" fingerTable "." Template "AND"  "pretest_id=?" ,  null);

        try {

            db3  = this.openOrCreateDatabase("remoteid.db", MODE_PRIVATE, null);

            if(cur3 != null )    
            {   
              if(cur3.moveToFirst())
                {
                    do {
                        valueOfID =  cur3.getString(cur3.getColumnIndex("PretestID"));
                         valuOfDate = cur3.getString(cur3.getColumnIndex("Date"));
                         textType = cur3.getString(cur3.getColumnIndex("txtVCT"));                                                      
                         valueOfDDLTS = cur3.getString(cur3.getColumnIndex("ddlTestingSession"));
                         valueOfReason = cur3.getString(cur3.getColumnIndex("txtReason"));
                         valueOfHowmany = cur3.getString(cur3.getColumnIndex("txthowmany"));
                         valueOftxtques1 = cur3.getString(cur3.getColumnIndex("txtques1"));
                         valueOfrblques2a = cur3.getString(cur3.getColumnIndex("rblques2a"));
                         valueOfrblques2b = cur3.getString(cur3.getColumnIndex("rblques2b"));
                         valueOfrblques3 = cur3.getString(cur3.getColumnIndex("rblques3"));
                         valueOftxtques4 = cur3.getString(cur3.getColumnIndex("txtques4"));
                         valueOfrblques5 = cur3.getString(cur3.getColumnIndex("rblques5"));
                         valueOfrblques6 = cur3.getString(cur3.getColumnIndex("rblques6"));
                         valueOfrblques7 = cur3.getString(cur3.getColumnIndex("rblques7"));
                         valueOfrblques8 = cur3.getString(cur3.getColumnIndex("rblques8"));
                         valueOfrblques9 = cur3.getString(cur3.getColumnIndex("rblques9"));
                         valueOfddlsick = cur3.getString(cur3.getColumnIndex("ddlsick"));
                         valueOftxtques11 = cur3.getString(cur3.getColumnIndex("txtques11"));
                         valueOfrblques12 = cur3.getString(cur3.getColumnIndex("rblques12"));
                         valueOftxtques13 = cur3.getString(cur3.getColumnIndex("txtques13"));
                         valueOftxtques14 = cur3.getString(cur3.getColumnIndex("txtques14"));
                         valueOfrblques15 = cur3.getString(cur3.getColumnIndex("rblques15"));
                         valueOfrblques16 = cur3.getString(cur3.getColumnIndex("rblques16"));
                         valueOfrblques17 = cur3.getString(cur3.getColumnIndex("rblques17"));
                         valueOftxtques18 = cur3.getString(cur3.getColumnIndex("txtques18"));


                         bundle.getString(valueOfID);
                         bundle.getString(valuOfDate);
                         bundle.getString(textType);
                         bundle.getString(valueOfDDLTS);
                         bundle.getString(valueOfReason);
                         bundle.getString(valueOfHowmany);
                         bundle.getString(valueOftxtques1);
                         bundle.getString(valueOfrblques2a);
                         bundle.getString(valueOfrblques2b);
                         bundle.getString(valueOfrblques3);
                         bundle.getString(valueOftxtques4);
                         bundle.getString(valueOfrblques5);
                         bundle.getString(valueOfrblques6);
                         bundle.getString(valueOfrblques7);
                         bundle.getString(valueOfrblques9);
                         bundle.getString(valueOfddlsick);
                         bundle.getString(valueOftxtques11);
                         bundle.getString(valueOfrblques12);                         
                         bundle.getString(valueOftxtques13);
                         bundle.getString(valueOftxtques14);
                         bundle.getString(valueOfrblques15);
                         bundle.getString(valueOfrblques16);
                         bundle.getString(valueOfrblques17);
                         bundle.getString(valueOftxtques18); 

                    }while (cur3.moveToNext());
                }
            }

        }

        catch(Exception e) {
            Log.e("Error", "Error", e);

        } finally {
            if (db3 != null)
                db3.close();
        }
        cur3.close();   



        arrayadapter11 = new simpleefficientadapter(Screening.this,prtestData);
        arrayadapter22 = new simpleefficientadapter(Screening.this,screeningData);
        arrayadapter33 = new simpleefficientadapter(Screening.this,postData);

        mylist1.setAdapter(arrayadapter11);
        mylist1.setOnItemClickListener(this);
        mylist2.setAdapter(arrayadapter22);
        mylist2.setOnItemClickListener(this);
        mylist3.setAdapter(arrayadapter33);
        mylist3.setOnItemClickListener(this);
    }


    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        Intent intent;
        switch (arg0.getId()) {
        case R.id.prescreenlist:            
            intent = new Intent(getApplicationContext(), NewScreening.class);       

            intent.putExtra("DateValue", valuOfDate);   
            intent.putExtra("TT", textType);    
            intent.putExtra("idValue", valueOfID);  
            intent.putExtra("ddltsValue", valueOfDDLTS);    
            intent.putExtra("reasonValue", valueOfReason);  
            intent.putExtra("howmanyValue", valueOfHowmany);    
            intent.putExtra("textqus1Value", valueOftxtques1);  
            intent.putExtra("textqus2aValue", valueOfrblques2a);    
            intent.putExtra("textqus2bValue", valueOfrblques2b);    
            intent.putExtra("rbqs3Value", valueOfrblques3); 
            intent.putExtra("rbqs4Value", valueOftxtques4); 
            intent.putExtra("rbqs5Value", valueOfrblques5); 
            intent.putExtra("rbqs6Value", valueOfrblques6); 
            intent.putExtra("rbqs7Value", valueOfrblques7); 
            intent.putExtra("rbqs8Value", valueOfrblques8); 
            intent.putExtra("rbqs9Value", valueOfrblques9); 
            intent.putExtra("ddlsValue", valueOfddlsick);   
            intent.putExtra("tq11Value", valueOftxtques11); 
            intent.putExtra("tq12Value", valueOfrblques12); 
            intent.putExtra("tq13Value", valueOftxtques13); 
            intent.putExtra("tq14Value", valueOftxtques14); 
            intent.putExtra("rbqs15Value", valueOfrblques15);   
            intent.putExtra("rbqs16Value", valueOfrblques16);
            intent.putExtra("rbqs17Value", valueOfrblques17);   
            intent.putExtra("rbqs18Value", valueOftxtques18);       

             intent.putExtras(intent);
            startActivity(intent);

             setResult(RESULT_OK, intent);


            break;

        case R.id.screeninglist:
            intent = new Intent(getApplicationContext(), SimpleScreening.class);
            startActivity(intent);

            break;
        case R.id.postscreenlist:
            intent = new Intent(getApplicationContext(), PostScreening.class);
            startActivity(intent);

            break;
        }


    }
}
  

Комментарии:

1. Несмотря на то, что я изменил свой запрос, он также не работает

Ответ №1:

У вас есть лишнее «,» прямо перед вашим WHERE в вашем заявлении. Кроме того, как указал Херб, у вас нет FROM в вашем выборе.

Ответ №2:

в вашем запросе нет раздела «from»