SQLite-没有这样的列 [英] SQLite - no such column
问题描述
我想预填充一个数据库,然后简单地检索数据.这是一个时间表(目前)将数据收集起来并分为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屋!