我想使用SQLite,我编写了Database类并尝试在数据库表中插入值但是我得到的异常是:
I/Database(958): sqlite returned: error code = 1, msg = no such table: Exercise
当我修复日志时,它指向此声明:
long d= dbAdapter.SaveExecise(date, exercise_Time, ex_Name, minutes, burned_cals);
为什么会引发此异常?我已阅读并试过这些问题的解决方案,但错误仍然是我如何解决它? 这是我的代码:
public class DBAdapter {
private static final String DB_NAME = "MYDB";
private static final int DB_VERSION = 1;
private static final String EXERCISE_TABLE_NAME = "Exercise";
private static final String TAG = "DBAdapter";
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
private Context context;
// table Exercise columns name
public static final String KEY_DATE = "Date";
public static final String KEY_TIME = "Time";
public static final String KEY_NAME = "Name";
public static final String KEY_PERIOD = "Period";
public static final String KEY_BURNEDCALS = "Burned_Calories";
private static final String EXERCISE_TABLE_CREATE =
"create tables Exercise (Date text not null , "
+ "Time text not null ,Name text not null,"
+ "Period REAL not null, Burned_Calories REAL not null,"
+ " primary key(Date,Time ) );";
public DBAdapter(Context ctxt) {
this.context = ctxt;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(EXERCISE_TABLE_CREATE);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version"
+ oldVersion + " to " + newVersion
+ ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS Exercise");
onCreate(db);
}
public DBAdapter open() throws SQLException {
db = DBHelper.getWritableDatabase();
return this;
}
// ---closes the database---
public void close() {
DBHelper.close();
}
// ---insert Exercise info to the Exercise table---
public long SaveExecise(String date, String time, String name, float period,
float BurnedCalories) {
ContentValues content = new ContentValues();
content.put(KEY_DATE, date);
content.put(KEY_TIME, time);
content.put(KEY_NAME, name);
content.put(KEY_PERIOD, period);
content.put(KEY_BURNEDCALS, BurnedCalories);
return db.insert(EXERCISE_TABLE_NAME, null, content);
}
}
}
在这里我将练习信息插入练习表:
save_exercise_btn = (Button) findViewById(R.id.save_exercise_Btn);
save_exercise_btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showSavingDialog();
// save the name,ime,burnedcals of the exercise in the DB
int year, month, day;
year = localCalendar.get(1);
month = localCalendar.get(2) + 1;
day = localCalendar.get(5);
String date = year + "/" + month + "/" + day;
DBAdapter dbAdapter = new DBAdapter(SelectedExerciseInfo.this);
dbAdapter = dbAdapter.open();
long d = dbAdapter.SaveExecise(date, exercise_Time, ex_Name, minutes, burned_cals);
dbAdapter.close();
hideSavingDialog();
}
});
答案 0 :(得分:0)
private static final String EXERCISE_TABLE_CREATE ="create tables Exercise (Date text not null , "+
"Time text not null ,Name text not null," + "Period REAL not null,
Burned_Calories REAL not null," +" primary key(Date,Time ) );" ;
您已放置表而非表。查询变得不正确,并且没有创建表。更改它,表格将被创建,然后可以添加数据
private static final String EXERCISE_TABLE_CREATE ="create table Exercise (Date text not null , "+
"Time text not null ,Name text not null," + "Period REAL not null,
Burned_Calories REAL not null," +" primary key(Date,Time ) );" ;
检查DBAdapter的此代码:
public class DBAdapter
{
private static final String DB_NAME="MYDB3131";
private static final int DB_VERSION= 1 ;
private static final String EXERCISE_TABLE_NAME="Exercise";
private static final String TAG = "DBAdapter";
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
private Context context;
// table Exercise columns name
public static final String KEY_DATE="Date";
public static final String KEY_TIME="Time";
public static final String KEY_NAME="Name";
public static final String KEY_PERIOD="Period";
public static final String KEY_BURNEDCALS="Burned_Calories";
/*private static final String EXERCISE_TABLE_CREATE ="create table Exercise ( Date text not null , "+
"Time text not null ,Name text not null," + "Period REAL not null, Burned_Calories REAL not null );" ;
*/
private static final String EXERCISE_TABLE_CREATE ="create table Exercise (Date text not null , "+
"Time text not null ,Name text not null," + "Period REAL not null, Burned_Calories REAL not null," +" primary key(Date,Time ) );" ;
public DBAdapter(Context ctxt)
{ this.context=ctxt;
DBHelper= new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(EXERCISE_TABLE_CREATE);
System.out.println("hereeeee");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
Log.w(TAG, "Upgrading database from version" + oldVersion +" to "+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS Exercise");
onCreate(db);
}
}
//--open the DB
public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return this;
}
//---closes the database---
public void close()
{
DBHelper.close();
}
//---insert Exercise info to the Exercise table---
public long SaveExecise(String date ,String time,String name ,float period, float BurnedCalories)
{
ContentValues content = new ContentValues();
content.put(KEY_DATE, date);
content.put(KEY_TIME, time);
content.put(KEY_NAME, name);
content.put(KEY_PERIOD,period);
content.put(KEY_BURNEDCALS, BurnedCalories);
return db.insert(EXERCISE_TABLE_NAME, null, content);
}}
使用的示例活动的代码:
public class MyA extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
int year,month,day;
Calendar localCalendar = Calendar.getInstance();
year = localCalendar.get(1);
month = localCalendar.get(2)+1;
day = localCalendar.get(5);
String date= year +"/"+month+"/"+day;
DBAdapter dbAdapter=new DBAdapter(this);
dbAdapter=dbAdapter.open();
long d= dbAdapter.SaveExecise(date, 10034+"", 100+"", 100f, 100f);
dbAdapter.close();
Toast.makeText(this, "text"+d, Toast.LENGTH_SHORT).show();
}
}