Caused by: android.database.sqlite.SQLiteException: no such table: strings: , while compiling: SELECT id, string FROM strings WHERE id =?
15,926
Solution 1
Under
private static final String DATABASE_NAME = "StringDB";
addprivate static final String TABLE_NAME = "strings";
Change
String CREATE_StringDB_TABLE = "CREATE TABLE StringDBs ( " + "id INTEGER PRIMARY KEY AUTOINCREMENT, " +"string"+ "TEXT )";
to
String CREATE_StringDB_TABLE = "CREATE TABLE " + TABLE_NAME + " (id " + "INTEGER PRIMARY KEY AUTOINCREMENT, string TEXT)";
Change under
onUpgrade
@db.execSQL
to
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
Change all references of
TABLE_STRINGS
toTABLE_NAME
Solution 2
You are passing the wrong table name. You are creating StringDB
and asking for strings
![Merciful](https://i.stack.imgur.com/3GHi9.jpg?s=256&g=1)
Author by
Merciful
Updated on June 26, 2022Comments
-
Merciful about 2 years
I get this Error
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 = ?
I hava StringDB class that has ID and String to store objects of this class into SQLite Database. Please Debug it and give a solution. Here is the code:
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()); } }
-
CodeMonkey almost 10 yearsChanger you
TABLE_STRINGS = "strings";
toTABLE_STRINGS = "StringsDBs"
That or createprivate static final String TABLE_NAME = "strings";
and in onCreate, changeCREATE TABLE StringsDBs ...
toCREATE TABLE " + TABLE_NAME + " ...
and whereTABLE_STRINGS
is, make thatTABLE_NAME
-
Merciful almost 10 yearsdoesn't work your solution
-
CodeMonkey almost 10 yearsI edited my comment. I'll create and answer post...
-
-
Gabe Sechan almost 10 yearsLook at your CREATE statements. Notice the tablename. Look at your later statements. Notice the tablename. Notice they aren't the same. Choose 1 and change it.
-
Merciful almost 10 yearsThanks, I should mention , After doing this Must unistall app Completly, reinstall again!