2016-08-28 5 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を継承するデータベースクラスがあります。ここでは、テーブルに項目を挿入しようとすると必ず例外がスローされます。私は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); 
    } 

あります?

+0

エラーは、使用しているテーブルが作成されていないことを明示しています。したがって、その "university_basic"テーブルを作成するために使用したコードを示してください。 –

+0

MainActivityクラスにDatabaseのインスタンスを作成しました。これは、insert()メソッドが呼び出されたときにテーブルを作成しているはずです。 –

+0

問題を再現しようとするかもしれないので、あなたの質問を[編集]して、アクティビティの 'new Database()'行を含めることができますか?ここ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

ネイト、まず読んでから答える必要があります。私のバージョンのコードはあなたのものとは何か異なっていますか? –

+0

メインアクティビティのデータベースを呼び出して、データベースとテーブルが作成されているかどうかを確認しますか?それは私が見ることができる唯一の違いは、あなたがそれを呼び出そうとすると、テーブルが存在しないアプリケーションが最初に起動するときにテーブルが作成されない場合です。 'MainActivity'' onCreate'から初期設定呼び出しを行います。 – Nate

+0

私が言うことができるのは慎重に読んだことです。 –

0

非常に問題は、データベースが終了したが、テーブルなしであったことです。アプリケーションをアンインストールして再インストールすると問題が解決しました。

関連する問題