【发布时间】:2014-08-25 08:02:39
【问题描述】:
我想预先填充数据库并简单地检索数据。这是一个时间表,(目前)获取数据并将其放入 3 列。活动名称、日期和地点。
我可以成功检索到 ID 号,即 PK 和活动名称,但应用程序在面对列日时关闭。
这是我收到的 logcat 错误:
Caused by: android.database.sqlite.SQLiteException: no such column: day (code 1): , while compiling: SELECT _id, activity, day, location FROM TrainingTable
我将包含我的代码,看看是否有我遗漏的明显错误:
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类:
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
【问题讨论】:
-
如果您在运行应用程序后一天后添加了列,请尝试清除数据,然后在设备中重新安装应用程序
-
我确实在后期添加了一天,如何清除数据?
-
在设置>应用程序管理器/管理应用程序>您的应用程序的名称。在那里你会看到清除数据的按钮。
-
尝试将
day列重命名为_day或其他任何内容
标签: android database sqlite insert