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を継承するデータベースクラスがあります。ここでは、テーブルに項目を挿入しようとすると必ず例外がスローされます。私はgetWriteableDatabase()
またはgetReadableDatabase()
が呼び出されると、テーブルが存在しない場合onCreate()
メソッドが呼び出されることがわかったドキュメントや他のオンラインリソースからのようなエラーメッセージ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 (?,?)
。私はgetWriteableDatabase()
の中にinsert()
メソッドを呼び出す必要がありました。おそらくテーブルが存在しない場合はテーブルを作成するか、データベースを開くべきです。しかし、エラーmsgは毎回スローされます。データベースのインスタンスは、アプリケーションのアクティビティの1つで作成されます。 OfflineLoaderのコンストラクタの
Connectivity.OfflineDataLoader offlineLoader = connectivity.new OfflineDataLoader(this,
"university_basic", 30);
connectivity.enableOfflineData(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);
}
あります?
エラーは、使用しているテーブルが作成されていないことを明示しています。したがって、その "university_basic"テーブルを作成するために使用したコードを示してください。 –
MainActivityクラスにDatabaseのインスタンスを作成しました。これは、insert()メソッドが呼び出されたときにテーブルを作成しているはずです。 –
問題を再現しようとするかもしれないので、あなたの質問を[編集]して、アクティビティの 'new Database()'行を含めることができますか?ここStackOverflowでは、あなたの質問は[mcve]です。あなたの質問は最小限に抑えられるかもしれませんが、完全ではありません。 –