【发布时间】:2013-12-29 18:39:12
【问题描述】:
我正在开发一个需要持久性功能的应用程序。据我有限的理解,这需要两个类 - SQLiteHelper 类和 DatabaseManager 类。
为了让事情顺利进行,我有一个简单的过程,它将接受一个文本输入并将其插入到数据库中。但是,我收到一个错误:
12-29 19:17:47.952: E/SQLiteDatabase(5840): android.database.sqlite.SQLiteException: no such table: UserTable (code 1): , 编译时: INSERT INTO UserTable(username) VALUES (? )
表示没有用户表,虽然调用 onCreate() 时应该创建该表。
如果能帮助我克服这一障碍,我将非常感激。下面是用于创建数据库功能的两个类。非常感谢。
公共类 DatabaseHelper 扩展 SQLiteOpenHelper {
private static final String DATABASE_NAME = "NutrtionIntuition"; private static final int DATABASE_VERSION = 2; // Database creation sql statement private static final String DATABASE_CREATE = "create table UserTable " + "( _id integer primary key,name text not null);"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } // Method is called during creation of the database. Method is also called on upgrade of database? @Override public void onCreate(SQLiteDatabase database) { database.execSQL(DATABASE_CREATE); } // Method is called during an upgrade of the database, @Override public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { database.execSQL("DROP TABLE IF EXISTS User"); onCreate(database); } }
public class DatabaseManager{
private DatabaseHelper dbHelper;
private SQLiteDatabase database;
private static final String USER_TABLE = "UserTable";
public static final String KEY_ROWID = "_id";
public static final String KEY_USERNAME = "username";
public DatabaseManager(Context context){
dbHelper = new DatabaseHelper(context);
database = dbHelper.getWritableDatabase();
}
//Insert Records into the User Table
public long insertRecords(int id, String name){
ContentValues values = new ContentValues();
//values.put(KEY_ROWID , id);
values.put(KEY_USERNAME, name);
Log.v("Test","Inserting.....");
return database.insert(USER_TABLE, null, values);
}
public Cursor selectRecords() {
String[] cols = new String[] {KEY_ROWID, KEY_USERNAME};
Cursor mCursor = database.query(true, USER_TABLE,cols,null
, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor; // iterate to get each value.
}
}
【问题讨论】:
-
卸载并重新安装您的应用程序,以便删除任何可能的旧数据库版本。或者清除您的应用数据以达到同样的效果。
-
... 之后您更新的
onCreate()应该运行并且您的应用程序将在其他问题上失败。另一个错误,另一个 logcat。