I can not understand why the table is not created in the Database, I think I am doing everything correctly, but I get the error SQLiteException: no such table.
public boolean onOptionsItemSelected(MenuItem item) { DBH dbh = new DBH(this); SQLiteDatabase db = dbh.getWritableDatabase(); ContentValues cv = new ContentValues(); String commentsDoc = etDocumentComment.getText().toString(); dateExec=dateExsecution.getText().toString(); String docStatus =""; cv.put(DBH.ClaimWorkInfo.DC.OUTLET, outletName); cv.put(DBH.ClaimWorkInfo.DC.DOC_TYPE, documentTypeName); cv.put(DBH.ClaimWorkInfo.DC.DATE_EXEC, dateExec); cv.put(DBH.ClaimWorkInfo.DC.MARK, documentMarkName); cv.put(DBH.ClaimWorkInfo.DC.STATUS, docStatus); cv.put(DBH.ClaimWorkInfo.DC.COMMENTS, commentsDoc); long rowID = db.insert(DBH.ClaimWorkInfo.TABLE_NAME, null, cv); //приложение падает в этой строчке Cursor c = db.query(DBH.ClaimWorkInfo.TABLE_NAME, null, null, null, null, null, null); if (c.moveToFirst()) { int idColIndex = c.getColumnIndex(DBH.ClaimWorkInfo.DC.CLAIM_WORK_ID); int nameColIndexO = c.getColumnIndex(DBH.ClaimWorkInfo.DC.OUTLET); int nameColIndexD = c.getColumnIndex(DBH.ClaimWorkInfo.DC.DOC_TYPE); int nameColIndexDE = c.getColumnIndex(DBH.ClaimWorkInfo.DC.DATE_EXEC); int nameColIndexM = c.getColumnIndex(DBH.ClaimWorkInfo.DC.MARK); int nameColIndexS = c.getColumnIndex(DBH.ClaimWorkInfo.DC.STATUS); int nameColIndex = c.getColumnIndex(DBH.ClaimWorkInfo.DC.COMMENTS); do { Log.d("DAtabase", "ID = " + c.getInt(idColIndex) + ", outlet = " + c.getString(nameColIndexO)+ ", doc_type = " + c.getString(nameColIndexD)+ ", date_exec = " + c.getString(nameColIndexDE)+ ", doc_mark = " + c.getString(nameColIndexM)+ ", doc_status = " + c.getString(nameColIndexS)+ ", comment = " + c.getString(nameColIndex) ); } while (c.moveToNext()); } else Log.d("Nothing in DB", "0 rows"); c.close(); return true; }
DBHelper class code:
public class DBH extends SQLiteOpenHelper implements BaseColumns { private static DBH instance = null; public final static int VERSION = 13; private String mDbName; public DBH(Context context) { super(context, context.getString(R.string.db_name), null, VERSION); this.mDbName = context.getString(R.string.db_name); } public static DBH getInstance(Context context) { if (instance == null) { instance = new DBH(context); } return instance; } @Override public void onCreate(SQLiteDatabase db) { if (!checkDataBase()) { createTables(db); } } public final static class ClaimWorkInfo { public final static String TABLE_NAME = "claim_work"; public final static class DC { public final static String CLAIM_WORK_ID = "claim_work_id"; public final static String OUTLET = "outlet"; public final static String DOC_TYPE = "doc_type"; public final static String DATE_EXEC = "text"; public final static String MARK = "mark"; public final static String STATUS = "status"; public final static String COMMENTS = "comments"; } public final static class DT { public final static String CLAIM_WORK_ID = "integer primary key autoincrement"; public final static String OUTLET = "text"; public final static String DOC_TYPE = "text"; public final static String DATE_EXEC = "text"; public final static String MARK = "text"; public final static String COMMENTS = "text"; public final static String Status = "text"; } } private boolean isTableExists(SQLiteDatabase db, String tableName) { if (tableName == null || db == null || !db.isOpen()) { return false; } Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='" + tableName + "'", null); if (cursor != null) { if (cursor.moveToFirst()) { int count = cursor.getInt(0); cursor.close(); return count > 0; } else { cursor.close(); return false; } } else { return false; } } private void createTable(SQLiteDatabase db, String tableName, Field[] flds, Field[] tps, String foreign) { if (!isTableExists(db, tableName)) { AppLog.e("Create table: " + "!isTableExists" + tableName); String sql = "create table " + tableName + " ("; for (int i = 0; i < flds.length; i++) { try { sql = sql + flds[i].get(DBH.class).toString() + " " + tps[i].get(DBH.class).toString(); if (i != flds.length - 1) { sql = sql + ", "; } } catch (Exception e) { AppLog.e("Create table error: " + e.getMessage()); } } sql = sql + (foreign == null ? ")" : (", " + foreign + ")")); AppLog.i("Query table creation: " + sql); try { db.execSQL(sql); } catch (Exception e) { AppLog.e("Create table error: " + e.getMessage()); } } } private void createTables(SQLiteDatabase db) { createTable(db, DBH.ClaimWorkInfo.TABLE_NAME, DBH.ClaimWorkInfo.DC.class.getFields(), DBH.ClaimWorkInfo.DT.class.getFields(), null); } private boolean checkDataBase() { SQLiteDatabase checkDB = null; try { checkDB = SQLiteDatabase.openDatabase(mDbName, null, SQLiteDatabase.OPEN_READONLY); } catch (SQLiteException e) { } if (checkDB != null) { checkDB.close(); } return (checkDB != null); } }