2016-08-28 3 views
0
public Database(@NonNull Context _context, @NonNull String _tableName){ 
    super(_context, DB_NAME, null, DB_VERSION); 
    this.mContext = _context; 
    this.tableName = _tableName; 
    this.db_create = "CREATE TABLE " + tableName + "(" + COLUMN_ID + " INTEGER NOT NULL PRIMARY KEY, " + 
       COLUMN_DATA + " BLOB)"; 
} 


@Override 
public void onCreate(SQLiteDatabase db) { 
    try{ 
     Log.d("tableCreate", "onCreate: created"); 
     db.execSQL(db_create); 
    }catch(SQLiteException ex){ 

     ex.printStackTrace(); 
     Log.d("TableCreation", "onCreate: cannot create"); 

    } 
} 
public long insert(Model model){ 
    SQLiteDatabase db = getWritableDatabase(); 
    long id = -1; 

    try{ 
     if(maxData > 0 || maxData <= counter){ 
      ContentValues value = new ContentValues(); 
      value.put(COLUMN_ID, model.getCode()); 
      value.put(COLUMN_DATA, model.toJson().getBytes()); 
      counter += 1; 
      id = db.insert(tableName, null, value); //exception is thrown here. 
     } 
    }catch(SQLiteException ex){ 
     ex.printStackTrace(); 
    }finally{ 
     if(db != null) 
      db.close(); 
    } 

    return id; 
    } 
} 

У меня есть класс базы данных, который расширяет SQLiteHelper. Здесь исключение всегда генерируется всякий раз, когда я пытаюсь вставить элемент в таблицу. Сообщение об ошибкеНе удается создать таблицу с SqliteOpenHelper

no such table: university_basic 
08-28 23:26:23.036 30754-30786/com.ujjwal.univhub E/SQLiteDatabase: Error inserting ... 
android.database.sqlite.SQLiteException: no such table: university_basic (code 1): , while compiling: INSERT INTO university_basic(id,model) VALUES (?,?) 

Как из документации и других интернет-ресурсов, я обнаружил, что onCreate() метод вызывается, когда getWriteableDatabase() или getReadableDatabase() вызывается и таблица не существует. Мне позвонил getWriteableDatabase() внутри метода insert(), который предположительно должен создать таблицу, если она не существует или открыть базу данных. Но ошибка msg вызывается каждый раз. Экземпляр базы данных создается в одном из видов деятельности моего приложения.

Connectivity.OfflineDataLoader offlineLoader = connectivity.new OfflineDataLoader(this, 
      "university_basic", 30); 
connectivity.enableOfflineData(offlineLoader); 

Один из конструктора OfflineLoader является

public OfflineDataLoader(@NonNull Context _context, String tableName,int maxData){ 
      this.context = _context; 
      this.tableName = (tableName != null)? tableName : "university_basic"; 
      this.database = new Database(_context, this.tableName); 
      this.database.setMaxData(maxData); 
    } 

Почему таблица не создается здесь ??

+0

Ну, ошибка ясно указывает, что таблица, которую вы используете, не была создана, поэтому, пожалуйста, покажите код, который вы использовали для создания этой таблицы «university_basic». –

+0

Я создал экземпляр базы данных в моем классе MainActivity. Это должно было создать таблицу при вызове метода insert(). –

+0

Не могли бы вы [изменить] свой вопрос включить строку 'new Database()' Activity ', чтобы мы могли попытаться воспроизвести проблему? Здесь, в StackOverflow, мы предпочитаем, чтобы ваш вопрос был [mcve]. Ваш вопрос может быть минимальным, но он не является полным/проверяемым. –

ответ

0

В своем основном действии инициируйте свой вспомогательный класс базы данных, вызвав конструктор.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);  
    mHelper = new MyDbHelper(this); } 

В настоящее время в вашей базе данных класса менеджера по onCreate добавить в код, чтобы создать базу данных.

public class MyDbHelper extends SQLiteOpenHelper { 
private static final String DB_NAME = "mydb"; 
private static final int DB_VERSION = 1; 
public static final String TABLE_NAME = "people"; 
public static final String COL_NAME = "pName"; 
public static final String COL_DATE = "pDate"; 
private static final String STRING_CREATE = "CREATE TABLE " 
     + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + COL_NAME + " TEXT, " + COL_DATE + " DATE);"; 


public MyDbHelper(Context context) { super(context, DB_NAME, null, DB_VERSION);} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    //Create the database table 
    db.execSQL(STRING_CREATE); 
    //You may also load initial values into the database here 
    ContentValues cv = new ContentValues(2); 
    cv.put(COL_NAME, "John Doe"); 
    //Create a formatter for SQL date format 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    cv.put(COL_DATE, dateFormat.format(new Date())); //Insert 'now' as the date 
    db.insert(TABLE_NAME, null, cv); 
    } 

} 
+0

Nate, сначала вы должны прочитать, а затем ответить. Является ли моя версия кода чем-то другим, чем ваша? –

+0

Вы называете вас базой данных в своей основной деятельности, чтобы проверить, созданы ли база данных и таблица? Это единственное различие, которое я вижу, - если таблица не создается, поскольку приложение сначала запускает таблицу, она не будет существовать при попытке вызвать ее. Выполните начальный установочный вызов из 'MainActivity'' onCreate'. – Nate

+0

Все, что я могу сказать, читается внимательно, я тоже включил это. –

0

Сама проблема заключалась в том, что выходит из базы данных, но без table.So удалить и переустановить приложение решить эту проблему.

Смежные вопросы