I am getting error in writing query get error at DESC in function getfood.Here is my exception.
Exception:
beginning of crash
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)
this is my Source Code: of Databasehandler
class.
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;
}
}
Thanks in advance.
Cursor cursor=db.query(...,Constsnts.datename," DESC ");
The DESC must be part of the ORDER BY clause. You have put it into the next parameter, which makes it end up in the LIMIT clause.
You have to put the column name and the DESC into the same parameter:
Cursor cursor=db.query(...,Constsnts.datename+" DESC");
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.