SQLite-没有这样的列 [英] SQLite - no such column

查看:89
本文介绍了SQLite-没有这样的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想预填充一个数据库,然后简单地检索数据.这是一个时间表(目前)将数据收集起来并分为3列.活动名称,日期和时间位置.

I want to pre-populate a database and simply retrieve the data. It is a timetable which (for the moment) takes data and puts it into 3 columns. activity name, day & location.

我可以成功检索ID号,即PK和活动名称,但是当遇到列日期时,应用程序将关闭.

I can successfully retrieve the ID number which is the PK and activity name but the application shuts down when it is faced with the column day.

这是我收到的logcat错误:

This is the logcat error I am receiving:

Caused by: android.database.sqlite.SQLiteException: no such column: day (code 1): , while compiling: SELECT _id, activity, day, location FROM TrainingTable

我将包含我的代码,以查看是否遗漏了一个明显的错误:

I will include my code to see if there is a glaring mistake I'm missing:

public class Training_table {

//setting up rows
public static final String KEY_ROWID = "_id";//creates a row ID variable
public static final String KEY_ACTIVITY = "activity";
public static final String KEY_DAY = "day";
public static final String KEY_LOCATION = "location";

//setting up database as private so only this class can ac
private static final String DATABASE_TABLE = "TrainingTable";
private static final int DATABASE_VERSION = 2;//db version

//setup db and setup subclass and use dbHelper to setup db

private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;



private static class DbHelper extends SQLiteOpenHelper{


    public DbHelper(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);//passing info into super class
    }

    //exe SQL code to create a table & three columns
    //only time this onCreate method is called is first time we create db

    /*@Override
    public void onCreate(SQLiteDatabase db) {


    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_ACTIVITY + " TEXT NOT NULL, " + KEY_DAY + " TEXT NOT NULL, " +
                KEY_LOCATION + " TEXT NOT NULL);"
        );//Execute Database and create table


    }//onCreate method


    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " +DATABASE_TABLE);
        onCreate(db);

    }
}

public  Training_table(Context c){
    ourContext = c;
}//constructor (initialising context)



//openMethod & write to it
public Training_table open(){

    ourHelper = new DbHelper(ourContext);

    ourDatabase = ourHelper.getWritableDatabase();
    return  this;
}
//close SQLiteOpenHelper
public void close(){
    ourHelper.close();
}
public void deleteTable(){
    ourDatabase.delete(DATABASE_TABLE, null, null);
}

   public long newEntry(String theActivity, String theDay, String theLocation) {
   // TODO Auto-generated method stub
   ContentValues values = new ContentValues();
   values.put(KEY_ACTIVITY, theActivity);
   values.put(KEY_DAY, theDay);
   values.put(KEY_LOCATION, theLocation);
   return ourDatabase.insert(DATABASE_TABLE, null, values);
   }


   public String getData() { //CREATING getData() method
   String[] columns = new String[] {KEY_ROWID, KEY_ACTIVITY, KEY_DAY, KEY_LOCATION}; /*Setting up column array,
                                                    holding all fields*/
   Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); //initialising the cursor
   String result = "";

    /*Setting up a few int's below, to hold the column location of the activity,
    day and location within the database */
   int indexActivity = c.getColumnIndex(KEY_ACTIVITY);
   int indexDay = c.getColumnIndex(KEY_DAY);
   int indexLocation = c.getColumnIndex(KEY_LOCATION);

   for (c.moveToLast(); !c.isAfterLast(); c.moveToNext()){

       //Getting all values below
       result = c.getString(indexActivity);
       result = result + " " + c.getString(indexDay) + " " + c.getString(indexLocation);
   }
   c.close(); //Closing the cursor
   return result;
   }


}//RaceRating class (DB Class)

这是调用方法的java类:

And this is the java class calling the methods:

public class Training_table_view extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.training_table_view);

    TextView tv = (TextView)findViewById(R.id.tvTTinfo);//setting up reference
    //Button bv = (Button)findViewById(R.id.bViewDetails);

    String act = "Swimming";
    String day = "Mon";
    String loc = "bfast";

    Training_table info = new Training_table(this);//create training table

    info.open();//open Training table  class
    info.deleteTable();

    //info.insertRecord1();
    info.newEntry(act,day,loc);

    String data = info.getData();//return string from get data method

    info.close();

    tv.setText(data);//set text view to the string we got data from


}//onCreate


}//Training_table_view class

推荐答案

Caused by: android.database.sqlite.SQLiteException: no such column: day (code 1): , while compiling: SELECT _id, activity, day, location FROM TrainingTable

您可能在以后的阶段(即先前运行的应用程序)添加了列day.

You might have added column day on later stage (i.e. running application previously)

您需要清除应用程序的数据,重新安装并再次检查.

You need to Clear the data of your application, Reinstall and check again.

打开设备设置>应用程序管理器/管理应用程序> YourAppName.

Open device Settings > Application Manager / Manage Apps > YourAppName.

在这里您将找到一个清除数据的按钮,然后将其卸载.

Here you will find a button of clear data, and uninstall.

希望这会有所帮助.

这篇关于SQLite-没有这样的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆