且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SQLlite - 没有这样的列

更新时间:2023-12-01 21:57:58

 产生的原因:android.database.sqlite.SQLiteException:没有这样的列:天(code 1): ,在编译时:SELECT _id,活动当天,位置,距离TrainingTable

您可能已经添加的列在后期(即正在运行的应用previously)

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

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

在这里,你会发现明确的数据按钮,并卸载。

希望这有助于。

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.

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.

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)

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

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.

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

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

Hope this helps.