我得到这个错误
07-16 20:58:27.299: E/AndroidRuntime(14005): Caused by: android.database.sqlite.SQLiteException: no such table: strings: , while compiling: SELECT id, string FROM strings WHERE id = ?
我有具有ID和String的StringDB类,用于将此类的对象存储到SQLite数据库中。请对其进行调试并提供解决方案。这是代码:
public class MySQLiteHelper extends SQLiteOpenHelper { // Database Version private static final int DATABASE_VERSION = 2; // Database Name private static final String DATABASE_NAME = "StringDB"; public MySQLiteHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // SQL statement to create StringDB table String CREATE_StringDB_TABLE = "CREATE TABLE StringDBs ( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " +"string"+ "TEXT )"; // create StringDBs table db.execSQL(CREATE_StringDB_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Drop older StringDBs table if existed db.execSQL("DROP TABLE IF EXISTS StringDBs"); // create fresh StringDBs table this.onCreate(db); } //--------------------------------------------------------------------- /** * CRUD operations (create "add", read "get", update, delete) StringDB + get all StringDBs + delete all StringDBs */ // StringDBs table name private static final String TABLE_STRINGS = "strings"; // StringDBs Table Columns names private static final String KEY_ID = "id"; private static final String KEY_STRING= "string"; private static final String[] COLUMNS = {KEY_ID,KEY_STRING}; public void addStringDB(StringDB string){ // 1. get reference to writable DB SQLiteDatabase db = this.getWritableDatabase(); // 2. create ContentValues to add key "column"/value ContentValues values = new ContentValues(); values.put(KEY_STRING, string.getString()); // get author // 3. insert db.insert(TABLE_STRINGS, // table null, //nullColumnHack values); // key/value -> keys = column names/ values = column values // 4. close db.close(); } public StringDB getStringDB(int id){ // 1. get reference to readable DB SQLiteDatabase db = this.getReadableDatabase(); // 2. build query Cursor cursor = db.query(TABLE_STRINGS, // a. table COLUMNS, // b. column names " id = ?", // c. selections new String[] { String.valueOf(id) }, // d. selections args null, // e. group by null, // f. having null, // g. order by null); // h. limit // 3. if we got results get the first one if (cursor != null) cursor.moveToFirst(); // 4. build StringDB object StringDB res=new StringDB(); res.setId(Integer.parseInt(cursor.getString(0))); res.setString(cursor.getString(1)); return res; } // Get All StringDBs public List<StringDB> getAllStringDBs() { List<StringDB> StringDBs = new LinkedList<StringDB>(); // 1. build the query String query = "SELECT * FROM " + TABLE_STRINGS; // 2. get reference to writable DB SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(query, null); // 3. go over each row, build StringDB and add it to list StringDB StringDB = null; if (cursor.moveToFirst()) { do { StringDB = new StringDB(); StringDB.setId(Integer.parseInt(cursor.getString(0))); StringDB.setString(cursor.getString(1)); // Add StringDB to StringDBs StringDBs.add(StringDB); } while (cursor.moveToNext()); } Log.d("getAllStringDBs()", StringDBs.toString()); // return StringDBs return StringDBs; } // Updating single StringDB public int updateStringDB(StringDB StringDB) { // 1. get reference to writable DB SQLiteDatabase db = this.getWritableDatabase(); // 2. create ContentValues to add key "column"/value ContentValues values = new ContentValues(); values.put("strings", StringDB.getString()); // get author // 3. updating row int i = db.update(TABLE_STRINGS, //table values, // column/value KEY_ID+" = ?", // selections new String[] { String.valueOf(StringDB.getId()) }); //selection args // 4. close db.close(); return i; } // Deleting single StringDB public void deleteStringDB(StringDB StringDB) { // 1. get reference to writable DB SQLiteDatabase db = this.getWritableDatabase(); // 2. delete db.delete(TABLE_STRINGS, KEY_ID+" = ?", new String[] { String.valueOf(StringDB.getId()) }); // 3. close db.close(); Log.d("deleteStringDB", StringDB.toString()); } }
下private static final String DATABASE_NAME = "StringDB";添加
private static final String DATABASE_NAME = "StringDB";
private static final String TABLE_NAME = "strings";
改变 String CREATE_StringDB_TABLE = "CREATE TABLE StringDBs ( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " +"string"+ "TEXT )";
String CREATE_StringDB_TABLE = "CREATE TABLE StringDBs ( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " +"string"+ "TEXT )";
到
String CREATE_StringDB_TABLE = "CREATE TABLE " + TABLE_NAME + " (id " + "INTEGER PRIMARY KEY AUTOINCREMENT, string TEXT)";
onUpgrade
db.execSQL
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
TABLE_STRINGS
TABLE_NAME