簡體   English   中英

android studio 2.2中的Sqlite

[英]Sqlite in android studio 2.2

我在函數 getfood 的 DESC 中編寫查詢獲取錯誤時出錯。這是我的例外。

例外:

崩潰的開始

    E/AndroidRuntime: FATAL EXCEPTION: main

      Process: com.app.caloriescounter.admin.caloriescounter, PID: 2759
                      java.lang.RuntimeException: Unable to start activity 
    ComponentInfo{com.app.caloriescounter.admin.caloriescounter/com.app.caloriesc
    ounter.admin.caloriescounter.Main2Activity}: 
    java.lang.IllegalArgumentException: **invalid LIMIT clauses: DESC** 
             at 
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                          at 
    android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                          at android.app.ActivityThread.-wrap11(ActivityThread.java)
                          at 
    android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
     at android.os.Handler.dispatchMessage(Handler.java:102)
                          at android.os.Looper.loop(Looper.java:148)
                          at 
    android.app.ActivityThread.main(ActivityThread.java:5417)
                          at java.lang.reflect.Method.invoke(Native Method)
                          at 
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                          at 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                       Caused by: java.lang.IllegalArgumentException: invalid LIMIT clauses: DESC 
                          at 
    android.database.sqlite.SQLiteQueryBuilder.buildQueryString(SQLiteQueryBuilde
    r.java:209)
                          at 
   android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1160)
                          at 
    android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034)
                          at 
    android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1240)
                          at 
    data.Databasehandler.getfood(Databasehandler.java:86)
                          at 
com.app.caloriescounter.admin.caloriescounter.Main2Activity.refreshdata(Main2Activity.java:38)
                          at com.app.caloriescounter.admin.caloriescounter.Main2Activity.onCreate(Main2Activity.java:32)
                          at android.app.Activity.performCreate(Activity.java:6237)
                          at 
    android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                          at 
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                          at 
    android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 

                          at android.app.ActivityThread.-
    wrap11(ActivityThread.java) 
                          at 
    android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                          at 
    android.os.Handler.dispatchMessage(Handler.java:102) 
                          at android.os.Looper.loop(Looper.java:148) 
                          at 
    android.app.ActivityThread.main(ActivityThread.java:5417) 

這是我的源代碼: Databasehandler類。

    package data;
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    import java.text.DateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import model.Food;

    /**
     * Created by Admin on 9/10/2016.
     */
    public class Databasehandler extends SQLiteOpenHelper {
        private static final String LOGCAT = null;
        private final ArrayList<Food> foodArrayList=new ArrayList<>();
        public Databasehandler(Context context) {
            super(context,Constsnts.databasename,null,Constsnts.databaseversion);
            Log.d(LOGCAT,"Database Created");
        }
        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase) {
    String Crete_Table="CREATE TABLE "+ Constsnts.food_table+" ( " + 
    Constsnts.KeyId +"INTEGER PRIMARY KEY, " + Constsnts.food_name +"TEXT, "
            +Constsnts.foodcalories +"INT , "+Constsnts.datename +"LONG );";
        sqLiteDatabase.execSQL(Crete_Table);
        }
        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "+Constsnts.food_table);
        //new one
            onCreate(sqLiteDatabase);
        }
        //item all
        public int getTotalitem(){
            int totalitem=0;
            String query=" SELECT * FROM "+Constsnts.food_table;
            SQLiteDatabase db=this.getReadableDatabase();
            Cursor cursor=db.rawQuery(query,null);
            totalitem=cursor.getCount();
            cursor.close();
            return totalitem;
        }
    public  int Caloriesall(){
            int calories=0;
            String query="SELECT SUM ( "+Constsnts.foodcalories +")"+"FROM 
    "+Constsnts.food_table;
            SQLiteDatabase db=this.getReadableDatabase();
            Cursor cursor=db.rawQuery(query,null);
            if(cursor.moveToNext()){
                calories=cursor.getInt(0);
            }
            cursor.close();
            db.close();
            return  calories;
        }
        //deletefood
        public void deletefood(int id){
           SQLiteDatabase db=this.getWritableDatabase();
            db.delete(Constsnts.food_table,Constsnts.KeyId+" =? ",new String[]
    {String.valueOf(id)});
            db.close();
        }
        //add food
        public void addfood(Food food){
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put(Constsnts.food_name,food.getFoodname());
            values.put(Constsnts.foodcalories,food.getCaleries());
            values.put(Constsnts.datename,System.currentTimeMillis());
            db.insert(Constsnts.food_table,null,values);
            Log.v("Added food item","yess");
            db.close();
        }
        //get all food
        public ArrayList<Food> getfood(){
            foodArrayList.clear();
            SQLiteDatabase db=this.getReadableDatabase();
            Cursor cursor=db.query(Constsnts.food_table,new String[]
    {Constsnts.KeyId,Constsnts.databasename,
Constsnts.foodcalories,Constsnts.datename},null,null,null,null,Constsnts.datename," DESC ");
            if(cursor.moveToFirst()){
                do {
                    Food food=new Food();
    food.setFoodname(cursor.getString(cursor.getColumnIndex(Constsnts.food_name)));
    food.setCaleries(cursor.getInt(cursor.getColumnIndex(Constsnts.foodcalories)));
    food.setFoodid(cursor.getInt(cursor.getColumnIndex(Constsnts.KeyId)));
                    DateFormat dateFormat=DateFormat.getDateInstance();
                    String data=dateFormat.format(new 
    Date(cursor.getLong(cursor.getColumnIndex(Constsnts.datename))).getTime());
                    food.setRecorddate(data);
                    foodArrayList.add(food);
                }while(cursor.moveToNext());
            }
    cursor.close();
            db.close();
            return foodArrayList;
        }
    }

提前致謝。

Cursor cursor=db.query(...,Constsnts.datename," DESC ");

DESC 必須是 ORDER BY 子句的一部分。 您已將其放入下一個參數中,這使其最終出現在 LIMIT 子句中。

您必須將列名和 DESC 放入同一個參數中:

Cursor cursor=db.query(...,Constsnts.datename+" DESC");

暫無
暫無

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

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